Silverlight 5 Beta + XNA互換APIで、3Dスキニングモデルのビューアを作ってみる
3Dスキニングモデル「XModel形式(.xm)」
独自の「XModel形式(.xm)」とそのライブラリ「XELF.XModel」をSilverlight 5上に持ってくる試みです。「XELF.XModel」は、3Dスキニングモデル+アニメーションのライブラリです。「Dragoon」用に、XNA Game Studio 3.1対応として構築し、これまでに、XNA Game Studio 4.0対応になっていました。
開発行程
作業の流れ
XML対応では、いつもXmlDocumentだったので、XmlReader/XmlWriterの書き方の把握と実際の記述に少々時間が必要でした。
「XNA非互換部分のヘルパー作成」は、引数の簡単なオーバーロードに対応する拡張メソッド、「IndexElementSize.SixteenBits」限定対応に対する暫定措置、IVertexTypeの対応、テクスチャ読み込みの置き換えなどです。
Effectでは、fxcで表示できるレジスタ一覧テキストに対する解析処理を作って、文字列の名前によるEffectParameter代替クラスの取得に簡易対応しました。今回実装したパラメータ設定値の持ち方は最適ではないような気がします。「Cloneメソッドの処理」と「初期値の管理」についてのバグ修正に時間が掛かりました。行列の縦横のバリエーション(「fxc」の「/Zpr」「/Zpc」)にも引っかかりました。
ポリゴンがまったく見えない時間が長かったので、デバッグには結構な時間がかかってしまいました。
現状の結果
新規コードのバグが取れ、動くようになってきました。GUIはデバッグしながら軽くつけた段階です。スクリーンショットでは、表示しなくてよいパーツも表示されている段階です。3Dの背景色は、前回の描画テストのコードを引き継いだ名残です。
ブラウザ内の実行では、GPUアクセラレーションを有効にするタグを設定したHTMLをうまく利用できないことも多かったので、途中からGPUアクセラレーションを有効に設定した「ブラウザ外実行」(Out of Browser)を利用しました。
「ブラウザ外実行」(Out of Browser)もあるので、Sliverlight 5のXNA互換APIは、互換性の高さで「XNA用の開発ツール」や、Silverlight上やブラウザ上で「3Dが必要なアプリケーション」のプラットフォームとして便利なものと思います。
これまでの「XNA Game Studio + Windows Forms」「XNA Game Studio + WPF」などの結合方法より導入しやすく、ブラウザ上で動く点は利点です。
※現時点で、ロードマップがはっきりしている選択肢として。
※現状Effect周りがない点は厄介ですが、今後のSilverlight 5のアップデート(post-betaなど)などで機能がそろうものとして。
※現状、本格的なXNA Game Studio互換環境として利用するという点では、今後の周辺機能(「コンテントパイプライン」「Gameクラス」「GameComponentクラス」「SpriteBatchクラス」「シェーダモデル3.0」ほか)の提供具合や、代用の補助ライブラリの登場の有無にもよりそうです。
残された謎
リリースビルド実行時のみ、頂点バッファへのSetDataメソッドでArgumentExceptionが発生する謎が残っています。