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対応になっていました。

開発行程

  1. XML読み書き部分の「XmlDocument」の代わりに、「XmlReader」+「XmlWriter」バージョンを追加作成
  2. XNA非互換部分のヘルパー作成
  3. 簡易Effect関連クラスの作成
  4. シェーダモデル3.0用エフェクトファイルから、シェーダモデル2.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が発生する謎が残っています。