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プロジェクトを用意する。

2.XNAプロジェクトに登録済の.Xファイルを削除する。

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; のようなコードを追加すると、モーション再生速度を自由に設定可能。

 

inserted by FC2 system