www.flickr.com

星期一, 6月 26, 2006

以FBX實現MAYA與MAX互轉

以FBX實現MAYA與MAX互轉

本文主要整理自之前發表在討論區的留言,主要還是基於個人的使用經驗,疏漏謬誤之處所在難免,還請眾家先進不吝指教。

MAX與MAYA是現在佔有率最高的兩套3D動畫軟體,各擅勝場,關於兩套軟體的比較不在本文範圍以內。因為使用者眾,相信大家都會常碰到需要在這 兩套軟體之間轉換的狀況,例如在MAYA建模用MAX算圖;或是因為工作的關係,得要接觸使用不同軟體的工作夥伴,甚至要交換資源…….等狀況,尤其專案 的規模越大,這樣的狀況更難避免。

最常見的應該是模型的轉換,通常是使用OBJ或是3DS這兩種老牌的格式作為中介,不過也因為這兩種格式也有一定歷史了,造成轉換上並不是很完整,會損失不少的資訊,例如貼圖、平滑…...等等,那就更別說是動作了!

前一陣子因為工作的關係,需要整合MAX與MAYA的工作團隊,而在更早之前朕宏上面也有朋友發表過使用Filmbox的fbx作為轉換的格式,可以成功轉換(大部分)模型、骨架、動作、貼圖....等資訊,真是驚為天人。

經過一整個專案的整合經驗,也累積了一點心得,在此跟大家分享一下,不過還是要強調一下,這純粹是基於個人使用的經驗(經驗法則),再者因為個人對MAX比較熟悉一點,所以對MAYA方面的掌握度可能比較不足,難免疏漏或錯誤,還請不吝指教。

FBX介紹

fbx是filmbox這套軟體所使用的格式,現在改稱Motionbuilder。Motionbuilder是一套專攻動作製作的軟體(尤其是配合mocap系統),詳細的資料可以查網路上的資訊,這裡就點到為止了。

http://www.kaydara.com

Motionbuilder扮演的是動作製作的平台,所以在前端的modeling和後端的rendering也都有賴於其他軟體的配合,所以Motionbuilder在檔案的轉換上自然下了一番功夫。

MAX5已經內建fbx的import/export,如果是MAYA或XSI等請至官方網站下載免費的plugin包一套搞定,目前應該是到5.0版。


還有一個有趣的訊息

FBX有提供Quicktime6的Plugin,意思就是說只要有安裝這個插件,就可以直接在Quicktime Player裡面顯示FBX的模型~~~酷喲

Viewport的操作方式和Motionbuilder相同,滑鼠只有左鍵有功用(配合Mac族?)

shift+LMB=Pan
ctrl+LMB=dolly
shift+ctrl+LMB=Rotate


輸出與輸入---基本概念

前面提到MAX5已經內建fbx的importer/exporter,如果是MAYA5則需要另行安裝(怎麼安裝不需要教吧?)

MAYA要輸出入fbx沒有什麼選項,只要按ok就好,MAX的fbx import/export就提供了不少選項可以作細部的調整,比較重要的是在輸入的時候可以選擇Y-UP或Z-UP的座標,如果是從MAYA出來的東西, 記得要選擇Y-UP。

因為預設的單位不同,所以從MAX轉到MAYA,模型通常都會很大,MAYA轉到MAX都會太小(這個大小問題其實也常發生在輸入obj檔時),不過 只要在兩邊都把單位設好,我的習慣是都設成公分,在modeling的時候也參考現實的尺寸,這個問題基本上就ok了。

接下來就是調整max與maya的網格大小,在maya裡加大camera的far clip(如果在prsp裡看不太到東西的話)

由MAX轉到MAYA或是MAYA轉到MAX,FBX會將所有的物件Link到一個FBX Root上(主要是解決Y-UP與Z-UP的問題),所以請勿亂刪這個dummy(node),因為這是所有物件參考的原點。

在群組階層關係部份,個人覺得FBX和MAYA的GROUP對應相當良好,轉到MAX會成為一個dummy,而MAX的GROUP轉到MAYA會對應到MAYA的GROUP

這裡也可以發現MAYA和MAX的GROUP的觀念有一定差距,MAYA的GROUP概念比較單純,接近MAX的link to dummy的作用。

至於Link的部份,大致上是沒有什麼問題的,這一點留待模型與動作的部份,再做補充說明。

模型篇

模型的轉換,相信是最常見的需求。點對點線對線的狀況最為單純,FBX在這個部份的表現相當理想,多邊型模型基本上是分毫不差。

有趣的是,在Max裡相同拓樸的模型,如果是mesh轉出去,都會變成三角面,用poly輸出的話就是漂亮的四角面(MAYA沒有這個問題,因為MAYA只有polygon),而MAX輸入fbx的模型,都會成為mesh的形式。

更利害的是fbx居然能夠保留nurbs ─ 例如用MAYA轉出一個用nurbs建的模型,相同的fbx檔,如果用MAX輸入的話會自動轉成mesh,用maya輸入的話還是nurbs~更神奇的是 再從xsi 輸出一個nurbs模型到maya,仍然保留unrbs的格式(好吧!MAX的NURBS真的是超級廢柴)

這裡有一個小技巧,在MAYA如果輸出NURBS到FBX,進入MAX就會轉成Mesh,在MAYA的時候可以先按1鍵,將顯示的平滑度降低,這樣出來的模型資料量會小很多 ,到MAX再執行Meshsmooth即可。

接下來這一點很重要,避免使用不等比縮放,如果有用到,MAX在Hierarchy->Reset欄位下有兩組按鈕,點選Transform 和Scale,真正將位移縮放的變形量歸零;之後再到Utilities面版下,點選Reset Xform或再convert一次將比例歸零。MAYA則使用freeze transformation。 這樣轉換的模型才不會出現亂飛的狀況。

材質與燈光

材質方面,能夠保留MAX或MAYA多邊形的貼圖軸資訊(NURBS的UV不行),材質球的屬性,有部分可以保留,能轉的就算賺到了,shader 都會轉成phong shader,diffuse(MAX)對應到color(MAYA)、Opacity(MAX)對應到transparency (MAYA).......其他的依此類推,顏色轉換是無誤,但比較可惜的是部分數值的對應並不是很理想,這一點還請各位朋友自行比較, 我是不太信任這一點,畢竟同樣的數值在不同的軟體下不見得會產生相同的效果。

在轉檔後,常會覺得有OVER的感覺,怎麼打光都不對,其實在轉檔後,FBX會自動把MAX的Enviroment>Global Lighting>Ambient設為50%的灰,調低即可,至於東西轉到MAYA則是會把每一個材質的Ambient設為0.588,全選起來用 Attrib sprend sheet一次調低即可。

貼圖的部分,不用說只能轉bitmap(files)的貼圖,此外只會保留diffuse這個channel,其他的部分要再自行指定,希望新版可以提供支援(基本上支援bump和Opacity就很感動了)

FBX在轉換後,會把每一個單獨的模型產生一個新的材質,所以會發現在材質編輯器裡面有爆多的材質球(尤其是MAYA看起來會很可怕),所以在轉換前,能夠先Attach或combine就先結合在一起,省得整理麻煩。

若是從MAYA轉出的模型,如果沒有上貼圖設定UV,以MAX開啟的話都會被賦予一個材質,在Diffuse的地方還是會加上一個bitmap的貼 圖(但是是空的-maya ghost),這時候用MAX算圖時就會出現沒有UVWMap的警告訊息,必須要手動加上UVWmap,或是在MAYA裡就先拆UV。

另外,有的時候還是會產生法向量方向的問題,開2side或下normal指令修正啦。

標準的三種光源,Spotlight轉成spotlight、onmi轉成point light,Directlight轉Directlight,位置、方向都不會有問題,燈光強度:Multiplier對應到Intensity、顏 色、Spotlight的Cone angle都會保留,不過前面也提過了,相同的數值不代表相同的效果 。

一些比較特別的燈光種類,如MAYA的Ambientlight、體積光、MAX的Skylight…就會被轉成helper之類的虛擬物件。

陰影部份的屬性不會保留,所以FBX的燈光轉換還滿雞肋的,主要是作對位功用吧!

"聽說"有一個叫OHM的格式,可以順利轉換燈光的屬性: www.mindthink.de ,不過大半年過去了,似乎還是只聞樓梯響的階段。

攝影機篇

我把CAMERA的部分獨立出來說明,CAMERA順利轉換與否,在協同工作的狀況下是相當重要的ㄧ件事,以我個人的例子來說,這次因為沒有辦法招 募到那麼多使用MAYA或MAX的工作夥伴,五五波(笑),必須要各取其長處。最後決定角色動畫在MAYA進行,場景部分在MAX進行RENDER速度比 較理想,最後再進行合成。

這時候CAMERA的轉換就扮演著重要的角色了,第一點是要確保畫面在兩套軟體間維持無誤,第二點是要確保攝影機的動作順利轉換(最好是不要動camera啦,自爆)。

在經過了多次嘗試後,主要的重點是要在MAX與MAYA裡面保持相對應的設定,因為FBX在這裡並不是很聰明,屬於Rendering setting或Render Global的設定並不會被轉換,需要手動設定。算圖的尺寸不用說要保持一致,包括解析度、像素比、Aperture width……..等,通常使用內定工業規格的設定,例如NTSC、HDTV…..是最保險的。

在MAX的rendering裡面Aperture width和camera setting中的lens數值是相對應的,MAX調整前者,後者也會相對變化,保持畫面不變;而在MAYA裡Aperture是屬於Camera的屬 性,調整Film back裡面的設定,MAYA會保持Focal length不變而畫面改變。不過兩套軟體計算方式似乎不太相同MAX是用mm,MAYA是用ratio,我並沒有花時間去找出換算的方式,原則上保持一 套軟體的設定固定,不要兩邊都做調整,以免產生誤差。

MAX的FOV對應到MAYA的Angle of view,Lens對應到Focal legth,上面提到過兩套軟體在Aperture部分的計算方式不相同,所以在這裡的對應數值也會有出入,例如在MAX設定lens是28mm,轉到 MAYA會變成28.884(出現小數點),這倒是不用太擔心,兩邊算出來的畫面是相同的,FBX會做出轉換(先決條件是上面的條件要控制住)。

還有ㄧ個容易忽略的重點,就是在filmfit的部分也要保持一致,建議是使用水平Horizontal。

解決了畫面的對應,接下來就是攝影機的動作。camera的Dolly、Track、Arc…..都可以處理,如同一般的物件,攝影機的移動、旋轉 (縮放沒有實際意義)也可以轉換過去,不過出狀況的比例不低,建議是使用FreeCamera互轉,比較穩當(spotlight也是一樣,修正一個物件 總比再加上一個target來的容易)。

最常發生的狀況就是攝影機反轉,如果攝影機亂跑,也可以試著使用Freeze transformation來修正 ,釜底抽薪的方式就是多下幾個key點來強制校正這個問題,再不行,輸出前先把camera的動態逐格取樣,轉成keyframe應該就ok了(不過就沒 辦法修改了)。

至於zoom的動作,也可以轉換,不過我沒有仔細測試過這個部份,因為在動作的時候擔心出狀況,所以就避免使用了。


有時候出現警告訊息,不見得代表一定出問題。

骨架與動作

關於骨架的轉換,不管是CS的biped,或是bones...轉出後都會變成單純的一根一根的bones,IK會不見,只會保留單純FK的形式, 動作都會轉變成每一格每一個關節的旋轉量(再編輯無力),我想這是可以理解的,不過我們仍然可以將這段動作透過MAYA的trex editor或是再轉成BVH進CS作編輯(這裡需要第三方的插件配合)

特別注意一點,CS的骨架輸出後會在跨下產生一根多出來的(姑且稱為老X吧),直通地平面,那是因為Biped的Root其實是投影在地平面上的一個點,就留著不會有什麼影響。

雖然骨架可以順利轉換,但前面也提過了,IK handle之類的連結關係並不會被轉過去,這樣子就麻煩了,因為大部分的時候我們是把keyframe下在各個控制的handle或locater或 dummy .....ect上,轉過去當然只有dummy的動作......只有CS沒有這樣的問題

這時候就要先把keyframe bake到骨架上去,就可以解決這一個問題了

關於動作的轉換,大部分狀況都是ok的,位移、旋轉、縮放都可以轉,不過vertex animation就無能為力了。
至於keyframe的轉換,在輸出的時候會有一個取樣值,看是每秒幾格(預設是30格),不過也不一定就會轉出滿滿30個keyframe,程式會試著作判斷~~~~轉不過去才會強制取樣。

這時候如果都是依賴curve來調整動作的話,就有機會產生取樣錯誤,所以我的方法都是多下幾個key點來避免這樣的狀況(in max or maya)

蒙皮的部分,MAX可以轉換官方的Skin與Physique,能保留每一個點的weight(殘念,Bones pro沒辦法呀......),在FBX5.0裡面,甚至可以指定模型輸入時要轉成Skin或Physique。不過在這一點我試的經驗是成功率有待研 究,多多少少還是會出現拉扯、錯點....等現象,重新執行Normalize Weights有的時候可以修正一些問題。

所以目前我的做法還是輸出定位好的模型與骨架到個別軟體去作skin(bind)的動作。

此外,Morpher(Blend shape)也在轉換支援之中,不過我並沒有仔細的測試過,主要是做MAX的morph modifier和MAYA的Blend shape之間的轉換,測試過MAX的輸入輸出基本上都是ok的,甚至連keyframe都可以保留,不過似乎不支援MAX的progressive morph(無法對應吧),這點有機會在好好研究啦。

結語

拉拉雜雜的把這段時間整合的經驗分享下來,雖然FBX對於不同軟體之間的轉換已經提供了相對完整的解決方案,但是實際執行起來,仍不免要解決諸多問題。換個角度想,要是那麼容易就搞定了互轉,AW和Discreet也不要玩了,誰不想寡占市場呢?

其實個人也有這樣的感覺,能夠用一套軟體搞定,何苦要花費更多的成本在轉換的整合上呢?這個時候就是衡量了,要如何在效率、效果、人力資源、專案管理……上面取得一個平衡,相信是超出於技術考量的問題了。

ANYWAY,提供給有需要的朋友參考一下吧。

小聖 20040329

3 則留言:

執行長:DuckHugh 提到...

Xform跟freeze transform還是不懂...
有相關文件可以參考嗎?

NaNa 提到...

不好意思,請問一下,看到你的文章內說:「
MAX的fbx import/export就提供了不少選項可以作細部的調整,比較重要的是在輸入的時候可以選擇Y-UP或Z-UP的座標」,可是目前匯出時,是有這選項,可是匯入的時後,卻無法選擇Y-UP。(目前狀況是MAYA的FBX模要匯入MAX裡使用,可是軸向卻不正的狀況),不好意思,可以請教你,匯入改怎麼設定呢?^ ^ 麻煩你了

許小聖 提到...

這篇有點久,現在選項都不太一樣了。

本頁面及相關頁面所提及之公司名稱與商標,,其著作權皆屬原公司所有

本網站公開發表之文章若未經聲明,皆屬作者本人所有

如需引用節錄,歡迎來函告知