2008年5月23日金曜日

blender - ファイルフォーマットを書き換えたい(21)

いつまで続くんだろう、このシリーズ。
今後ゲーム作りのほうに集中するため、そろそろこの辺で区切りとします…。

以下現状まとめ。結構使えるレベルになってきたと思うので、当分このままかも。

Blender245xml04



実行ファイル(2.45ベース)
http://render.jp/blender/blender245xml_04.zip
ソース
http://render.jp/blender/writeXML.cpp

Blender245xml04が吐くxmlは、頂点にボーンが割り当ててなかろうが、ウェイトがどうなっていようが、構わず高速に吐くので、比較的使えると思います。

・Blenderから、スキンメッシュアニメーションに必要と思われる構造体を、出来るだけそのままxmlに吐きます。
・保存するときは、現在のファイルを.blendファイルに保存した後、同ディレクトリに「fineName_me.xml」「fileName_arm.xml」「fileName_cam.xml」(それぞれMesh、Armature、Camera)を保存します。
_me.xmlには、メッシュオブジェクト毎に、頂点、法線、UV座標、マテリアルカラー、頂点カラー、ボーン番号、マテリアル番号、その他が入ってます。
_arm.xmlには、Armatureの親子構造(XファイルでいうFrame)とか、アニメーションデータが入っています。
_cam.xmlには、カメラに関する各種パラメーター(の中の使いそうなものだけ)と、カメラのIpoアニメーションが入っています。


xmlconverter04.jar



実行ファイル
http://render.jp/blender/xmlconverter04.jar

ソース(NetBeans5.5 + JavaVM1.4以上)
http://svn.render.jp/ xmlconverter2/
手を抜けるところは全力で手を抜いてるので、あまり参考にしないようにしてください。
ドラッグアンドドロップ、いくらやっても出来ねえ!と思って、わざわざよく出来たオープンソースのコードパクってきても出来なかった。が、NetBeans上から実行したら出来なくて、普通に実行したら出来た。意味不明。

上記Blender245xml04で吐き出した、各種xmlを、DirectXに適した、読み込んですぐ使えるような独自形式のxmlに変換します。

Blender245xml04で吐いたxmlを入れて、変換すると、同じディレクトリに「fileName_me_.xml」「fileName_arm_.xml」「fileName_cam_.xml」を作ります。DirectXでの使い方は、SVNリポジトリのModel.cpp/h、Camera.cpp/h、Start.cppからパクってください。

xmlconverter04.jarの注意事項
・面は三角形にしか対応してません。
・_me.xml、_arm.xml、_cam.xmlを各種1つずつ入れて使う仕様
・それぞれ個別に変換可能だけど、_me.xml(メッシュ)にはボーン番号が必要なため、_arm.xmlを一緒に変換する必要有り。つまり複数アニメーションのときは、最初の1回だけ_me.xmlと_arm.xmlを一緒に変換し、それ以降は_arm.xmlの変換のみでおk。
・1Meshをオンにすると、_me.xmlに複数のメッシュオブジェクトが入っていた場合、1つにする。1つにしたほうが読み込みが楽だけど、UV座標割り当てて無いオブジェクトがあっても無理やり1つにするので注意。
・マテリアル毎にsubsetとして分けるので、マテリアルが割り当てられて無い面があると変換できません。
・カメラのIpoアニメーションはテスト中のため、現在DirectX側で座標変換してます

ワンスキンサンプル(.blendファイル)
http://render.jp/blender/sample04.zip

相変わらずです。顔変になってるけど直すのめんどい。


--------------

と、ここまで書いてて気づきましたが、今のところ複雑すぎて、本気でBlender+DirectXで3Dゲーム作りたい人じゃないと、役に立たないかもですねぇ。でも本質的に複雑なので、仕方ないです。

Blenderでまともに複数アニメーション吐けるコンバーターが無いというのもありますが、Blender+DirectXって1年置きくらいに誰かが挑戦して中途半端に終わってる気がします。

--------------

というわけで、現状、まだまだ何でも変換ってわけには行きませんが、目標であったスキンメッシュの複数アニメーション+カメラは出来ているし、blender245xml04ではShapeKeyも吐くには吐いているので、コンバーターを改良すればShapeKeyにも対応できるかもです。また、コンバーターは複数オブジェクトに対応している(はず)なのでDirectXの読込み側を何とかすれば、複数メッシュの親が同じArmatureという状態にも対応できるはずです。

まぁ今年いっぱいは、気長にやっていこうと思っているので、忘れた頃に、また続き作ります。

0 件のコメント: