2009-07-20 14 views
3

現在、インディーズゲーム用のインポートベースのパイプラインを、ソースフォーマットとしてMaya ASCII .ma、物理フォーマットとグラフィックス用に独自のフォーマットで出力として作成しています。私は、ヒンジジョイントのように、Mayaの範囲内のアトリビュートのようなものを保持します。多くの調整が必要なその他のタイプのパラメータは、別々のソースファイル(質量、バネ定数、物理エンジンの強度などのための.ini)になります。ゲームにMaya ASCIIをインポートする

入力は1つの.maと1つの.iniで、出力は物理ファイルと複数の.meshファイル(ジオメトリ/マテリアルごとに1つの.meshファイル)です。

また、データを再フォーマットするためにPython 3.1を使用する予定で、基本的なMaya ASCIIを読み取るLGPL 2.1コードがすでに見つかりました。おそらく、Pythonを使って開発中にプラットフォームを起動することもあります。ゲームはC++で開発されています。

この中に何かアドバイスがありますか?

  • インポートベースのパイプライン(エクスポートベースではない)?
  • Maya(3DSではない)?
  • Maya ASCII .ma(.mbではない)?
  • .ini(not .xml)?
  • Mayaのモーションアトリビュートと.iniの "freak-tweak"アトリビュート(Mayaではすべてではない)の分離?
  • データをビルドするためのPython 3.1(埋め込みC++ではない)?

編集:フィジックス/グラフィックスのインポート/エクスポートツールチェーンを実装する方法についてのより良い提案がある場合は、入力していただきたいと思います。両方の人間が読めると人間の書き込み可能だ一般的なシリアル化形式として

答えて

4

本当にこれを行うには、いくつか注意する必要があります。主なものは、おそらくあなたが最初に期待するよりも面倒です。他のいくつかは次のとおりです。

  • Maya .ma(少なくとも現在のv.2010まで)は、melによって構築されています。 MelはTuring-completeですが、ノードの観点から階層的シーンが記述される方法は、「コード」よりもはるかに単純です。
  • エラー処理を早期に追加すると、後でごめんなさい。
  • 多くの異なるノードを処理する必要があります。ここでは、変換は最も不快なものです。他のタイプには、メッシュ、マテリアル(多くの異なるタイプ)、「シェーダエンジン」とファイル(テクスチャなど)が含まれます。
  • 。唯一の形や微調整を記述します。生の頂点を定義することはめったにありません。私は.ma内に小さな「エクスポート」スクリプトを保存して、Mayaとまったく同じ方法ですべてのプリミティブを生成する必要がないようにしました。後見では、これは正しい方法でした。そうしないと、あなたは、「球を作成」
    1. のようなものを行うことができなければならない
    2. は「ここからそこまでの半径で、この-と-それをソフト選択を移動」、および
    3. 「252のXYZ単位頂点移動します"(すべての頂点が暗黙的に定義されている)。
  • Mayaは、メッシュのポリゴンを定義します。あなたは rtを三角形に変換したいかもしれません。
  • 特定のタイプのノードに存在するすべてのパラメータは、明示的または暗黙的に定義されています。デフォルト値(暗黙的に定義されている場合)を知っていなければなりません。
  • 基本的に、オブジェクトは変換、メッシュ、プリミティブによって定義されます。変換はメッシュの親です。変換にはスケーリング、回転、平行移動、ピボット変換、さらにはいくつかが含まれます。メッシュはプリミティブにリンクし、その逆もあります。プリミティブは型(「polyCube」)と寸法(「幅、高さ、深さ」)を持ちます。
  • ノードには「複数継承」があります。例えば、複数回インスタンス化されたメッシュには、単一のメッシュ(およびプリミティブ)が1つありますが、複数の親(変換)があります。
  • ノードの変換は、(詳細はMaya xform docを参照)ので、同じように計算される:

vrt = getattr("rpt") 
rt = mat4.translation(vrt) 
... 
m = t * rt * rpi * r * ar * rp * st * spi * sh * s * sp 
  • 私は物理学のまわりで私のエンジンを構築するので、ゲームエンジンは、物理的な形状の上に置かれたメッシュを望んでいるが、私をモデル化するとき他の方法でそれをしたい。将来のアプリケーション(物理的なメッシュなしのメッシュ)のために一般的なままにしておきます。この小さな決定は、私に変形の深刻な悲しみをもたらしました。線形代数はブラッシュアップを得た。スケーリング、回転、平行移動、せん断の問題。名前を付けて、私はそれを持っていた。
  • cgkitのMayaパーサーにインポートツールをビルドしました。 Matthias Baasありがとう!
  • あなたも同様のことをするつもりなら、自分で作成する前にmy converterを読んでみることを強くお勧めします。この「小さな」プロジェクトでは、基本的な作業状態になるまでに3つの苦労した月がありました。
1

は、優れたPythonのサポート(と、まあ、任意の言語サポート、本当に)を持っている、あなたは、iniファイルまたはXMLを介しYAMLやJSONを使用して検討する必要があります。

手作業でファイルを生成しない場合、XMLはあなたのケースでは許容されます。

JSONとYAMLの利点の1つは、入力です。両方の形式は、Pythonのリスト、辞書、浮動小数点数、および整数に解析されます。

また、あなたが使用するすべてのライブラリが3.1で動作することが確実である場合を除き、ライブラリの可用性の問題により、2.xを固執することを検討することをお勧めします。

+0

.iniファイルはconfigparserモジュールでよくサポートされており、パラメータはPython型に直接解析されます。 インポートされたPythonモジュールの使用可能な最小限の量しか使用しません.2to3.pyを使用するだけで何の問題も発生しませんでした。したがって、私の概念証明では、これらのリスクも排除されます。 –

1

.maパーサーを再実装する代わりに、エクスポートベースのパイプラインまたはOBJやCOLLADAなどの標準化されたファイルフォーマットを使用し、その解釈に必要なすべてのMaya内部を複製することを検討する必要があります。

.ma/.mb形式は、Maya以外のプログラムでは読み取ることを意図していないため、Autodeskはこれを簡単なプロセスにするために何の努力もしていません。 100%正しく解析するには、MELスクリプト言語全体を実装する必要があります。

私が見たすべてのMayaベースのパイプラインは、コンテンツを標準化されたファイル形式にエクスポートしたり、MELスクリプトを実行してMELノードインターフェイスを使用してコンテンツをダンプしたりします。

Mayaは、シーンをロードし、MELスクリプトを実行し、GUIをロードせずに存在する「ヘッドレス」モードで実行できます。したがって、自動構築システム内で使用することに問題はありません。

+0

それは狂った仕事でしたが、今は完全です(十分な)私はそれの利益を得るために準備ができています。 –

関連する問題