2009/08/26 Na-7
2009/08/29 Na-7
2009/08/30 Na-7
2009/09/01 Na-7
XNAのアニメーションライブラリを比較検証する
注意 | この資料は、筆者が自らの経験を記録したものであり、他人に勧めるものではありません。 この資料を参考として行った行為がいかなる結果になろうとも、筆者は責任を負いませんので予めご承知おきください。 |
◎目次
◎概要 | |
◎使用ツール | |
◎パフォーマンスの測定 | |
○測定結果 | |
○測定に使用したモデルの説明 | |
○測定に使用したプログラムの説明 | |
○測定に使用したマシンの説明 | |
◎測定結果の考察 | |
◎総合評価 |
◎概要
XNAでスキンアニメーションを行う場合、サンプルプログラムをベースに改造するか、アニメーションライブラリを利用するのが一般的である。筆者が知る限りでは、以下の4つの方法がある。
通称 | 説明 |
Skinning Sample | XNA Creators Clubで公開されているXNA公式サンプルプログラム。このサンプルプログラムを改造してスキンアニメーションを実装する人が多い。 |
XSIXNARuntime | Softimage Mod Tool(旧XSI Mod Tool)に付属のランタイムライブラリ。Softimageで作成したアニメーションモデルデータをXNA公式連携手順でXNAに渡す場合はこのランタイムを使用する (参考)。インポーターやプロセッサを変更すれば、他のツールで作成されたデータを扱うことも可能と思われる。 |
ACL | XNA初期の頃に、海外の有志が作成したアニメーションライブラリ(メーカー非公式)。XNAのバージョンアップに伴い、ライブラリもバージョンアップを続けている。 |
XNAnimationLibrary | ACL同様、海外の有志が作成したアニメーションライブラリ(メーカー非公式) 。この4つの中では最も後発の(新しい)ライブラリ。 |
本稿では、上記のうちXSIXNARuntimeとACLの比較検証を行い、どちらがどの程度優れているかを明示し、 アニメーションライブラリを選択する際の判断材料としたい。
尚、Skinning Sample や XNAnimationLibrary に関しては、近いうちに比較検証を試みる予定である。
◎使用ツール
ツール名 | 入手元 |
XNA3.0(XNA GameStudio 3.0:ゲーム開発用フレームワーク) | http://msdn.microsoft.com/ja-jp/xna/default.aspx |
XSIXNARuntime(Softimage(旧名称XSI:Softimage Mod Tool 7.5:三次元CG製作用ソフトウェア)付属ランタイムライブラリ) | http://www.softimage.com/products/modtool/ |
ACL(Animation Component Library:アニメーション再生用ライブラリ) |
http://www.codeplex.com/animationcomponents/Thread/View.aspx?ThreadId=40861 XNA3.0用の公式版は存在しないため、上記Discussionsに記載されている http://www2.cs.ucy.ac.cy/~cs06ee1/DwarfTutorial3.0.rar内のDLLを使用した |
◎パフォーマンスの測定
アニメーションライブラリで最も重要なのは、描画速度(パフォーマンス)である。パフォーマンスについては、幾つか異なる条件でFPSを比較する。
○測定結果
番号 | 測定項目 | XSIXNARuntime手法A(参考) | XSIXNARuntime手法B(参考) | ACL |
1 | モデル1体表示 | 60(FPS) | 60(FPS) | 60(FPS) |
2 | 同一モデル10体ロード、画面内に10体表示 | 18(FPS) (初期ロードに10秒かかる) |
20(FPS) | 60(FPS) |
3 | 同一モデル50体ロード、画面内に10体表示 | 4(FPS) (初期ロードに65秒かかる) |
5(FPS) | 15(FPS) |
4 | 同一モデル100体ロード、画面内に10体表示 | 2(FPS) (初期ロードに160秒かかる) |
2(FPS) | 6(FPS) |
○測定に使用したモデルの説明
Softimageで作成したモデルを.x形式でXNAに渡す手法が(筆者の環境では)確立されていないため、測定には以下のモデルを使用した。(ボーンやモーションは若干異なるので留意すること)
XSIXNARuntimeの測定に使用したモデル | ACLの測定に使用したモデル | |
モデリング方法 | 右記のモデルをスクリプトで一括自動変換(参考) | メタセコイアでモデリング(手動) |
ボーン&モーション作成方法 | Softimage Mod Toolで作成(手動) | RokDeBone2で作成(手動) |
頂点数 | 1152(注1) | 888(注2) 1152(注3) |
マテリアル数(注 4) | 20 | 20 |
テクスチャ数 | 11 | 11 |
ボーン数 | Softimageのボーン数:不明(Softimageから取得(自動生成)したリグにボーンを追加) XNAでmodels[0].CrosswalkModel.Bones.Countを表示した数:63 |
RokDeBone2で手動作成したボーン数(NAMEPERT数):54 XNAでmodel[0].Bones.Countを表示した数:84 |
キーフレーム数 | 不明 | 14? |
参考画像 |
注1:1152は14オブジェクト(手、足など)の頂点数の総和。
注2:メタセコイアの頂点数。ミラーリング先の頂点数は計上されない。(参考)
注3:XNA上では注1と同数になると判断。
注4:マテリアル数=カラーマテリアル数+テクスチャマテリアル数
○測定に使用したプログラムの説明
ACLの測定プログラムでは、Update()やDraw()からコードを削除してパフォーマンス向上を図った。尚、「// インスタンス毎にモーション再生速度をずらす」の前後のコメントを外すとモーションがずれる。
XSIXNARuntime(手法A)の計測を実施したプロジェクトファイル(分割01)(1.0M)
XSIXNARuntime(手法A)の計測を実施したプロジェクトファイル(分割02)(0.2M)
XSIXNARuntime(手法B)の計測を実施したプロジェクトファイル(分割01)(1.0M)
XSIXNARuntime(手法B)の計測を実施したプロジェクトファイル(分割02)(0.2M)
XSIXNARuntimeの測定プログラムでは、Update()から入力処理UpdateGamePad()を削除し、Draw()からSASData設定や画面メッセージを削除してパフォーマンス向上を図っ た。
○測定に使用したマシンの説明
筆者メインPC(Dell Inspiron 530S) | |
CPU | Intel Core2 Duo 2.66GHz |
メモリ | 2GB RAM |
グラボ | マザーボード内臓(Intel G33/G31 Express Chipset Family) |
解像度 | プログラム解像度:800×600、Windows表示モード(非全画面表示モード) (ディスプレイ解像度:1600×900) |
※簡単に言うと「CPUはミドルクラスだがグラボは最低クラス(2009年8月現在)」
◎測定結果の考察
同一モデルを10体以上ロードすると、パフォーマンスに3倍もの差が出た。その原因は以下のようなものではないかと推測する。
A:モデルの違いによるもの |
|
モデリングはスクリプトによる一括自動変換のため、差は殆ど無いものと考えられる。しかしボーン作成以降の手順は全て手作業であり、しかもXSIXNARuntimeのモデルは試行錯誤しながら複雑な手順で作成された。その手順の一部に、パフォーマンスを低下させる要因があった可能性がある。 | |
B:プログラムの違いによるもの |
|
XSIXNARuntimeのプログラムコードは、そのパフォーマンスを最大限引き出すに至っていない可能性がある。(但し筆者の現スキルではこれが限界) | |
C:ライブラリの違いによるもの |
|
XSIXNARuntimeは、同一モデル複数表示を「想定外」としている可能性がある。一方、ACLは同一モデル複数表示を想定し、インスタンシング技術(マテリアルバッチなど)を内部実装している可能性がある。 |
パフォーマンスについては今後も様々な検証を行い、原因を特定してパフォーマンスの向上に努める所存である。
◎総合評価
ライブラリを選択する際は、様々な要素を総合的に判断する必要がある。ここでは筆者が実際に使用した上での総合評価(筆者主観)を記述する。
XSIXNARuntime | ACL | |
パフォーマンス(描画速度) | × | ○ |
メーカーサポート | ○ | × |
対応フォーマット(注1) | △ .xsi(Softimage独自フォーマット)以外のデータが読み込めるか未検証 |
○ .x(DirectX)フォーマットや.FBXフォーマットを扱える(但し、モーション付き.xファイルを正常に出力するツールは少ない) |
プログラミング難易度 | 難 スキンアニメを目指す場合、落とし穴が多いわりに公開情報が少なくハマりやすい |
中 デフォルトではDrawコードすら無いので最初は戸惑うが、一度動き出すとハマり所は(比較的)少ない |
注1:本来はインポータに依存するものであるが、インポータ/プロセッサ/ライブラリの相性も考慮する必要があるので比較項目に挙げた。