2008/8/22 Na-7
XNA2.0でモーションブレンディング
注意 | この資料は、筆者が自らの経験を記録したものであり、他人に勧めるものではありません。 この資料を参考として行った行為がいかなる結果になろうとも、筆者は責任を負いませんので予めご承知おきください。 |
◎使用ツール
ツール名 | 入手元 |
RokDeBone2(RokDeBone2 Ver4.0.2.6:モーション作成ツール) | http://www5d.biglobe.ne.jp/~ochikko/rokdebone.htm |
XNA2.0(XNA GameStudio 2.0:ゲーム開発用フレームワーク) | http://msdn.microsoft.com/ja-jp/xna/default.aspx |
ACL(Animation Component Library:アニメーション再生用ライブラリ) |
http://www.codeplex.com/animationcomponents/Thread/View.aspx?ThreadId=19730 XNA2.0用の公式版は存在しないため、上記Discussionsに記載されている http://www.laterminal.net/xna/AnimationComponentDLL.rarを使用した |
◎全体の流れ
1.「XNA2.0でスキンアニメーション」で作成したXNA2.0プロジェクトを用意する。
3.RokDeBone2より、複数モーション付き.Xファイルを出力する。
4.3.で出力した.XファイルをXNAプロジェクトに取り込む。
5.XNAプロジェクトにモーションブレンディングコードを記述する。
◎「2.既存の.Xファイルを削除する。」の詳細手順
1.ソリューションエクスプローラのプロジェクト名-Content-.Xファイルで右クリック→「削除」
2.削除確認ダイアログで「OK」
◎「3.RokDeBone2より、複数モーション付き.Xファイルを出力する。」の手順例
例:RokDeBone2付属サンプルデータを利用する場合
1.「File」→「形状ファイル読み込み」→「sigファイルの読み込み」
2.「sigファイル読み込みダイアログ」でSampleフォルダ内の.sigファイルを読み込む
3.「File」→「モーションファイル読み込み」→「*.quaの読み込み」
4.「ファイルを開く」ダイアログでSampleフォルダ内の.quaファイルを読み込む
5.(動作確認したい場合は、「モーション設定ダイアログ」の「プレビュー開始」で確認可能)
6.「モーション設定ダイアログ」の「モーション設定」→「設定」
7.「設定ダイアログ」の「モーション名」をメモに控えておく(後でコードから呼び出す際に必要となる)
8.上記3.〜7.を、.quaファイルの数だけ繰り返す。
9.「モーション」→「モーションの選択」→「motion_(日付時刻等)」(解説:初期モーションを選択している)
10.「モーション」→「編集中のモーションを削除」(解説:初期モーションは不要なため削除している)
11.「File」→「Xファイル書き出し」
12.「X File 出力ダイアログ」で出力ファイル名(パス付き)を記述し「OK」
※各ダイアログの数値パラメータは、デフォルトのままで大丈夫な場合が多い
◎「4.3.で出力した.XファイルをXNAプロジェクトに取り込む。」の詳細手順
1.ソリューションエクスプローラのプロジェクト名-Contentで右クリック→「追加」→「既存の項目」
2.「既存項目の追加」ダイアログで.Xファイルを選択し「追加」
3.ソリューションエクスプローラのプロジェクト名-Content-.Xファイルを選択
4.プロパティウィンドウの「Content Processor」を「Model - Animation Library」に変更
5.(必要に応じてテクスチャファイルをContentに追加)
(RokDeBone2付属サンプルデータを利用している場合は、BMPファイルをContentに追加)
6.試しにビルドしてみる。ビルドエラーとなる場合、.Xファイルの内部形式とContent Importerの読込形式が合っていない。
別のImporterに変更するか、別の.Xファイルに変更すること。
(.Xファイル内部形式が合わない理由の参考:http://kijyouno.exblog.jp/5053265/)
◎「5.XNAプロジェクトにモーションブレンディングコードを記述する。」の手順例
1.Game1クラスの宣言部内に記述されている以下のコードを変更する。
変更前:
// AnimationControllerの宣言
AnimationController
controller;
変更後:
// AnimationControllerの宣言
AnimationController
controller1;
AnimationController
controller2;
2.LoadContent()内に記述されている以下のコードを変更する。
変更前:
// AnimationControllerを追加し、ボーンにセットする。
controller = new
AnimationController(this,
animator.Animations["motion_forward"]);
foreach (BonePose
p in
animator.BonePoses)
{
p.CurrentController = controller;
}
変更後:
// AnimationControllerを追加し、ボーンにセットする。
controller1 = new
AnimationController(this,
animator.Animations["motion_forward"]);
controller2 = new
AnimationController(this,
animator.Animations["motion_left"]);
foreach (BonePose
p in
animator.BonePoses)
{
p.CurrentController = controller1;
p.CurrentBlendController = controller2;
p.BlendFactor = 0.5f;
}
※「motion_forward」や「motion_left」を手順3.で控えたモーション名に置換する こと。
3.実行すると、スキンアニメーションが描画される。
・p.BlendFactor は、0〜1の範囲でブレンド比率を自由に設定可能。
・controller2.SpeedFactor = 0.1; のようなコードを追加すると、モーション再生速度を自由に設定可能。