2009/7/24 Na-7
2010/8/11 Na-7

技術資料一覧に戻る

 

3D人型モデルをSoftimage Mod Toolで編集しXNAで動かす

注意 この資料は、筆者が自らの経験を記録したものであり、他人に勧めるものではありません。

この資料を参考として行った行為がいかなる結果になろうとも、筆者は責任を負いませんので予めご承知おきください。

 

 

◎使用ツール

ツール名 入手元
Softimage(旧名称XSI:Softimage Mod Tool 7.5:三次元CG製作用ソフトウェア) http://www.softimage.com/products/modtool/
XNAViewer(Softimageで作成したデータをXNAで表示するXNA用サンプルプロジェクト) Softimage添付(セットアップ方法はこちら
XNA3.0(XNA GameStudio 3.0:ゲーム開発用フレームワーク) http://msdn.microsoft.com/ja-jp/xna/default.aspx

 

 

◎概要

本稿は、自作やフリーなどで用意した3D人型モデルにリグをセットアップし、最終的にXNAでスキンアニメーションするまでの手順を記録したものである。

リグとはチェイン、ボーン、コントローラ等の集合体で、リグを知らない人は「ボーンのようなもの」と思っていれば、当面は凌げるかもしれない。RokDeBone2などのツールでは、ボーンを1から構築するのに多少手間がかかるが、Softimageでは デフォルトの人型リグを取得しモデルに当てはめることができる。

こちらの記事を併用すれば、Metasequoiaで読み込み可能な人型モデルもターゲットに加えることができる。双方のプラグインを活用すれば、世間に流通する人型モデルの約半数を利用可能と思われる。

 

 

◎全体の流れ

1.XNA用シーンの準備

2.3D人型モデルデータの読み込み

3.XNAモデルへの変換(人型モデル)

4.XNA向けマテリアル設定

5.ファイルの出力(静止状態)

6.XNAViewerによる表示(静止状態)

7.実行結果(静止状態)

8.カメラとライトの作成

9.モデルのTransform調整

10.リグのセットアップ

11.XNAモデルへの変換(シャドウリグ)

12.ニュートラルポーズの設定

13.エンベロープの設定

14.アニメーションの登録

15.エンベロープウエイト設定

16.ファイルの出力(アニメーション)

17.XNAViewerによる表示(アニメーション)

18.実行結果(アニメーション)

 

本稿では、リグではなくシャドウリグをXNAに渡しているが、これはSoftimageからデフォルトで取得できるリグはボーン数が多すぎてXNAで使用できないためである。(詳細はこちらの記事の「4.Softimage Mod Tool と XNA の連携手順(その2:デフォルトモデルシャドウリグなし) 」を参照のこと)

シャドウリグとは、このような懸案を解消するためのもので、ソフト(XNAなど)側でモデルを制御するのに必要最小限のボーンだけをリグから抽出したものである。デザイナーがリグを操作してアクション(=モーション)を付けると、シャドウリグが自動的に連動する。この方式においては、ソフト側に(リグではなく)シャドウリグを渡す。

2010/8/11追記:シャドウリグ方式は構造が複雑で使いこなすのはかなり難しいのでお勧めできません。(詳細はこちら

 

 

1.XNA用シーンの準備

XNAViewerのセットアップが完了していることを前提としている。(未完了の場合はこちら

番号 画面イメージ Softimage Mod Tool操作 詳細
1 XNA Game Studio>Connect to XNA Project ・XNA Project Pathを指定してOK

・SOFTIMAGE_XNAViewer.slnの親フォルダではなく、SOFTIMAGE_XNAViewerフォルダを指定する
(例:C:\Documents and Settings\username\My Documents\Visual Studio 2008\Projects\XNAViewerTest1\SOFTIMAGE_XNAViewer)

・パスを初めて指定した場合、Softimageデータ格納用の空フォルダが沢山作成される(この機能のパスを使わないと、エラーチェック機能でエラーと表示されるので素直に使う方が無難)

2 XNA Game Studio>New XNA Scene ・作業中のシーンを保存するか聞かれたら、適当に対処する(不要であれば「いいえ」)

 

 

2.3D人型モデルデータの読み込み

ファイル>読み込み機能、ファイル>Crosswalk機能、各種スクリプト機能等で3D人型モデルデータを読み込む。

Metasequoiaで読み込み可能な3D人型モデルデータの場合は、一旦メタセコイア形式(.mqo)で保存してからこちらの記事を参照。

 

 

3.XNAモデルへの変換(人型モデル)

いきなりアニメーションを表示しようとすると、失敗した時に何が悪いのかわかりにくくなるので、まず手始めにXNAでモデルの静止状態表示を目指す。本項では、その下準備としてモデルの変換を実施する。

慣れてくればいちいち静止状態を表示確認する必要は無い。その場合「3.5.6.7.」の手順を省略し、「4.8.」の手順を後で実施することができる。

番号 画面イメージ Softimage Mod Tool操作 詳細
1 (モデルを選択した状態で)XNA Game Studio>Convert to XNA Model ・1シーン1モデルの場合、モデルを選択しなくても変換される

 

 

4.XNA向けマテリアル設定

XNA向けのマテリアル設定が未完了の場合、こちらを参考に実施すること。

この手順は後で実施しても問題無いが、実施しないと、XNAViewerでは白いモデルが表示され、アニメーションが再生されない可能性があるので注意すること。

 

 

5.ファイルの出力(静止状態)

番号 画面イメージ Softimage Mod Tool操作 詳細
1 (モデルを選択した状態で)XNA Game Studio>Publish Models ・1シーン1モデルの場合、モデルを選択しなくても変換される

・ファイルの出力先パスとモデル名を指定する
(例:C:\Documents and Settings\username\My Documents\Visual Studio 2008\Projects\XNAViewerTest1\SOFTIMAGE_XNAViewer\Content\Models\SkinModel01.xsi)

以上でファイル出力完了。XNAViewerで読み込んで表示すること。

 

 

6.XNAViewerによる表示(静止状態)

以下はXNAでの操作。

番号 画面イメージ XNA操作
1 ・予め準備したサンプルプロジェクト「XNAViewer」を開く
2 ・ソリューションエクスプローラのSOFTIMAGE_XNAViewer→Content→Modelsで右クリックし、追加>既存の項目

・オブジェクトの種類を「すべてのファイル」とし、Modelsフォルダ内の先程作成した〜.xsiファイルを追加する

3 ・追加したファイルのプロパティを確認する
 →Content ImporterがCrosswalk Importerに、Content ProcessorがCrosswalk Model ProcessorになっていればOK
4 ・LoadContent()内の
Models.Add(new ModelAsset("Content/Models/Robot_Articulated", content));
のアセット名を、先の名称に変更する
(例:Models.Add(new ModelAsset("Content/Models/SkinModel01", content));)
5 ・ビルドしてプログラムを開始する

・ (パッドを操作してアニメーションを開始する)

 

 

7.実行結果(静止状態)

足元は正常だが、上半身が歪んで見える。これはモデルがカメラとカメラ注視点の間にうまく納まっていないからである。(詳細はブログ参照)

このような問題が生じた場合、次項を参照して解決すること。

 

 

8.カメラとライトの作成

前項のようなケースが生じた場合、カメラを操作するか、モデルのTransform(スケールや位置など)を調整する必要がある。

カメラを操作する場合は、下記4点のカメラ設定値が、どんな時にプログラムで使われるか把握しておくこと。(詳細はブログ参照)
・XNAコード内の、カメラ初期設定値
・XNAコード内の、パッドのLeftStickを押した時にセットするカメラ設定値
・デフォルトのシーンファイル(Scene_Data.xsi)内のカメラ設定値
・モデルシーンファイル内のカメラ設定値(何もしなければ無視されるが、シーンファイル(Scene_Data.xsi)として出力すると、上記同様に影響する)

ここではカメラ(と、ついでにライト)を作成する手順を記録している。Transformを調整する場合は次項参照。

番号 画面イメージ Softimage Mod Tool操作 詳細
1 XNA Game Studio>Create Model ・エクスプローラを利用して、「Model」の名称を「scene_data」に変更する
(他の名称にする場合は、XNAViewerプログラムも改修すること)

Meshを選択して削除する

・Camera_RootとPoint1、Point2、Point3をドラッグ&ドロップでscene_data配下に移動する

2 (Explorerでscene_dataを選択した状態で)XNA Game Studio>Publish Models ・ファイルの出力先パスとモデル名を指定し、scene_data.xsiファイルを上書きする
(例:C:\Documents and Settings\username\My Documents\Visual Studio 2008\Projects\XNAViewerTest1\SOFTIMAGE_XNAViewer\Content\Models\Scene_Data.xsi)

以上でカメラとライトの作成完了。

ビューモードはデフォルトで「Camera」になっている。この状態だとSoftimageのカメラ(ビューポート視界)がXNAのカメラ設定に反映されるのでデバッグに都合が良い。

カメラを別の視点から調整したい場合は、ビューモードを「ユーザ」に変更してカメラを操作すること。以下はその具体的な手順。

尚、カメラにアクションを付けると、Softimageの中ではカメラ目線が変わるが、XNAには反映されないようだ。

番号 画面イメージ Softimage Mod Tool操作 詳細
1 (ビューポート左上の)Camera>ユーザ ・エクスプローラでCamera_Root、Camera、Camera_Interestを選択し、画面右側のTransformの「t」を利用して、 カメラの位置を調整する(ハンドル調整可、数値入力可)
2 ・カメラ位置調整後、カメラに対しニュートラルポーズを設定した方が良いかもしれない
 →カメラのニュートラルポーズ設定は実施すべきか否か、筆者自身結論が出ていない(2009/7/23)ので各自判断すること
3 (Explorerでscene_dataを選択した状態で)XNA Game Studio>Publish Models ・ファイルの出力先パスとモデル名を指定し、scene_data.xsiファイルを上書きする
(例:C:\Documents and Settings\username\My Documents\Visual Studio 2008\Projects\XNAViewerTest1\SOFTIMAGE_XNAViewer\Content\Models\Scene_Data.xsi)

カメラ設定後、5〜7の手順を実施して表示状態を確認し、納得できる状態に調整すること。

 

 

9.モデルのTransform調整

カメラを操作しない場合は、カメラ位置とカメラ注視点の間にモデルを納める必要がある。(詳細はブログ参照)
以下はその具体的な手順。

番号 画面イメージ Softimage Mod Tool操作 詳細
1 ・Explorerでモデルを選択する
・画面右側のTransformの「s」や「t」を利用して、モデル全体のサイズや位置を調整する(ハンドル調整可、数値入力可)
2 ・Trransform調整した場合は、その結果をXNAに反映させるため、ニュートラルポーズを設定した方が良い(必須ではないが推奨)

Transform設定後、5〜7の手順を実施して表示状態を確認し、納得できる状態に調整すること。

 

 

10.リグのセットアップ

番号 画面イメージ Softimage Mod Tool操作 詳細
1 作成>キャラクタ>二足ガイド ・表示されたダイアログはそのままOK

・キャラクタのプロポーションに合うようにガイドのプロポーションを修正する

・ガイドをキャラクタのサイズに合わせる手順例
1.表示>一般>Explorer(または8)でエクスプローラを表示
2.エクスプローラでBiped_Guideを選択
3.画面右側のTransformのSを利用して適当に調整(Z座標系の倍率変更を忘れないこと)

2 作成>キャラクタ>二足ガイドからリグ作成 ・「シャドウリグ」タブの「シャドウキャラクタへのコンストレイント」内の「タイプ」を「ヌル階層」、「オプション」内の「手」を「シャドウフィンガーなし」としてOK

 

 

11.XNAモデルへの変換(シャドウリグ)

番号 画面イメージ Softimage Mod Tool操作 詳細
1 (ExplorerでBiped_Shadowを選択した状態で)XNA Game Studio>Convert to XNA Model ・人型モデルのメッシュをBiped_Shadowの階層下にドラッグ&ドロップで移動
(画面イメージの例では、元々SpearMan01_mqo配下に存在していたArm1などをまとめてBiped_Shadowの階層下に移動した)

 

 

12.ニュートラルポーズの設定

この作業は必須ではない。下手に実施すると支障を来す可能性があるので、下記事項を把握した上で実施すべきか否か判断すること。但し、アクション登録後にこの操作を実施すると、登録したアクションがおかしくなる可能性があるため、実施する場合はアクション登録前に行うのがベターである。

この後、エンベロープ設定やアニメーション登録を実施するが、それらが一通り完了した後に、ボーンやデフォーマの追加、エンベロープの再設定などを行いたくなることがある。その際、最初のポーズに戻せないと、これらの作業がやりにくい。

本来は、アニメーションマネージャ((ExplorerでBipedを選択した状態で)XNA Game Studio>Manage Animation)のアクションリストに「Default Pose」が登録されているので、これを利用して最初のポーズに戻す。しかしアクション登録後にこの操作を行うと、登録済のアクションがおかしくなる(ほとんど動かなくなったりする)ことがある。XNAのデフォルトアクションはリグ(Biped)に追加されるのに対し、シャドウリグ方式はシャドウリグ(Biped_Shadow)にアクションを追加するため、座標の整合性が取れなくなるのかもしれない。

これでは最初のポーズに手軽に戻すことができないため、ニュートラルポーズを設定する。(ニュートラルポーズ機能についてはこちらの「◎ニュートラルポーズのまとめ」を参照)

尚、ニュートラルポーズは、メッシュ、リグ、シャドウリグ、カメラなど、様々なオブジェクトに対して、いつでも設定/再設定可能。状況に応じて使い分けると良い。但し、Transform初期値を変更した状態でフリーズすると既存アクションに影響を与えるかもしれないので注意すること。

以下は、リグに対してニュートラルポーズを設定する例である。

番号 画面イメージ Softimage Mod Tool操作 詳細
1 Biped階層下の適当なコントローラを選択し、Transform内のrボタン(回転)やtボタン(移動)などを利用してポーズを付ける ・現在のポーズをそのままニュートラルポーズとしたい場合は操作不要(何もしなくてよい)
2

(ExplorerでBipedをマウス中ボタン選択した状態で)Transform>ニュートラルポーズの設定

・「ニュートラルポーズの設定」=「ニュートラルスケーリングの設定」+「ニュートラル回転の設定」+「ニュートラル移動の設定」

・XNA連携を考慮しない場合は、ここまでの手順でポーズ設定完了

3 (ExplorerでBipedをマウス中ボタン選択した状態で)Transform>すべての変換をフリーズ ・「すべての変換をフリーズ」=「スケーリングのフリーズ」+「回転のフリーズ」+「移動のフリーズ」

・フリーズすると、XNAのTransform初期値にも反映される

以上でニュートラルポーズの設定完了。

 

ニュートラルポーズに戻したい場合は、対象のオブジェクトを選択してリセットする。以下はリグをリセットする場合の手順例。

番号 画面イメージ Softimage Mod Tool操作 詳細
1 (Explorerでcontrols_groupを選択した状態で)Transform>すべての変換をリセット ・「すべての変換をリセット」=「スケーリングのリセット」+「回転のリセット」+「移動のリセット」

・左記の選択方式では、controls_group配下に存在しないボーンはリセット対象外なので注意すること
→ExplorerでGlobalSRT以下をマウス中ボタン選択すると、下位階層ノードがリセットされないケースがあるので注意すること
→個別に選択してリセットするとか、ビューポートからリグやボーンを全選択するなどして対処すること
 

 

 

13.エンベロープの設定

番号 画面イメージ Softimage Mod Tool操作 詳細
1 (モデルメッシュを選択した状態で)デフォーム>エンベロープ>エンベロープの設定 ・表示されたダイアログは「はい」

・Biped_Shadow階層下のShadow_envelope_group(骨のグループ)をマウス中クリックで選択、右クリックで完了
→筆者はまとめて設定してしまったが、本来は、個々のメッシュ毎に必要最低限のデフォーマ(この場合はボーンを指す)を設定していくのが理想的かもしれない(面倒だけど)

・成功すると、動くポイントがボーンごとに色分けされる

 

 

14.アニメーションの登録

番号 画面イメージ Softimage Mod Tool操作 詳細
1 (ExplorerでBiped_Shadowを選択した状態で)XNA Game Studio>Manage Animation

・Character Key Sets内のCharacter Key Set From Deformersボタンを押して、新しいキーセットを作成する(この新しいキーセットが自動的に選択された状態となる)

2 コントローラに対して、適当にアニメーションを付ける

1.タイムライン(画面下)で適当なフレームを選択する

2.Biped階層下の適当なコントローラを選択し、Transform内のrボタン(回転)やtボタン(移動)などを利用して動きを付ける

3.kキーを押してキーを付加する

・Biped階層下のcontrols_group階層下のコントローラに対してアニメーションを付ける

・Explorerで、Biped_Guide、Biped_Shadow等をマウス中ボタンで選択してhキーを押し、余計なものは非表示にすると コントローラが選択しやすくなる(再度hキーを押すと非表示解除)

3 ・ディスプレイ>すべてのオブジェクトの非表示解除

・タイムラインの再生ボタン

・アニメーションの動きを確認する

・窓枠右上の「ワイヤフレーム」を「テクスチャ」に変更
(本来はリアルタイムシェーダ>DirectX9にすべきだが、表示が崩れる場合がある)

・表示がウザければ、hキーを利用して邪魔なオブジェクトを非表示とする

4 (ExplorerでBiped_Shadowを選択した状態で)XNA Game Studio>Manage Animation ・アクション内のNewボタンを押す

・アクションリストに「NewAction」が追加されたことを確認する

・アクション名を変更したい場合はArtion Infoで名称変更する

・アニメーションを更新した場合は、Update Action Clipボタンを押してアクションを更新する

 

 

15.エンベロープウエイト設定

必要に応じて、エンベロープウエイト設定を調整すること。

筆者は主にWeight Editorを利用しているが、XNA連携だからといって特別な操作や注意事項はなさそうなので、詳細手順は省略する。

 

 

16.ファイルの出力(アニメーション)

番号 画面イメージ Softimage Mod Tool操作 詳細
1 (ExplorerでBiped_Shadowを選択した状態で)XNA Game Studio>Publish Models ・ファイルの出力先パスとモデル名を指定する
(例:C:\Documents and Settings\username\My Documents\Visual Studio 2008\Projects\XNAViewerTest1\SOFTIMAGE_XNAViewer\Content\Models\SkinModel01.xsi)

以上でファイル出力完了。XNAViewerで読み込んで表示すること。

 

 

17.XNAViewerによる表示(アニメーション)

「6.XNAViewerによる表示(静止状態)」と同様なので、そちらを参照すること。

 

 

18.実行結果(アニメーション)

ボーン追加等も行った結果。詳細はブログ参照。

 

inserted by FC2 system