2009-07-20 160 views
3

我目前正在爲使用Maya ASCII .ma作爲源格式和我自己的物理和圖形格式作爲輸出的獨立遊戲創建基於導入的管道。我會在Maya中保留諸如運動範圍屬性之類的東西,例如鉸鏈關節。需要大量調整的其他類型的參數以單獨的源文件結束(可能包括.ini,用於諸如mass,spring常量,物理引擎強度等)。將Maya ASCII導入遊戲

輸入因此是一個.ma和一個.ini,輸出是一個.physics和幾個.mesh文件(每個幾何/材料一個.mesh文件)。

我也可能會使用Python 3.1重新格式化數據,並且我已經發現了一些讀取基本Maya ASCII的LGPL 2.1代碼。我可能也會使用Python在開發過程中啓動平臺。遊戲是用C++開發的。

你有什麼建議反對嗎?一個可能有缺陷的東西的快速總結:

  • 基於導入的管道(不是基於輸出)?
  • Maya(不是3DS)?
  • Maya ASCII .ma(not .mb)?
  • .ini(不是.xml)?
  • Maya中運動屬性的分離和.ini中的「怪異調整」屬性(並非全部在Maya中)?
  • 用於構建數據的Python 3.1(不是嵌入的C++)?

編輯:如果你有如何實現物理/圖形導入/導出工具鏈更好的建議,我會很感激輸入。

回答

4

如果你真的想這樣做,你應該知道一些事情。主要的一點是,它可能比你預期的更麻煩。其他一些是:

  • Maya .ma(至少直到2010年5月)由mel建立。梅爾是圖靈完備的,但層次場景用節點來描述的方式比「代碼」更直接。
  • 提前添加錯誤處理,否則稍後您會後悔。
  • 你必須處理很多不同的節點,其中變換是迄今爲止最令人厭惡的節點。其他類型包括網格,材質(許多不同類型),「着色器引擎」和文件(如紋理)。
  • 。馬只描述形狀和調整;但很少定義原始頂點。我選擇在.ma內部保留一個小的「導出」腳本,以避免必須以與Maya完全相同的方式生成所有基元。事後看來,這是正確的路要走。否則,你必須要能夠做的東西一樣
    1. 「創建領域」,
    2. 「移動軟選擇半徑這和 - 從這裏到那裏」,並
    3. 「移動頂點252個XYZ單位「(隱式定義所有頂點)。
  • 瑪雅定義網格的多邊形;你可能想要把三角形轉換成rt。
  • 存在於特定類型節點上的所有參數都可以顯式或隱式定義。你必須知道它們的默認值(隱式定義的時),
  • 基本上,目的是通過一種變換,網狀和原始定義。變換是網格的父變換。該轉換包含縮放,旋轉,平移,數據透視轉換,還有一些。網格鏈接到基元,反之亦然。該圖元有一個類型(「polyCube」)和尺寸(「寬度,高度,深度」)。
  • 節點可能有「多重繼承」。例如,多次實例化的網格具有單個網格(和單個基元),但具有多個父節點(轉換)。
  • 節點可將計算,像這樣(見Maya xform doc更多信息):

vrt = getattr("rpt") 
rt = mat4.translation(vrt) 
... 
m = t * rt * rpi * r * ar * rp * st * spi * sh * s * sp 
  • 我建立我周圍的物理引擎,讓遊戲引擎要放在物理形狀的網格,但造型我當想要另一種方式。這將保持它對未來應用程序的通用性(「無物理網格」)。這個微小的決定讓我對轉型感到非常悲傷。線性代數得到了一個刷新。縮放,旋轉,平移和剪切中的問題;你的名字,我已經擁有了。
  • 我建立在cgkit的瑪雅解析器我的導入工具。感謝Matthias Baas!
  • 如果你打算做類似的事情我強烈建議編寫自己之前,你在偷看my converter。這個「小型」項目花了我三個痛苦的月份來達到基本的工作條件。
1

作爲一般的序列化格式,這是人類可讀和人寫的,具有優良的Python的支持(和,嗯,任何語言支持真正的),你可能要考慮使用YAML或JSON在INI文件或XML。

如果您從不手動生成文件,那麼您的情況可能是XML。

JSON和YAML的優點之一是鍵入:兩種格式都解析爲Python列表,字典,浮點數,整數...基本上:理智的python類型。另外,除非您確定每個使用的庫都適用於3.1,否則由於庫可用性問題,您可能會考慮堅持使用2.x。

+0

.ini文件與參數configparser模塊用來在很好的支持直接解析成Python類型。 我只會使用盡可能少量的導入Python模塊,而我從來沒有任何問題只是簡單地使用2to3.py,所以我在歸納我的概念證明,我會說這些風險也被消除了。 – 2009-07-22 13:34:39

1

您應該考慮使用基於導出的管道或標準化文件格式(如OBJ或COLLADA),而不是重新實施.ma解析器並複製解釋該解析器所需的所有Maya內部件。

的的.ma/.mb格式不打算比瑪雅本身以外的任何程序讀取,因此Autodesk不把任何努力來使之成爲一個簡單的過程。爲了正確解析它,你需要實現整個MEL腳本語言。

所有基於瑪雅管線我見過或者出口第一內容轉換成一個標準化的文件格式,或者在Maya中運行MEL腳本中使用MEL節點接口傾倒內容。

注意不是瑪雅人可以在加載場景,執行MEL腳本,並且存在,而不加載GUI中的「無頭」模式下運行。因此在自動構建系統中使用它沒有任何問題。

+0

這是一個瘋狂的事業,但現在它已經完成(足夠),我準備好從中獲益。 – 2009-12-25 16:39:14