2012/04/29 Na-7
2012/05/07 Na-7
2012/05/08 Na-7
2012/06/09 Na-7
SoftimageスキンモデルをXNAで動かす際の注意事項
注意 | この資料は、筆者が自らの経験を記録したものであり、他人に勧めるものではありません。 この資料を参考として行った行為がいかなる結果になろうとも、筆者は責任を負いませんので予めご承知おきください。 |
◎目次
◎概要 |
◎使用ツール |
◎まえがき |
◎チェイン/ボーン関連 |
◎キャラクターキーセット関連 |
◎初期ポーズ関連 |
◎リファレンスポーズ関連 |
◎メッシュ関連 |
◎センター(オブジェクトの中心座標)関連 |
◎コンストレイント関連 |
◎その他 |
◎概要
Softimageで作成したスキンアニメモデルをXNAで動かすと、アニメが崩れることが多い。
本稿では、アニメが崩れた際にチェックすべき項目を記述する。
本稿の記述内容は、XNA連携公式手順を前提とする。
(参考:Softimage Mod Tool と XNA の連携手順)
◎使用ツール
ツール名 | 入手元 |
XNA3.1(XNA GameStudio 3.1:ゲーム開発用フレームワーク) | http://msdn.microsoft.com/ja-jp/xna/default.aspx |
Softimage(旧名称XSI:Softimage Mod Tool 7.5:三次元CG製作用ソフトウェア) | http://www.softimage.com/products/modtool/ |
◎まえがき
スキンアニメはボーンを動かすアニメのことを指すが、Softimageはボーンのみのモデルを作ることはできず、チェインベースで作ることになる。チェインにはルートやエフェクタも含まれるが、XNAには存在しない。それらをなるべく使わないよう気を付けても、ちょっと間接を曲げただけで、それらが無意識に使われたりする。本来これは「細かい内部構造を気にしなくても簡単に作れる」というSoftimageのウリなわけだが、これがXNA連携にとって仇となりやすい。
例えば、Softimageには高度な編集機能が沢山あるが、「ボーンのみに影響し、ルートやエフェクタに影響しないことが保障された編集機能」など存在しない。そのため「この編集機能だけ使っていればXNAでも確実に動く」という開発スタイルを貫くことは実質不可能であり、あれこれ試しながら(XNA非サポート機能に影響したか)毎回確認するしかない。
本稿は、試行錯誤の経験をまとめて今後の開発に活かそうという試みである。
◎チェイン/ボーン関連
・Softimageはボーンのみの作成は不可(チェイン必須)
→Softimageはボーン削除不可。チェイン単位で削除すること。
→XNAにはチェインが存在しない(ボーンのみ)
→チェインルートはXNAでボーンに変換される??(未確認)
→エフェクタはXNAでボーンに変換されず無視される??(未確認)
・ボーン構造は1つのツリー階層下にまとめること(必須)
・階層下のボーンを離れた位置に置く場合、注意が必要
→手に物(槍や弓など)を持たせる場合、Softimageはチェインルートが存在するので、手と物を繋ぐ中間ボーンが無くても問題無い。
しかしXNAはチェインルートが存在しないため、中間ボーンが必要となるケースが多い。
物を手から離さない場合は中間ボーン不要だが、(XNAのモーションは離さずとも)エンベロープ設定用ポーズで離す場合は、中間ボーン必要。
・階層に非デフォーマボーン(エンベロープ未設定ボーン)が含まれる場合、SoftimageやXNAでアニメが崩れるケースがある
→非デフォーマボーンはリファレンスポーズ対象外であるため、アクターのリセットを実行すると向きが不定になる
→非デフォーマボーンはPublisjhの対象外??(未確認)
→ダミーメッシュを用意してエンベロープを割り当てると回避できる
◎キャラクターキーセット関連
・ボーンを追加/削除したり、ボーン構造を修正したら、キャラクターキーセットを再作成すること(忘れがちなので要注意)
(2012/5/7追記)
・中間ボーンなど、非デフォーマボーンはキーセットに追加されないので注意すること
→ダミーメッシュを作成し、エンベロープに設定すれば回避できる
→中間ボーンがキーセットに無くても正常にアニメするケースはあるようだが、条件不明のため回避策が無難
◎初期ポーズ関連
(ここでは便宜上アクション開始時のポーズを初期ポーズと呼ぶ)
・初期ポーズを明示的に定義することは不可能(経験則)
→Softimage的にはニュートラルポーズ機能がその役割となるが、ニュートラルポーズ使用モデルはXNAで崩れやすい(XNA非サポート機能)
・初期ポーズが実質不定なので、編集中は常に気を配る必要がある
例:10フレーム目で肘を迂闊に曲げると、1フレーム目から曲がった状態になる(さらに編集外のアクションにまで影響する??)
但し、既に他のフレームでキーが打たれていた場合、10フレーム目の操作は無視される
1フレーム目と10フレーム目にそれぞれキーを打つと、それぞれのアニメが有効となる
・アニメキーを打たない項目に関しては、Publishやセーブした瞬間の状態が初期ポーズと考えた方が良い
→アクターのリセットを実施してエンベロープ設定用ポーズの状態でPublishすると、XNAでアニメが崩れることがある
→アニメキーを打てばそちらが優先されるので、キーを打ちまくって回避する手がある
(但し、キー打ちまくりはデータ量増加に伴うパフォーマンス低下の懸念があり、修正作業も煩わしくなるので注意)
◎リファレンスポーズ関連
・エンベロープ設定用のポーズは、アクションの一種として登録することが推奨されている
→但し、1つのモデルに複数のアクションを登録すると、編集対象外のアクションがいつの間にか崩れてることがある(参考:初期ポーズ関連)
・ニュートラルポーズ使用モデルはXNAで崩れやすい(XNA非サポート)
・スケルトンポーズ(エンベロープ未設定オブジェクト用)もXNA不可?
・筆者はリファレンスポーズ&アクターのリセットを使用している
→ボーンとメッシュにそれぞれ設定可能
→但し、エンベロープ未設定オブジェクトは対象外
→この機能は初期ポーズ設定機能ではない(勘違いしないこと)
→但し、アニメキーを打たずに迂闊にリセットすると、初期ポーズが変わることがある(参考:◎初期ポーズ関連)
→一部のボーンにのみキーを打った状態で迂闊にリセットすると、アニメが崩れることがある
(参考:ブログの「◎原因判明」)
◎メッシュ関連
(2012/5/8追記)
・Softimageでは両面描画されるが、XNAでは片面しか描画されないケースがある
例:取得>プリミティブ>ポリゴンメッシュ>グリッド
→メッシュを複製反転すれば回避できる
→メッシュのSRTがフリーズ済の場合、回転値を上書きして戻さないと上手く反転できないケースがある
◎センター(オブジェクトの中心座標)関連
・Softimageはボーン/メッシュそれぞれセンター位置をずらすことが可能
→XNAにセンター機能は存在しない(非サポート)
(2012/6/9追記)
・全てのメッシュのセンター位置を原点[S(1, 1, 1)、R(0, 0, 0)、T(0, 0,
0)]に合わせないと、XNAでアニメが崩れる
→メッシュを1つ追加する度に、原点に合わせること(忘れてハマることが多いので要注意!)
→この注意事項はヘルプ等で見た記憶が無いので、筆者環境特有の可能性がある
(XNAにセンター機能が無いことを考慮すると当然という気もするが??)
・ボーンのセンター位置はXNAに影響しないので気にしなくて良い(経験則)
◎コンストレイント関連
・XNAにコンストレイント機能は存在しない(非サポート)
→但し、ボーンの動きはXNAで再生されるので、ボーンが動くようにコンストレイントを設定すればOK
・SoftimageとXNAで動きが異なることがある(経験則)
→その都度試して確認するしかない
◎その他
・ボーン数の上限を超えてないか?
→Diagnose Models機能で計上されるボーン数と、XNAで読み込まれるボーン数は、異なるケースがある
→上記機能に頼らず、実際にXNAで読み込んでボーン数を確認した方が良い
・ボーンのスケールを変更してないか?
→筆者環境はボーン数増加改修の影響でスケール非サポート
・シーンファイルの設定はプロジェクト毎に異なることがある
→カメラやライトの位置が異なり、画面に何も映らないことがあるので注意すること