Monday, November 9, 2009

How to export .x file(with bone animation) from Maya

因為之前在做事的時後,需要從Maya輸出.x file到DirectX中做測試,所以摸索了一下從Maya輸出.x file的方法。

以前從來沒有過這樣的需求,自然也就沒有相關的知識,於是到網上查查,結果發現,大部分的文章都是有問無解(囧),有解的文章中不是Max的、就是不帶動畫資訊的(囧PartII),在挖了更多的資訊後,最後也只找到"一個"簡單圓柱帶骨架的轉換文,還寫的很"簡單"(囧PartIII)。所以,從Maya輸出.x file的過程可真是折騰我好一陣子啊!

經過近百次的測試(真的快滿百次了),在這裡我把我個人的經驗與方法提供出來,若有更好的方法與訣竅,也歡迎大家相互交流。




目的:從Maya輸出帶骨骼動畫的角色成為.x file並可在DirectX Viewer看到動畫。

需要軟體:
Maya7+(本次以Maya8.5為範例)
Python 2.4
ctypes for Python 2.4
cvXporter 1.3
Microsoft DirectX SDK (August 2009)

首先,要在Maya中輸出.x file,必須靠Plugin來幫忙。網路上有一些輸出.x file的Plugin可免費使用,不過for Maya的還是很少。經過一番收尋,Chad的網站中所提供的"cvXporter"是個不錯的選擇,本次的內容也將以此Plugin來做介紹。各位可以到http://www.chadvernon.com/downloads/cvxporter/去下載cvXporter來安裝。

由於cvXporter是用Python2.5所撰寫的檔案,因此如果你是安裝1.1以上的版本時,須先安裝Python到你的電腦上。同時,你的Maya還要是可支援Python語言的版本(如8.5以後)。若是較早的版本(如7.0),建議可選擇 cvXporter 1.02以前的版本做安裝。cvXporter最低要求是至少要Maya7.0以上的版本才可以用。

首先下載Python2.4,不建議下載更高版本,因為接下來的ctypes只會自動抓Python2.4的路徑。下載並安裝完Python2.4之後,再下載ctypes並安裝,完成後到:你的磁碟\Python24\Lib\site-packages裡把ctypes資料夾、 _ctypes.pyd和_ctypes_test.pyd三個檔案全部copy到:你的磁碟\Program Files\Autodesk\Maya8.5\Python\lib\site-packages裡。再來下載cvXporter後,解壓出cvxporter.py檔並copy到:My Documents\maya\8.5\scripts\底下。到此安裝部分算是到一段落了。

啟動Maya8.5,開啟Script Editor,切換到Python的tab並輸入:

import cvxporter
cvxporter.UI()

即可叫出cvxporter的輸出視窗出來。到這裡是安裝和輸出的過程,接下來要談談Maya輸出.x file時的注意事項。


一般來講,要輸出模型和貼圖成.x file應該都不成問題,可是若要輸出帶骨骼動畫(Skeleton Animation)的角色可能就不是那麼簡單。

我歸納出幾點,在輸出.x file時需要特別注意的地方:

1.請使用Smooth Bind。
Maya有Smooth Bind和Rigid Bind兩種Bind Skin的方法,但若要輸出.x file時則只支援Smooth Bind這一種。

2.Smooth Bind Option中請將Max influences降到4以下(內定為5),這是Microsoft的.x file其自身的限制。

3.不論你是怎麼rigging/setup你的角色,做完動畫之後請對所有的joints做Bake Simulation的動作。做完Bake的動作後,就把所有模型、骨架以外的物件都清乾淨(Delete),只保留最乾淨的檔案。

4.將這個清乾淨的檔案Eport All成FBX檔,並在跳出的選項視窗中勾選"Bake complex animation",其時間隔選擇你要的範圍,輸出。

5.重開一個新檔(New Sence),import剛才輸出的FBX檔進來,開啟cvxporter輸出視窗,勾選Animation,命名、設定開始結束時間點,Export All。

至此,可以用DirectX Vierwer來看你從Maya輸出的.x file了。^ ^

3 comments:

  1. I love u
    I now can finish my project
    dun think no one read your tutorial
    dun give up!

    ReplyDelete
  2. Thanks! I'm really glad to help you.^ ^

    ReplyDelete
  3. i am a cat and i like to punch innocent orphans then light them on fire muahahahahahahahah..... u suck

    ReplyDelete