2013年3月21日 星期四

3dsMax - 請小心FBX Export Preset的設定

今天遇到了一個超奇妙的問題,當我輸出FBX要Bake Animation的時候,我的時間區段一直只能設定0到100之間,但昨天明明還是正常的,查了將近一整天一直無法解決,後來請高手支援一下才發現原來是個愚蠢的問題!

那就是FBX Export Preset中可以設定Start跟End的最大最小值,而這該死的被設定成了0到100,至於為何突然會被設定成0至100之間,這還是一個謎!不過我猜是因為我用了MAXScript的FbxExporterSetParam的關係‧‧‧

設定FBX Export Preset的步驟

  1. 在FBX Exporter dialog中按下Edit按鈕並選擇Edit preset
  2. 會跳出上圖左方的Tree List找到Bake Animation的Start/End項目並右鍵點擊選擇Edit min max
  3. 輸入Minimum及Maximum數值
但目前還不知道要怎麼將他回復成預設狀態‧‧‧

另外要用MAXScript設定Start/End的話可以使用

FBXExporterSetParam "BakeFrameStart" [Integer value]

FBXExporterSetParam "BakeFrameEnd" [Integer value]

FBXExporterSetParam "BakeFrameStep" [Integer value]

2013年3月19日 星期二

[AE] Camera Mapping

想用一張2D照片做出3D空間的效果,所使用的技術為Camera Mapping或Camera Projection。


教學:
  1. 較陽春的作法,適合構圖簡單和沒這麼多時間生小孩的時候用XD,將元素切分成幾個圖層,拉出前後距離即可。
    How To Make Virtual 3D Photos In After Effects by AndrewKramer
  2. 使用AE的Light shadow做出投影的效果,只需用幾片板子即可做出簡單的3D空間效果。
    而在實際用過之後發現有幾點需要注意。在結構較複雜的場景中,板子的對位非常重要,否則會有很大的破綻。另一點則是,投影出來的圖像解析度跟原圖差距相當大,因為通常原圖是被投影到更大的面積上,且有角度造成的失真,儘管把Shadow Map Resolution調到最大也還是達不到可用的水準,目前還不知道較佳解決的方法,若解析度不佳,那這種方法也就沒路用了。
    教學:
    Camera Mapping in After Effects by Creative Cow
    2D footage to stereo 3D using camera projection mapping
    Camera Projection technique Tutorial
    其他範例:峽谷
  3. 利用建模做出更真實的3D效果。
    Discover projection mapping to animate photos in 3D
  4. 另外我有試出一種偷吃步的方式:傾斜大法!
    在AE中利用Effect/Corner pin做出Skew,再把與後方景物位差明顯的物件拆出來,不做傾斜並跟著會傾斜的底圖移動,就能有空間感的錯覺。但目前只試過水平運鏡的狀況,也許垂直運鏡跟深度運鏡會較難表現。
延伸閱讀:
[Wiki] 3D Projection 

[MAXScript] Path處理

以前在處理檔案路徑時,有些功能都自己寫Function來用,例如將兩段路徑結合成一個完整路徑等等。今天看MAXScript Reference時才發現,MAXScript自己就有許多Methods可以對路徑做各種的處理,非常方便。

MAXScript Reference - PathConfig Struct
以下從中節錄出較常用的項目

pathConfig.appendPath 
將路徑片段合併
pathConfig.appendPath "c:\\temp" "test.txt"
"c:\temp\test.txt"

pathConfig.convertPathToLowerCase
- 將路徑轉為小寫並將反斜槓統一

pathConfig.convertPathToLowerCase "C:\\Temp\Test/pATH"
"c:\temp\test\path"


pathConfig.pathsResolveEquivalent
- 比對兩個路徑是否相同

pathConfig.pathsResolveEquivalent "scenes\\test.txt" "./scenes/test.txt"
true


pathConfig.removePathLeaf
- 取得上一層的目錄路徑

pathConfig.removePathLeaf "c:\\temp\\test"
"c:\temp"



pathConfig.stripPathToTopParent 
- 取得最上層的路徑

pathConfig.stripPathToTopParent "C:\\temp\\test\\test.tga"
"C:\"
pathConfig.stripPathToTopParent "\\\\SomeServer\\Projects\\Test"
"\\SomeServer"



pathConfig.removePathTopParent
- 去除最上層的路徑

pathConfig.removePathLeaf "c:\\temp\\test"
"temp\test"


pathConfig.stripPathToLeaf
- 取得最深一層的路徑,與filenameFromPath作用相同

pathConfig.stripPathToLeaf "C:\\temp\\test"
"test"
pathConfig.stripPathToLeaf "C:\\temp\\test\\"
""
pathConfig.stripPathToLeaf "C:\\temp\\test\\somefile.tga"
"somefile.tga"


pathConfig.isAbsolutePath
- 檢驗是否是絕對路徑(但不檢驗該路徑是否存在)

pathConfig.isLegalPath
- 檢驗是否是合法的路徑(但不檢驗該路徑是否存在)

pathConfig.GetDir <#directory_type>
- 傳回系統預設目錄路徑

#font | #Scene | #export | #import | #help | #expression | #preview | #image | #Sound | #plugcfg | #maxstart | #vpost | #drivers | #autoback | #matlib | #scripts | #startupScripts | #defaults | #renderPresets | #ui | #maxroot | #renderoutput | #animations | #archives | #Photometric | #renderassets | #userScripts | #userMacros | #userStartupScripts | #temp | #userIcons | #maxData | #downloads | #proxies


pathConfig.isPathRootedAtBackslash
- 檢驗路徑是否是以斜槓為開頭

要取得Max的一些預設路徑則從此查找
MAXScript Reference - 3ds Max System Directories

2013年3月12日 星期二

如何不影響Scale的數值對Bone做到縮放尺寸的效果

如何不影響Scale的數值對Bone做到縮放尺寸的效果

例,在對原本Scale值為[1,1,1]的Bone,進行Scale 2倍的動作後,Scale值變為[2,2,2],若想在保持現有尺寸的狀態下把Bone的Scale值歸回[1,1,1],可利用Animation>Bone Tools,方法如下:
  1. 開啟Bone Tools視窗。
  2. 選擇要修改的Bone,執行Reset Scale,此時Scale值已被修正為1,但Bone的顯示有問題,用以下步驟進行修正。
  3. 將Bone On關掉再打開,做個Refresh動作。
  4. 執行Reset Stretch。
  5. 執行Realign。

另外可用Max Script進行這個手續:
for o in selection do
(
    resetScale o
    o.setBoneEnable false currenttime
    o.setBoneEnable true currenttime
    o.resetBoneStretch()
    o.realignBoneToChild()
)

2013年3月7日 星期四

Unity3D輸出之圖檔壓縮格式(行動平台)

要對圖檔壓縮進行優化時,須先了解各圖檔之規格,Unity Manual中有提到各平台可支援的各種圖檔格式,請參考在本文結尾的參考文章中的[1]以及Wiki中的資訊。

iOS:
PVRCT
  貼圖尺寸須為二的冪次方之正方貼圖
Android:
RGB Compressed ETC 4 bits (ETC1)
 (Ericsson Texture Compression, supported by all OpenGL ES 2.0 GPUs)
 4bits / pixel,無Alpha,Android 2.2(Froyo)以上支援
RGBA 16bit
 有Alpha,容量是ETC的四倍(請看參考[1])。

若要減少Alpha對資源的佔用,有一些技巧可以解決(請看參考[3][4])。
 方法1,將Alpha Channel抽出,與Color Map連接拼成一張貼圖。
  優點:一張貼圖、Shader改動較小。
  缺點:貼圖只能二方連續(one direction wrap),提高shader效能消耗
 方法2,將Alpha Channel抽出,單獨存成一個檔案,再從shader進行結合。
  優點:貼圖可四方連續,運用上靈活性較高。
  缺點:shader需要額外多出一個sampler。
當硬體不支援輸出之壓縮格式時,Unity會將資源以RGBA的方式做Decompress,如此會提高渲染時間、記憶體消耗和Decompress時間(增加讀取階段的時間)。

下表是檔案容量對照(含MipMaps)

尺寸 ETC 4bits RGBA 16bit RGBA 32bit
2048
2.7 mb
10.7 mb
21.3mb
1024 682.8
2.7 mb
5.3mb
512 170.8 682.7
1.3mb
256 42.8 170.7 341.3
128 10.7 42.8 85.3
64 2.7 10.7 21.3


參考文章:
[1]http://docs.unity3d.com/Documentation/Manual/Textures.html
[2]http://docs.unity3d.com/Documentation/Manual/android-GettingStarted.html
[3]http://forum.unity3d.com/threads/73998-DXT-or-PVRTC
[4]http://malideveloper.arm.com/develop-for-mali/sample-code/etcv1-texture-compression-and-alpha-channels/
http://gamedev.stackexchange.com/questions/44134/unity-android-truecolor-texture-performance-hit-and-alternatives-for-truecolor
http://stackoverflow.com/questions/9148795/android-opengl-texture-compression

http://zh.wikipedia.org/wiki/RGB
http://en.wikipedia.org/wiki/Ericsson_Texture_Compression
http://en.wikipedia.org/wiki/PVRTC