とあるSEの研究記録III(レコーダー)とあるSEの研究記録IIIとあるSEの研究記録III(ホーム)ブログ倉庫リンク掲示板メールとあるSEの研究記録III(ホーム)ブログ倉庫リンク掲示板メール2012/11/28FBXを読み込こんで描画したかっただけ以前から自作レンダリングソフトで対応するべきか迷っていたfbxファイル。「Colladaフォーマットが扱えるから別に良いかな~?」とか思ってずっと触りませんでしたが、最近になって気が変わりやってみようと思い立ちました。今回はC#環境でfbxモデルフォーマットを使えるようにするために色々とやってみます。項目:FBXファイルとは?FBXの環境を整えるまずはC++で読み込んでみるFBXをC#で読み込むには?FBXファイルとは?結構歴史の古いファイル形式のようです。ここでは簡単にまとめておきます。英語ですがwikipediaにも載っています。詳しく知りたい方はコチラからどうぞ。http://en.wikipedia.org/wiki/FBXFBXでgoogle検索FBXフォ-マットはAutodesk社が所有しているクロスプラットフォームのファイル形式です。ゲーム業界でも使用されているファイル形式で、有名どころの3Dソフト「Maya」や「Softimage(XSI)」では必ずサポートされているフォーマットです(同じAutodesk社の製品だから当たり前だけど)。ゲームライブラリ「XNA」、「Unity」でも標準サポートされています。FBXファイルを入出力できるSDKがAutodesk社からリリースされていて、無償で入手できます。定期的に更新されサポートもそれなりに充実しているので、Xファイルに代わりよく利用されているフォーマットです。ColladaやMMDと並び(業界の人はMMDは使わないだろうけど)、現在最も広く使用されているフォーマットの一つでしょう。私はColladaを愛用してますけどね。いうのも、昔SDK等を使わずにColladaかFBXの自作ローダを作ろうとした際、FBXの中身を見た瞬間に迷わずFBXを諦めてColladaを選択しました。Colladaの分かりやすいXML形式とは違い、FBXフォーマットは作りが難解なのです。どちらか一方のフォーマットさえ使えれば大丈夫かと思ってたのですが、先日、私の環境だとCollada→FBXへの変換は出来るのにFBX→Colladaへの変換が出来ないことに気づきました。Converterだと出力されたColladaファイルが壊れている等等・・・・・・まぁこのように、両方のフォーマットをサポートしているソフトもあれば片方だけサポートしてるソフトもあるので、ColladaとFBX両方使えるに越した事はないでしょう。それぞれに利点・欠点がありますし。ちなみにFBX周りのサポートは力が入っているらしく、Autodesk社からはFBXに関する様々なソフトが無償で提供されています。ViewerFBXファイルをQuickTimeで読み込み、表示するプラグイン。アニメーション付きFBXにも対応。ConverterFBXファイルと他フォーマットを相互変換するためのソフト。SDK」を用意します。コチラのサイトからダウンロード。2010」を使用しました。Pythonコード用のSDKも存在するらしいです。コチラも気になる・・・ダウンロードしたexeファイルを実行するとインストールが始まります。手順通りに進めればとくに問題もなくインストールは終了です。次にVC++2010のプロジェクト設定。SDK\2013.3\lib\vs2010\x86●追加の依存ファイルプロジェクトのランタイムライブラリ設定によって使用すべき.libファイルが異なります。fbxsdk-2013.3-mt.libこれらをプロジェクトに追加すれば環境設定終了です。インストールメモまずはC++で読み込んでみるコチラのサイトを参考にさせていただきました。少々情報は古いけど、殆ど仕様が変わってないので問題ない。ファイルを読み込むまでの簡単なコードを。0;}このように、簡単に読み込むことが出来ます。メッシュから座標・ポリゴンデータを抽出するのも簡単です。法線・UV座標はちょっと面倒。FBXの開放処理は、管理クラス「FbxManager」のDestroyメソッドを呼ぶだけで全ての開放処理を行ってくれます。SDKはメモリリークが発生してたらしいですが、このバージョンでは発生しませんでした。不具合も修正されているようです。一日使って何とかモデルを描画するところまで出来た。描画にはOpenGLを使いました。モデルはMMDfromColladaでpmd→collada、Blenderでcollada→fbx変換して用意しました。こんな感じ↓でもまだ完全にFBXモデルに対応できているわけではなく、他のモデルでやるとこうなった。本来はこういうモデルです。原因は分かってますけどね。座標、法線、UV座標はそれぞれ独立してFbxMeshというクラスにあり、座標と法線はVector4配列、UV座標はVector2配列で取得できます。最初に読み込んだ初音ミクモデルは頂点数が9,331個で、座標・法線・UV座標の配列もそれぞれ9,331個の要素数だったのできれいに読み込めましたが、モデルによってはこの3つの配列の要素数はバラバラになることもあるようです。2つ目のモデルが正にそれで、モデルを確認したところ座標は11,433個、法線は67,521個、UV座標は13,079個でした。調べてみるとインデックス配列にも色々種類があり、頂点インデックス配列の他に法線のインデックス配列・UV座標のインデックス配列もありました。これらの頂点ストリームを組み合わせて頂点を組み立てないと正しく描画できないみたいです。この辺りはColladaと同じ仕組みなんですけど、面倒だなぁ・・・Xファイルは読み込んだ時点で座標やら法線やらを自動的に組み立ててくれるんだけど、そこまでの機能は流石にないか・・・・・・まぁ、今回はSDKの使い方を把握するための作業だったので本格的に実装するのはまた今度です。SDKの使い方は覚えることが出来ました。C#でFBXを扱うためには?ここからが本題。現在私はC#を主に使っているので、FBXをC++だけでなくC#でもやりたいんです。C#環境でFBXを読み込むことが出来るライブラリを調べてみました。・XNAおなじみMicrosoftが無償提供してるゲームエンジン。FBXフォーマットはサポートされているものの、仕様上FBXファイルをプロジェクトリソースに追加しないと読み取れず、プログラム起動後に外部ファイルを読み込むことは出来ない。Xで動くゲームエンジン。FBX、Colladaといったモデルファイルを読み込むことが出来る。本格的に使ったことが無いのでよく分からないが、どうも仕様がXNAと同じっぽい。外部ファイルを読み込めるかは不明。SDKのラッパーライブラリ。DirectXを使っていたり、とにかく古い。古くてもいい方は、一応コチラからダウンロードできます。SDKのラッパーライブラリ。コチラは最新版のSDKに対応している。VC2010にも対応しているが、SDKの一部のクラスしかラップされていない。コチラからダウンロードできます。SDKのラッパーライブラリ。コチラはdllのみ配布されている。今のところVC2008でのみ対応しているらしい。VC2010で使いたいところだが・・・VC2008でいいなら、この中では一番使いやすいライブラリ。コチラからダウンロードできます。この5つが候補に上がりました。本来なら「Fbx.Net」を使いたいのですが、VC2010で使用できないので諦めて、仕方が無いので今回は「ManagedFBX」を選択しました。ダウンロードすると中に「ManagedFbx」と「ManagedFbx.Samples」の2つのプロジェクトファイルがあります。サンプルはFBXファイルを読み込んで情報を確認することが出来ます。アニメーション関連のラッパークラスが無いのは残念ですが、ソースファイルがあるので参考にしながら自作できそうです。このライブラリでFBX読み込みをやってみようかと思います。NodeAttribute※注意Managerクラスを確認したところ、開放処理が書かれておらずFbxmanager::Destroyメソッドが使われていません。そのまま使用するとメモリリークが発生するので使用する際はManagerクラスに開放処理を書き加えてからご使用ください。「MikuMikuMoving」というMogg氏が開発しているMikuMikuDanceのクローンソフトがあるのですが、そのソフトのSystemフォルダの中に「FbxLib」という名前のdllを見つけました。バージョンは2013.02(現在最新版は2013.03)、VC2010にも対応していて、クラスのほとんどがラッピングされているようです。調べてみたところ、FbxLibに関する情報が皆無でした。同氏が開発したライブラリなのでしょう。使い方等の解説は一切ありませんが、上記で紹介したライブラリの中では一番マトモなライブラリだと思います。編集Jimdoあなたもジンドゥーで無料ホームページを。Cookie(クッキー)を利用しています。使用に同意いただける場合は、「同意します」をクリックしてください。ポリシーをご確認ください。