プロフィール

Na-7

Author:Na-7
SE(システムエンジニア)として約15年間システム系ソフト会社を勤めあげ、2008年3月退社。現在、ゲーム制作会社設立を目指して活動中。


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
弓兵モデル作成19
開発中の弓兵モデル
Softimageで作成した弓兵が、ようやくXNAでまともに動くようになったらしい。



◎XNA向けのボーン構造

XNAで崩れる原因を探るため、試行錯誤を延々と繰り返して、ようやく「XNA向けのボーン構造になっていない」ことに気付きました。

弓を手から離すモーションを作らない前提だったので、手と弓の中間にボーンを設けなかったのですが、エンベロープ設定用のポーズは、手と弓が離れています。それでもSoftimageはチェインルートが有効なので正常動作しますが、チェインルートがサポートされないXNAでは、位置もアニメもおかしくなります。

エンベロープ設定用のポーズはXNAで再生しないので、モーションの一種とは考えなかったのですが、結論としては中間ボーンが必要です。



◎中間ボーン追加

1 フロント画面で中間ボーン作成

2 階層構造&名称修正

3 中間ボーン以下のアニメキー全削除

4 各チェインのSRT修正

5 リファレンスポーズを設定

6 モーション&アニメキー作成

中間ボーンのスケールを縮小して手に持たせると、階層下の弓全体が連動して小さくなるので、階層下の各チェインルートのスケールを元に戻します。

弓兵モデル作成16

うへ~何じゃこりゃ?



◎コンストレイントの影響

スケール関連の問題かと思っていろいろ試したのですが、そうではなくて、ボーン追加後にコンストレイントが残っていたのが悪さしたようです。Softimageでは正常に機能してるように見えたので、なかなか気付けませんでした(--;

で、全てのコンストレイントを削除してアクターのリセットを実行すると、被コンストレイントのボーンが変な位置に移動しました。…アレ?

もしかしたら、リファレンスポーズはずっとこの位置で記憶されてて、アクターのリセット直後にコンストレイントが働いてたのかもしれません。



◎リファレンスポーズの誤認

「リファレンスポーズの設定」は、エンベロープ設定前のメッシュorボーン位置を記憶する機能と認識していたのですが、これは誤りで、実はエンベロープ設定後のメッシュorボーン位置を記憶する機能でした。

よって、エンベロープが存在しない中間ボーンには機能しません。

ちなみに、エンベロープ設定前はスケルトンポーズでした。
この機能はXNA連携で使えなさそうですが…。




◎XNA非サポート機能

リファレンスポーズやコンストレイント等の機能はXNAでサポートされず、無視されます。それでSoftimageと異なるアニメがXNAで再現されるわけですが、一部のボーンだけリファレンスポーズ適用前の位置に戻っていた可能性があります。

そう考えて、チェイン/ボーン構造とリファレンスポーズとアニメキーを様々な組み合わせで試したのですが、どうやってもXNAで崩れてしまいます。う~ん…。



◎中間ボーンの位置

その後もあれこれ試すうちに、意外な事実が発覚しました。中間ボーンに円柱オブジェクトをエンベロープとして設定すると

弓兵モデル作成17   弓兵モデル作成18

手と弓の間に存在すべき円柱オブジェクトが、XNAでは変な場所に存在します。アニメキーやコンストレイントを付けても外しても変わりません。なんでこーなるの?



◎メッシュのセンター

その後も「XNAボーン数の上限を超えたのでは?」とか「XNAのボーン数増加改修で悪影響が出たのでは?」とかあれこれ考えて試したのですが、結局原因は「メッシュのセンターを原点に移動してなかった!」ということでした。

○センターの移動手順

1 (必要に応じて)アクターのリセット

2 エンベロープを一時削除

3 オブジェクトを選択

4 センターボタンを選択

5 グローバル座標系を選択

6 手入力でsrtを原点に修正

7 エンベロープを戻す

(注:階層化されたオブジェクトのセンターを移動する場合は、ConstrainのChldCompボタンを利用すること)

弓兵モデル作成19

ようやく、XNAでも崩れずにSoftimageと同じアニメが再現されました。

いや~長かったですね!



◎まとめ

弓兵モデルがXNAで崩れた主な原因は以下の通りです。

:ボーン構造がXNA向けになってなかった
:・メッシュのセンターを原点に移動してなかった

に関しては前回冒頭で試したものの、修正前だったので崩れました。崩れたので、原因候補から外してしまいました。

また、修正後は「は以前試した」ので原因候補から抜けてしまいました。

XNA連携は注意事項が山ほどありますが、どれか1つでもミスると崩れます。
また、ミスが複数の場合、原因も分かり難いです。

しかし弓1つ追加するのに何十時間もかかるとは!><


(2012/4/29追記)
:弓中央ボーンにエンベロープが設定されてなかった
 →階層に非デフォーマボーン(エンベロープ未設定ボーン)
  が含まれるとアニメが崩れるケースがある


(2012/5/7追記)
:中間ボーンにエンベロープが設定されてなかった
 →非デフォーマボーン(エンベロープ未設定ボーン)は
  キャラクターキーセットに含まれないため、
  アニメが崩れるケースがある





◎次回予告

4月になったので、次回は「3月の総括と4月の目標」です。

スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー)



copyright © ゲーム制作の舞台裏 all rights reserved.Powered by FC2ブログ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。