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の計測を実施したプロジェクトファイル(0.4M)

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:本来はインポータに依存するものであるが、インポータ/プロセッサ/ライブラリの相性も考慮する必要があるので比較項目に挙げた。

 

inserted by FC2 system