2009/6/11
2009/6/14
2010/8/11

技術資料一覧に戻る

「Softimage Mod Toolで作成したスキンアニメモデルをXNAで動かす」に戻る

 

Softimage Mod Tool と XNA の連携手順

(その 3:デフォルトモデルシャドウリグ付き)

 

 

Softimageから取得できるデフォルトモデルを利用して、XNAで人体モデルをスキンアニメする手順です。

デフォルトモデルを普通に利用するとボーン数がXNA上限値を超えてしまい、エラーが発生して動かないため、シャドウリグを利用してボーン数を節約します。

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

 

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

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

 

 

◎使用ツール

・XNA 3.0

・Softimage Mod Tool 7.5

・XNAViewer(XNA Viewerのセットアップはこちら

 

 

◎XNA用シーンの準備

番号 画面イメージ 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 ・作業中のシーンを保存するか聞かれたら、適当に対処する(不要であれば「いいえ」)

以上でXNAシーンの準備が完了しました。

 

◎モデルの準備

以下、Animateツールバーで作業します。

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

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

2 作成>キャラクタ>二足ガイドからリグ作成 ・「シャドウリグ」タブの「シャドウキャラクタへのコンストレイント」内の「タイプ」を「ヌル階層」、「オプション」内の「手」を「シャドウフィンガーなし」としてOK
3 取得>プリミティブ>モデル>キャラクタ-男性 ・取得したモデルのパラメータを適当に調整する
4 (モデルメッシュを選択した状態で)メインコマンドパネル(画面右)のEdit>フリーズ ・モデルメッシュを選択する際は、モデルメッシュ以外のオブジェクト(ガイドやリグなど)を選択しないように気を付けること

・オペレータスタックによる以前の操作修正はできなくなるが、データ量は低減する

・Editメニューが画面下に消えている場合は、SelectやTransform等のメニュー文字部を数回右クリックすると現われる(一回目は表示されないことがある(バグ?)が、Select等を複数回右クリックすると出現する)

以上でモデルの準備が完了しました。ファイル>保存でシーンを保存してください。(今後は適当なタイミングで各自保存してください)

 

◎XNAモデルへの変換

番号 画面イメージ Softimage Mod Tool操作 詳細
1 (ExplorerでBiped_Shadowを選択した状態で)XNA Game Studio>Convert to XNA Model ・メッシュモデル(Man_Character配下のCharacter)をBiped_Shadowの階層下にドラッグ&ドロップで移動

以上でXNAモデルへの変換が完了しました。

 

◎エンベロープの設定

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

・Biped_Shadow階層下のShadow_envelope_group(骨のグループ)をマウス中クリックで選択、右クリックで完了

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

2

以上でエンベロープの設定が完了しました。

 

◎サブディビジョンレベルの調整

この手順は必須ではありません。下記事項を考慮した上で、実施すべきか否か個別に検討してください。

・モデルの滑らかさが低下するので、見た目が少し悪くなります。

・頂点数、ポリゴン数、インデックス数などが減るので、ゲーム中のPC負荷が軽減され、パフォーマンスが向上します。

・デフォルトでは三角形(XNA的にはポリゴン数?)が約6万存在し、インデックス要素が32ビット必要となるため、グラボが未対応の場合はXNAで下記エラーが発生します。(シェーダのバージョンとは無関係。シェーダ3.0対応でも下記エラーが発生する環境は実在します。)

System.InvalidOperationException: This device does not support 32-bit indices. Use IndexElementSize.SixteenBits or a type that has a size of two bytes.

不特定多数に配布する場合、ユーザの環境によっては「ゲームが起動しない、エラーも何も表示されない」状態となるので注意が必要です。この手順を実施すると、この問題を回避できます。

番号 画面イメージ Softimage Mod Tool操作 詳細
1 (モデルメッシュを選択した状態で)編集>選択の情報 ・三角形の数を確認する(約6万)
2 (モデルメッシュを選択した状態で)テンキーの「-」を押す ・「-」を押すとサブディビジョンレベルが1段階下がる

・「+」を押すとサブディビジョンレベルが1段階上がる

3 (モデルメッシュを選択した状態で)編集>選択の情報 ・三角形の数を確認する(約1万5千)

以上でサブディビジョンレベルの調整が完了しました。

 

◎アニメーションの登録

番号 画面イメージ Softimage Mod Tool操作 詳細
1 (ExplorerでBiped_Shadowを選択した状態で)XNA Game Studio>Manage Animation ・デフォルトのアクションがリストに表示されているが、これはXNA用ではない ので削除する(放っておいても害は無い)

・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、Man_Characterをマウス中ボタンで選択してhキーを押し、余計なものは非表示にすると コントローラが選択しやすくなる(再度hキーを押すと非表示解除)

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

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

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

・窓枠右上の「ワイヤフレーム」を「テクスチャ」に変更

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

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

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

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

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

以上でアニメーションの登録が終わりました。

 

◎マテリアルの設定

マテリアル設定手順はこちらの記事を参考とさせて頂きました。テクスチャを使用したい場合も同記事が参考になります。但し、同記事に記述されている通り、以下のマテリアル設定手順はSoftimage Mod Toolが落ちる可能性がありますので適宜保存してください。

正規の手順を知りたい場合は、ヘルプ(英語)等を参考に各自研究してください。

尚、XNA向けのマテリアル設定を省略すると、(モデルはデフォルト色で表示されますが)XNAでスキンアニメしない場合がありますのでご注意ください。(少なくとも、私の メインPC及びサブPCの環境ではスキンアニメしませんでした)

番号 画面イメージ Softimage Mod Tool操作 詳細
1 (ExplorerでBiped_Shadow→Character→Material1を選択した状態で)表示>レンダリング/テクスチャ>Render Tree(またはキーボードの「7」) ・Character_Designer_Colorをダブルクリックし、画像ファイルのパスとファイル名を控える
(例:C:\Softimage\Softimage_Mod_Tool_7.5\Data\XSI_SAMPLES\Pictures\Character_Designer\high\bald_color.jpg)

・同様に、Character_Designer_SpecとCharacter_Designer_Bumpの画像ファイルのパスとファイル名を控える

・上記3ファイルをXNAのContentフォルダにコピーする
(例:C:\Documents and Settings\username\My Documents\Visual Studio 2008\Projects\XNAViewerTest1\SOFTIMAGE_XNAViewer\Content\Textures\bald_color.jpg)

・マテリアル以外のオブジェクトは不要なので削除する(この場合はMaterial1以外全て)

・削除後にnoIcon_picが表示されることがあるが、これは削除しても無視しても良い

2 ノード>リアルタイム>DirectX>DX Fx(.fx) ・(CTRL+R)キーを押すと表示アイテムが整列されるので適宜活用する

・メニューからDX Fx(.fx)を選択しても画面に変化が無く無視される場合は、左側メニューからリアルタイム>DirectX>DX Fx(.fx)を選択してドラッグ&ドロップすると、メニュー選択時と同じ操作になる。

3 ・DXFX2などと書かれたオブジェクトの右上の青丸をドラッグすると矢印が伸びるので、マテリアルオブジェクトの上まで伸ばしてマウスボタンを離す

・メニューが表示されるのでRealTimeを選択すると、2つのオブジェクトが接続される

4 ・DXFX2などと書かれたオブジェクトをダブルクリックし、表示されたダイアログの「DX9 FX ファイル」にエフェクトファイルのパスを入力する
(例:C:\Documents and Settings\username\My Documents\Visual Studio 2008\Projects\XNAViewerTest1\SOFTIMAGE_XNAViewer\Content\Effects\Lambert.fx)

・しばらくするとダイアログが変化するので、DirectXFX_ParametersのTechniqueをSkinnedに変更し、AmbientColorとDiffuseColorを適当に調整する

5 ・default_surface_map_pngをダブルクリックし、表示されたダイアログの「クリップ」を適当に変更する
(例:body_surface_map1)
(クリップ変更後に続けて編集するとMod Toolが落ちることがあるので、一旦ダイアログを閉じて再度開き直した方が無難??)

・下の方に画像ファイルのパスが書かれた部分があるので、先程コピーした画像ファイルのパスを指定する
(例:C:\Documents and Settings\username\My Documents\Visual Studio 2008\Projects\XNAViewerTest1\SOFTIMAGE_XNAViewer\Content\Textures\bald_color.jpg)

・上記と同様の手順で、default_normal_map_pngとdefault_ambocc_map_pngに画像ファイルを設定する

6 (ExplorerでBiped_Shadow→Character→left_eye→Material3を選択した状態で)表示>レンダリング/テクスチャ>Render Tree ・Character_Designer_Eyeをダブルクリックし、画像ファイルのパスとファイル名を控える
(例:C:\Softimage\Softimage_Mod_Tool_7.5\Data\XSI_SAMPLES\Pictures\Character_Designer\eye.jpg)

・画像ファイルをXNAのContentフォルダにコピーする
(例:C:\Documents and Settings\username\My Documents\Visual Studio 2008\Projects\XNAViewerTest1\SOFTIMAGE_XNAViewer\Content\Textures\eye.jpg)

・マテリアル以外のオブジェクトは不要なので削除する(この場合はMaterial3以外全て)

・削除後にnoIcon_picが表示されることがあるが、これは削除しても無視しても良い

7 ノード>リアルタイム>DirectX>DX Fx(.fx) ・(CTRL+R)キーを押すと表示アイテムが整列されるので適宜活用する

・メニューからDX Fx(.fx)を選択しても画面に変化が無く無視される場合は、左側メニューからリアルタイム>DirectX>DX Fx(.fx)を選択してドラッグ&ドロップすると、メニュー選択時と同じ操作になる。

8 ・DXFX2などと書かれたオブジェクトの右上の青丸をドラッグすると矢印が伸びるので、マテリアルオブジェクトの上まで伸ばしてマウスボタンを離す

・メニューが表示されるのでRealTimeを選択すると、2つのオブジェクトが接続される

9 ・DXFX2などと書かれたオブジェクトをダブルクリックし、表示されたダイアログの「DX9 FX ファイル」にエフェクトファイルのパスを入力する
(例:C:\Documents and Settings\username\My Documents\Visual Studio 2008\Projects\XNAViewerTest1\SOFTIMAGE_XNAViewer\Content\Effects\Lambert.fx)

・しばらくするとダイアログが変化するので、DirectXFX_ParametersのTechniqueをSkinnedに変更し、AmbientColorとDiffuseColorを適当に調整する

10 ・default_surface_map_pngをダブルクリックし、表示されたダイアログの「クリップ」を適当に変更する
(例:left_eye_surface_map1)
(クリップ変更後に続けて編集するとMod Toolが落ちることがあるので、一旦ダイアログを閉じて再度開き直した方が無難??)

・下の方に画像ファイルのパスが書かれた部分があるので、先程コピーした画像ファイルのパスを指定する
(例:C:\Documents and Settings\username\My Documents\Visual Studio 2008\Projects\XNAViewerTest1\SOFTIMAGE_XNAViewer\Content\Textures\eye.jpg)

11 (ExplorerでBiped_Shadow→Character→left_eye→left_highlight→Material4を選択した状態で)表示>レンダリング/テクスチャ>Render Tree ・マテリアル以外のオブジェクトは不要なので削除する(この場合はPhong)

・削除後にnoIcon_picが表示されることがあるが、これは削除しても無視しても良い

12 ノード>リアルタイム>DirectX>DX Fx(.fx) ・(CTRL+R)キーを押すと表示アイテムが整列されるので適宜活用する

・メニューからDX Fx(.fx)を選択しても画面に変化が無く無視される場合は、左側メニューからリアルタイム>DirectX>DX Fx(.fx)を選択してドラッグ&ドロップすると、メニュー選択時と同じ操作になる。

13 ・DXFX2などと書かれたオブジェクトの右上の青丸をドラッグすると矢印が伸びるので、マテリアルオブジェクトの上まで伸ばしてマウスボタンを離す

・メニューが表示されるのでRealTimeを選択すると、2つのオブジェクトが接続される

14 ・DXFX2などと書かれたオブジェクトをダブルクリックし、表示されたダイアログの「DX9 FX ファイル」にエフェクトファイルのパスを入力する
(例:C:\Documents and Settings\username\My Documents\Visual Studio 2008\Projects\XNAViewerTest1\SOFTIMAGE_XNAViewer\Content\Effects\Lambert.fx)

・しばらくするとダイアログが変化するので、DirectXFX_ParametersのTechniqueをSkinnedに変更し、AmbientColorとDiffuseColorを適当に調整する

15 6〜14と同様の手順でBiped_Shadow→Character→right_eye→Material5とBiped_Shadow→Character→right_eye→right_highlight→Materialに対するマテリアル設定を行う
余談 (余談なので手順としては無視して良い) ・(筆者PCでは)ビューポートの右上の表示モードをリアルタイムシェーダ>DirectX9に変更 するとSoftimage Mod Toolが落ちる(原因不明)

・(筆者PCでは)前述のTechniqueをスタティックに戻して表示モードをDirectX9としても、やはりSoftimage Mod Toolが落ちる

以上でマテリアルの設定が終わりました。

 

◎ライトの設定

前出の記事に「Lambert.fxの設定で点光源じゃないとオブジェクトは照らせないらしい。」との記述 がありますが、私が試した限りでは、ライトを別途用意しなくてもDiffuseColorは反映されるようです(XNAViewerはデフォルトでScene_Data.xsiを呼び出しており、この中にポイントライトが存在するため?)。

 

◎ファイルの出力

番号 画面イメージ 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で読み込んで表示します。

 

 

◎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 ・ビルドしてプログラムを開始する

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

実行結果は下記をご覧ください。

 

 

◎実行結果(メインPC)

私のメインPCでは、下記のビルドエラーが発生します。(マザーボード内臓グラボで貧弱なため)

Invalid texture. Face 0 is sized 150x148, but textures using DXT compressed formats must be multiples of four.

これは「テクスチャ解像度が150×148だが、圧縮フォーマットの都合で4の倍数じゃないといけないよ」と言っているようです。他人の環境では出ないかもしれません。

eye.jpgの解像度を148×148に修正すると、このエラーは回避できます。すると次のエラーが発生しました。

System.ArgumentException: Device does not support multi-level texture width and height values that are not powers of 2.

これは「テクスチャが2のn乗じゃないよエラー」です。eye.jpgの解像度を128×128に修正すると、このエラーは回避できます。

 

画像解像度を修正すると、表示されました。

DiffuseColorの赤とAmbientColorの緑が両方反映されててちょっと気持ち悪い色ですが、ボディの陰影や顔のテクスチャも反映されています。

 

◎実行結果(サブPC)

サブPC(GeForceFX5200)でもテクスチャ関連のエラーは発生します。エラーを回避するとこのように表示されます。

(サブPCのため動画キャプチャはご勘弁ください)

緑一色でDiffuseColorが無視されたようですし、陰影が全くありません。これはどうやらグラボの違いによるもののようです。 ドライバの設定はデフォルトのままなので、設定をいじれば見た目が変わるかもしれません。

 

 

◎アニメーションの登録(パターンその2)

アニメーションの登録を、以下の手順で試してみます。

番号 画面イメージ Softimage Mod Tool操作 詳細
1 前述の要領で、モデル全体に対して適当にアニメーションを付ける
2 (ExplorerでBiped_Shadow配下のCharacterをマウス中ボタンで選択した状態で)ツール>プロット>すべての変換 ・Fカーブオプション内の「プロット値をFカーブにフィット」をチェックしてOK(こうするとデータ量が減る??)
 
3 12.(ExplorerでBiped_Shadow配下のCharacterをマウス中ボタンで選択した状態で)アクション>格納>アニメートパラメータ-Fカーブ&エクスプレッション
 
・新規ソース内のアクション名を指定してOK(デフォルトはStoredFcvAction)

・何やら警告っぽいメッセージが画面下部に表示されるが、英語なのでよくわからない(文字背景オレンジ色で表示され、すぐに消えてしまう)

4

(ExplorerでBiped_Shadowを選択した状態で)XNAメニューにあるManage Animationを選択

・キャラクターキーセットと先程のアクションが登録されていることを確認する

以上でアニメーションの登録が終わりました。以降の手順は改善前と同じです。

 

◎パターンその2の実行結果(メインPC)

静止画ですが、PC上ではちゃんとスキンアニメしました。どちらのパターンでもアニメーションの登録は可能です。

 

 

◎モデルのボーン数チェックについて

XNA Game Studio>Diagnose Modelsとすると、モデルをチェックできます。

表示されたログを見ると、大量のWARNINGが出力されていますが 、シャドウリグ無しモデルの時に記録されていた「ボーン数が多い」というエラー はありません。BipedとBiped_Shadowを分離して、1モデルあたりのボーン数が減ったため?尚、「noIcon.picが無い」というエラーは無視してます。

 

inserted by FC2 system