2012年6月7日 星期四

Maya透過FBX到Unity的工作流程

FBX本來是一套叫filmbox的軟體所使用的特殊格式,擁有很好的跨平台特性,後來被自動桌子買下之後,filmbox改稱Motionbuilder,專門用來製作動作資訊,尤其在配合mocap系統方面特別出色。

由於現今大多數主流的3D軟體幾乎都被納入自動桌子底下,因此 FBX 的跨平台整合性能就跟著水漲船高,功能也愈來愈完善,搭配上跨平台也很強的遊戲引擎Unity,讓3D工作者得以藉著這種格式交換進行不同領域間製作流程上的無縫整合。這篇文章就是要分享我在製作Kinect遊戲-刺槍術時將Maya的animation透過FBX導入Unity的工作心得。

Step 1
open  FBX  plug-in
window > setting / Preferences > plug-in manager
找到 fbxmaya.mll > 打勾

Step 2
select root object
這個步驟是為了讓骨架在每一格都設一個keyframe,以紀錄下每一個frame它所在的transform數據。所以要先select骨架最上層的joint,角色的話通常會在bind上模型的那一組骨架的root,要小心,選控制器bake是沒用的,因為遊戲引擎一般只會認骨頭和blendshape,所以變形器也不會有效果

然後還要確認選到你所有要bake的物件,像是有些簡單的物件沒有骨頭,但是有設一兩個簡單的控制器,這時候你就要對控制器做bake keys,或是沒有連接到root的骨頭,都要記得選到。其實,Bake keys的道理就是為了讓你的物件在遊戲引擎裡擁有transform變化的資訊,所以要選到所有紀錄變化資訊的物件

Step 3
Bake keys
選好你要匯出的物件,通常選最上層的group就可以了,因為你可以在匯出時篩選掉你不想匯出的資訊,或是要做到更徹底資料量縮小的話,就是選好你要bake的物件,然後殺掉其他所有無關物件

edit > keys > bake simulations 口

Hierarchy > below
自動bake所選物件層級以下的所有物件

Channels > All keyable
所有能set key的channel都會自動set key,最保險,可是資料量最大
         > From Channel Box
一般若是只要bake動態的話,選這個選項就OK了。不過要記得要先選好channel box的translate和rotate。(備註:我不會選scale,因為unity對maya joint的scale變化會產生模型爆炸的狀況,屢試不爽,我也無法解決)

Time range > Time Slider 根據下方Time Slider間距
           > Start/End   自訂起始點與終點
這裡建議要匯出時直接設好Time Slider上的in點和out點

Smart Bake > 打勾
這個功能它會自動掠過你數值沒有變化的段落不做set key的動作,可以節省你的資料量,對於在某些對檔案大小限制嚴苛的平台,像是智慧型手機或是行動裝置,這個功能非常有用,不過假如進到unity之後發現有問題,建議可以回來取消打勾再試試看

然後你會看到Time Slider跑了一遍,結束之後,檢查一下是不是每個物件都有設到key

Step 4
Export FBX
在unity中關於動畫的部分,會分做兩種匯出模式:
1.不帶animation的base物件,包含像是模型、貼圖、綁定的資訊
2.只帶animation的動作資訊

因為在unity中可以讓當作base的 FBX 物件去讀取不同的動作 FBX 檔,達到在遊戲過程中呼叫不同動作的效果,例如平常走路時就讀取走路的循環動畫,摔倒時呼叫摔倒動畫,勝利時則有勝利動畫,失敗當然也就有失敗的動畫啦

File > Export selection 口 > 選擇 FBX export
大部分需要調整的項目都在File Type Specific底下

先看Presets > Audesk Media & Entertainment
這個選項很有用,當你被底下選項搞得暈頭轉向時,這裡可以恢復成系統預設

geometry
要匯出base時記得要將這兩個選項打勾(smooth mesh、Referenced Containers Content),只匯出動作時則否

假如在匯出後發現大小比例與Maya中有差,請回去Maya檢查你的model和控制器上的scale數值,是不是為1,假如不是請執行freeze transformation

animation
這個部分是最重要的區別關鍵
Animation > 不管要不要匯出動作都要打勾

Bake Animation > 要匯出動作請打勾,不匯出則否
記得設定底下Start/End匯出動作的時間範圍,直接設好Time Slider上的in點和out點的話,它會自動去抓數值

Deformed Models > 只匯出動作請不要打勾,要匯出骨頭與綁定資訊,請務必打勾,Skins與Blend Shapes需要的話,也請都打勾

Cameras > 勾掉
Lights > 勾掉
Embed Media > 打勾匯出貼圖 ,這是決定 FBX 檔案是否帶貼圖的選項

值得注意的是, FBX 在轉換後,會把每一個單獨的模型產生一個新的材質球,所以會發現在材質編輯器裡面會出現爆炸多的材質球,所以在轉換前,能夠先combine的模型(例如:共用同一張圖或是同一材質球)就先combine在一起,可以大大減少資料量

最後,還要注意一下advanced options底下的FBX File Format
以我個人的經驗,假如你匯出時會遇到當機的狀況,可以來修改這個地方的選項
-Type要看你是存ma檔還是mb檔而定
-Version穩定度2010好過2011,2012也不錯,至今還沒當機過

選擇路徑,檔案名稱,Export selection,大功告成!
出現警告訊息,沒出問題的話,請不要理它

假如沒有成功,或是匯出時間過長,有可能就是當掉了,可以回去檢查一下匯出的選項,或是清掉Maya裡非必要的物件,最後你可以迅速地用Quick time的FBX viewer檢查,看是不是匯出成功哩!

非常歡迎任何建議,有錯煩請指正謝謝

參考資料:
我自己
前輩許小聖-以FBX實現MAYA與MAX互轉



6 則留言:

匿名 提到...

Shih-Yao Chang 大大您好:
小弟是個大學部資工的學生,目前在著手用UNITY做遊戲專題.看到了您的刺槍術作品,想請問說您的FBX模型都是自己使用MAYA製做的?還是有美術團隊製作?目前小弟正在懊惱人物、物品等模型的製作...對於模型製作部分較不擅長,程式設計能力OK,在這想請教您的經驗.

匿名 提到...

請問我使用ramp shader的材質球結果導出fbx之後ramp shader會變回Lambert 請問有甚麼方法可以正常輸出?

匿名 提到...

在bake simulations的時候出現// Warning: No channels selected in Channel Box,那什麼辦?還有我放進了後Unity他不會動.

匿名 提到...

Thank You 你寫得好好...好詳盡

Shih-Yao Chang 提到...

啊啊啊啊~

大家好,因為上一個工作很忙碌的關係,部落格荒廢了一年有餘,對不起... Orz

1樓
刺槍術的前製美術確實大部分是我弄的(除了建模和貼圖部份由另一個同事負責),隔這麼久才回,真對不起... 模型不擅長的話,建議可以外包,或是找人交換專長製作~

2樓
回達我知道的部份,ramp shader是Maya特有的shader所以要跨平台本來就很困難,與其想破頭去想說要如何匯出,不如直接找替代方案。

像是,在Unity之中找出可以達到同樣效果的shader或是在Maya裡將shader效果bake(烘焙)成貼圖再匯出。最後,我有試著將ramp shader導出,不過連匯入和Maya同家的Max都會失敗,Unity應該就更難過去了... 假如您最後有解決問題,歡迎分享~ 感謝 ^^

3樓
要bake simulations時要檢查是不是跟Step 3相同,假如沒辦法,也可以將Channels > All keyable。骨頭沒有set key作記錄,丟到Unity中自然就不會有動作。

4樓
感謝您的鼓勵~

匿名 提到...

http://www.cg.com.tw/Unity/htm/Unity_009.asp


這邊寫得更詳細