sunday-labの日本語訳版です。英語版のXOOPS Cube関連記事を翻訳作業中...

2008年2月17日日曜日

How to export collision model in a free time project?

フリータイムプロジェクトにおいて、あなたは、どうやってコリジョンモデルをエクスポートしますか ? 私は、 cubson GUI Force 開発でこの問題にぶつかりました。プロジェクトに加わった各デザイナーは、お互いに異なる3Dツール --- Maya、XSI、max、Blender --- を持っています。通常、コリジョンモデルを出力するために、プログラマはエクスポータプラグインを書かなければなりません。しかし、デザイナーのツールが統一されていないわけですから、この場合はそれも不可能です。プログラマは、フリータイムプロジェクトのために、それぞれのデザイナーによって所有される全てのツールを買うわけにはいかないでしょう。

cubson GUI Force では、プロジェクトのスタッフは、コリジョンモデルを .X フォーマットでエクスポートしました。プログラマは、 .X フォーマットを解析し、頂点を取得して、それをヒットとアンジュレーションのために使用しました。しかしながら、いくらかのツールは、バイナリで .X ファイルを出力しました。従って、プログラマは、2種類のコンバータを作らなければなりませんでした。更に、 .X フォーマットは、非常に柔軟であり、時折変換することができませんでした。

それから、私は更に良い方法を調査し、そして、 COLLADA フォーマットに着目しました。COLLADA は、テキストベースの XML フォーマットで、解析が容易であり、そして DXF と異なり直接頂点を格納しています。デザイナーは、事前にコリジョンモデルをポリゴンに変換しておく必要があります。特にトライアングルへの事前に変換は、コリジョンモデルとして有効です。

ここに XSI Mod Tool 6 の例があります。まず、 File > Crosswalk > Export の順にメニューを選びます。



Crosswalk Filetype で COLLADA 1.4.1 を選択。File name を入力して、 Export ボタンを押します。



これで明瞭なジオメトリデータを含んでいる dae ファイルを取得できると思います。以下のジオメトリデータはプリミティブボックスからエクスポートされたものです。


<library_geometries>
<geometry id="geometries_0">
<mesh>
<source id="geometries_0-Pos">
<float_array id="geometries_0-Pos-array" count="24">
......
</float_array>
<technique_common>
<accessor source="#geometries_0-Pos-array" count="8" stride="3">
......
</accessor>
</technique_common>
</source>
<vertices id="geometries_0-Vtx">
<input semantic="POSITION" source="#geometries_0-Pos"/>
</vertices>
<polylist count="6" material="Scene_Material">
<input semantic="VERTEX" source="#geometries_0-Vtx" offset="0"/>
<vcount>
......
</vcount>
<p>
......
</p>
</polylist>
</mesh>
<extra>
<technique profile="XSI">
<XSI_VertexList>
<xsi_param sid="Attributes"> </xsi_param>
<xsi_param sid="nbAttributes">8 </xsi_param>
<xsi_param sid="position">0 1 2 3 4 5 6 7</xsi_param>
</XSI_VertexList>
</technique>
</extra>
</geometry>
</library_geometries>


Geometry エレメントは頂点とインデックスを格納します。 Source エレメントは頂点の座標を格納します。


<source id="geometries_0-Pos">
<float_array id="geometries_0-Pos-array" count="24">
-0.500000 -0.500000 -0.500000
0.500000 -0.500000 -0.500000
-0.500000 0.500000 -0.500000
0.500000 0.500000 -0.500000
-0.500000 -0.500000 0.500000
0.500000 -0.500000 0.500000
-0.500000 0.500000 0.500000
0.500000 0.500000 0.500000
</float_array>
<technique_common>
<accessor source="#geometries_0-Pos-array" count="8" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>


Polylist エレメントは面の数とインデックスを格納します。事前にプリミティブボックスを三角形に分割しなかったので、以下の面は4頂点です。


<polylist count="6" material="Scene_Material">
<input semantic="VERTEX" source="#geometries_0-Vtx" offset="0"/>
<vcount>
4 4 4 4
4 4
</vcount>
<p>
0
2
3
1
0
1
5
4
0
4
6
2
1
3
7
5
2
6
7
3
4
5
7
6
</p>
</polylist>


このように COLLADA は非常にシンプルなフォーマットです。それは私たちが多くの3Dツールのためにエクスポート plugin を開発する必要があるフリータイムプロジェクト場合の役に立ちます。 しかしながら、あなたは、いくつかのツールで、"指定したオブジェクトのみ"を COLLADA にエクスポートすることができないかもしれません。通常、ゲームシーンは表示用モデルとコリジョンの両方があるので、それは不便です。 FBXConverter は FBX を COLLADA に変換することができます。あなたのツールが"指定したオブジェクトのみ"を FBX にエクスポートできるなら、 FBXConverter はあなたの環境の役に立つかもしれません。

0 件のコメント: