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で読み込み可能な人型モデルもターゲットに加えることができる。双方のプラグインを活用すれば、世間に流通する人型モデルの約半数を利用可能と思われる。
◎全体の流れ
本稿では、リグではなくシャドウリグをXNAに渡しているが、これはSoftimageからデフォルトで取得できるリグはボーン数が多すぎてXNAで使用できないためである。(詳細はこちらの記事の「4.Softimage Mod Tool と XNA の連携手順(その2:デフォルトモデルシャドウリグなし) 」を参照のこと)
シャドウリグとは、このような懸案を解消するためのもので、ソフト(XNAなど)側でモデルを制御するのに必要最小限のボーンだけをリグから抽出したものである。デザイナーがリグを操作してアクション(=モーション)を付けると、シャドウリグが自動的に連動する。この方式においては、ソフト側に(リグではなく)シャドウリグを渡す。
2010/8/11追記:シャドウリグ方式は構造が複雑で使いこなすのはかなり難しいのでお勧めできません。(詳細はこちら)
1.XNA用シーンの準備
XNAViewerのセットアップが完了していることを前提としている。(未完了の場合はこちら)
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.ファイルの出力(静止状態)
以上でファイル出力完了。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を調整する場合は次項参照。
以上でカメラとライトの作成完了。
ビューモードはデフォルトで「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.リグのセットアップ
11.XNAモデルへの変換(シャドウリグ)
12.ニュートラルポーズの設定
この作業は必須ではない。下手に実施すると支障を来す可能性があるので、下記事項を把握した上で実施すべきか否か判断すること。但し、アクション登録後にこの操作を実施すると、登録したアクションがおかしくなる可能性があるため、実施する場合はアクション登録前に行うのがベターである。
この後、エンベロープ設定やアニメーション登録を実施するが、それらが一通り完了した後に、ボーンやデフォーマの追加、エンベロープの再設定などを行いたくなることがある。その際、最初のポーズに戻せないと、これらの作業がやりにくい。
本来は、アニメーションマネージャ((ExplorerでBipedを選択した状態で)XNA Game Studio>Manage Animation)のアクションリストに「Default Pose」が登録されているので、これを利用して最初のポーズに戻す。しかしアクション登録後にこの操作を行うと、登録済のアクションがおかしくなる(ほとんど動かなくなったりする)ことがある。XNAのデフォルトアクションはリグ(Biped)に追加されるのに対し、シャドウリグ方式はシャドウリグ(Biped_Shadow)にアクションを追加するため、座標の整合性が取れなくなるのかもしれない。
これでは最初のポーズに手軽に戻すことができないため、ニュートラルポーズを設定する。(ニュートラルポーズ機能についてはこちらの「◎ニュートラルポーズのまとめ」を参照)
尚、ニュートラルポーズは、メッシュ、リグ、シャドウリグ、カメラなど、様々なオブジェクトに対して、いつでも設定/再設定可能。状況に応じて使い分けると良い。但し、Transform初期値を変更した状態でフリーズすると既存アクションに影響を与えるかもしれないので注意すること。
以下は、リグに対してニュートラルポーズを設定する例である。
以上でニュートラルポーズの設定完了。
ニュートラルポーズに戻したい場合は、対象のオブジェクトを選択してリセットする。以下はリグをリセットする場合の手順例。
13.エンベロープの設定
14.アニメーションの登録
15.エンベロープウエイト設定
必要に応じて、エンベロープウエイト設定を調整すること。
筆者は主にWeight Editorを利用しているが、XNA連携だからといって特別な操作や注意事項はなさそうなので、詳細手順は省略する。
16.ファイルの出力(アニメーション)
以上でファイル出力完了。XNAViewerで読み込んで表示すること。
17.XNAViewerによる表示(アニメーション)
「6.XNAViewerによる表示(静止状態)」と同様なので、そちらを参照すること。
18.実行結果(アニメーション)
ボーン追加等も行った結果。詳細はブログ参照。