プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
槍兵再作成40
再作成中の槍兵モデル
初期ポーズの問題を解決して、IKが使用可能となった?
とりあえずエンベロープウエイト調整完了。



◎ニュートラルポーズについて

初期ポーズに戻す方法はないかとヘルプを見たら、かなりややこしい感じだったので、要点をピックアップします。

・ニュートラルポーズは、ローカルのスケール/回転/移動
 の現在値をニュートラルポーズとして保存し、(0, 0, 0)
 (スケールは(1, 1, 1))に設定する
 →保存された値は(Softimage内では)オフセット値として
  機能する

・変換のフリーズは、グローバル空間内でセンターの
 スケール/回転/移動を親の座標系の(0, 0, 0)
 (スケールは(1, 1, 1))に設定する
 →オブジェクトのジオメトリは変更されない
 →非ジオメトリオブジェクト(ボーンやコントロールなど)
  では無効

・変換のリセットは、ローカルのスケール/回転/移動を
 (0, 0, 0)(スケールは(1, 1, 1))に設定する

・変換のフリーズ時にニュートラルポーズが存在する場合、
 オブジェクトのセンターは親の空間の原点ではなく
 ニュートラルポーズに移動する
 →オブジェクトのセンターを原点に配置したい場合は、
  変換のフリーズを行う前にニュートラルポーズを
  削除する必要がある


結論から言うと、ニュートラルポーズはオフセット値がXNAに反映されないので原則アウトです。
(ローカル値が存在しない場合のみセーフ)

具体例を上げると、変換のリセットはローカル値を初期化するので、「変換のリセット→ニュートラルポーズ」で不都合が無ければセーフですが、そもそも変換のフリーズが無効(センター値は保存されないし、それ以前にセンター値はXNAに反映されない)なので通常はアウト。

「ニュートラルポーズ→変換のフリーズ」はSoftimage上でローカル値が初期化されるので一見セーフっぽく見えますが、オフセット値がXNAに反映されないのでアウト。


これまで「上手くいかないことがある」と悩んできましたが、どうやら「たまたま上手くいくことがあった」というのが正しいようです(爆)



◎デフォルトポーズの登録

では、XNA連携でニュートラルポーズを登録するにはどうすれば良いのでしょうか?

実を言うと、XNA連携用にアニメーションマネージャ機能が存在するので、これで最初のポーズをアクションとして登録しておけばニュートラルポーズ機能は不要です。

例えば、ロボットサンプルでは「still」というアニメが登録済です。stillのポーズを変更してから別アニメを作成し、再度stillに戻すと、先程変更済のポーズに戻ります。

しかし、私が登録したデフォルトポーズは、再修正が反映されません。

背骨が曲がってる

エンベロープ設定直後の初期状態を登録したはずなのに、何故かボーンが2本ずれて登録されており、これを修正登録すると修正前に戻ってしまいます。

個別に選択して「変換のリセット」とすると戻りますが、デフォルトポーズに失敗すると、今後作成するアニメが全て無駄になりそうで、とても不安です。

ちなみに、この現象は昔から頻発してました。だからニュートラルポーズなどを試していたのですが、今も発生するということは、シャドウリグ方式は無関係だったのですね。



◎ちょっと実況中継風

例のボーンと他のボーンの全パラメータを徹底的に比較しましたが、どうにも異状が見当たりません。親のボーンも正常だし、他に考えられるのは…あ、ありました!
チェインの終端です!下手に動かさないよう不可視属性としてたので、気付くのに時間かかりましたw

もしや終端にIK値が設定されているのでは?…でも、故意に設定した記憶は無いし、そんな形跡も無さそうだなぁ…。

「すべてのコンストレイントを削除」としても変化なし。あれ?でも詳細オプションはコンストレイント有効になってますよ?とりあえず無効化してみましょう。

チェイン終端のコンストレイント   背骨の修正登録が反映された

…おお!ポーズ修正が反映されました!

どうやらチェイン終端のコンストレイントが原因で、ポーズを修正しても自動遷移していたようです。

この回避策はかなりイレギュラーっぽいので検討の余地アリです(このままだと多分IK使えない)が、原因の場所が特定できただけでも一歩前進です!^^



◎ヌルを利用する

もう少しマシな回避策はないかと考えたのですが、そもそも背骨と腰骨を1つのチェインにしたのが良くないかもしれません。終端を非表示にしたってことは、IKを使う意思が無いということです。IK使わないのにチェイン組んだのが敗因?

ロボットサンプルを確認すると、背骨腰骨はボーンではなくヌルで、チェインではありませんでした。標準リグは腰骨が特殊なジオメトリでよくわかりません(これでもXNAで動くのが不思議というか驚き)が、少なくともチェインではなさそうです。

とりあえず、1つのチェインにまとめるのはやめようと考えて「ボーンでチェインを分割」で分割したのですが、分割後の状態を確認すると、何か様子がヘンです。ヘルプを見ると、これはサブチェインを作成する機能であって、2つのチェインに分割する機能ではありませんでした。

サブチェインはどういうものかよくわからないので、改めてヌルで作り直すことにしました。

1 全メッシュを選択し、「エンベロープ>デーフォーマの
  削除」で背骨腰骨をデーフォーマから削除する

2 首や手足などのチェインを「Constrain>カット」で
  階層から切り離す

3 背骨腰骨チェイン全体を選択して削除する

4 「プリミティブ>ヌル」でヌルを2つ取得する

5 ヌルの名称を変更し、階層に追加する

6 首や手足などのチェインを階層に復帰させる

7 エンベロープ設定やデフォーマ追加を行う

実際にやってみると、背骨はヌルだとエンベロープウエイトの範囲が良くなさそうなので、背骨は単独チェインのボーンとし、腰骨だけヌルとしました。



◎IKが曲がる方向

別件調査中に、IKが期待外れの方向に曲がる原因が判明。
2Dチェインを全て正面から描いたのが敗因で、前後に曲げたいならトップビューかライトビューで描くべきでした。

…Softimageの基本事項を忘れてました(爆)

「初期ポーズをデフォルトポーズとしてアニメ登録すると微妙にずれる」のも多分これが原因で、IKチェインの方向設定ミスによりIKが変に影響したと考えると、納得できます。

2Dチェインを全て描き直そうと思ったのですが、これはプリファードアングル(IK使用時の動作を予測できるようにするための角度)を調整すれば直せるようです。

さらに、チェインルートの向きも、チェインを描画するビューによって異なることが判明しました。例えば、フロントビューでは(0,0,0)、ライトビューでは(0,90,0)となります。以前はユーザビューで描いていたので、その時のビューの角度でチェインルートの向きとプリファードアングルが決められたようです。

当面はチェインルートの向きを全て(0,0,0)に統一したいので、フロントビューでチェインを描いて、プリファードアングルを修正します。

ついでに、初期ポーズに戻すとズレるボーンその2だった槍ボーンは、3Dチェインで作り直します。



◎補正機能が発動されるタイミング

回転角度参照値を設定し、キャラクターキーセットを取得してアクション編集開始。しかし腰にアニメキーを付けたら、腕メッシュがおかしくなりました。

腰にアニメキーを付ける直前   腰にアニメキーを付ける直後

何で腰にキーを付けて腕がおかしくなるのか理解できませんでしたが、どうやらキーを付け始めたタイミングで全チェインに回転補正機能が働いたようです。

補正計算がこんなタイミングで自動的に発動すると、混乱したり気付かなかったりするんだよなぁ…。パラメータ設定直後か、編集アクション切替直後か、編集フレーム番号切替直後にして欲しいです。

Softimageでは「いつの間にかおかしくなってる」ことが日常茶飯事ですが、その理由が何となく分かった気がします。Softimageには自動補正機能が沢山ありますが、全ての機能が常時発動済とは限らなくて、中途半端な状態から編集を加えてしまうと、全機能発動時におかしくなる…。大概は気付くのが遅くて、崩れたタイミングも原因もよくわからず苦戦する、というわけです(苦笑)


今回は見た目が極端に変わって気付けたのはある意味幸運でしたが、最初は回転角度参照値が悪いのかと思って悩みまくってしまいました。(このパラメータも自動的に変化するのでかなり意味不明です)

単純にエンベロープを付け直したら、見た目は直りました。とりあえずXNAでもアニメしますが、IKは期待外れの方向に曲がります。

回転角度参照って、予想した機能とは違うようですね。
とりあえず、基本に戻って2Dチェインを描き直しましょう。



◎2Dチェーン描画時の座標指定

トップビューで腕のチェインを描き直す際に、スナップ機能で始点と終点は隣接頂点と一致させることができるのですが、中間の頂点のY座標を指定する方法がわかりません。

トップビューで2Dチェーンを描く時のY座標指定方法不明

一度描画してから修正する手法は避けたい(IKに影響する可能性がある)ので、トップビューでY座標を指定しながら2Dチェーンを描く手法を探ったのですが、あれこれ試したりネットや講習ビデオをチェックしてもやり方がわかりません。結局、以下のように回避しました。

1 ダミープリミティブを取得して中間地点に配置する

2 スナップ機能でダミープリミティブの位置に合わせて
  2Dチェーンを描く

3 ダミープリミティブを削除する

もっとスマートな方法があるはず!…と思いますが、丸1日調べてこの程度のことがわからないとゲンナリします(ーー;



◎IKできました

腕チェインを再作成してIKを試すと、概ね期待した方向に曲がったので、他のチェインも全面的に作り直しました。

槍兵再作成40

FKも併用可能ですが、試しにIKオンリーでポーズを付けてみました。腕はやはりイマイチですが、足はかなり自然な感じです。IKで握りこぶしが出来たのはちょっと意外でした。(FKの方が綺麗ですが)

ちなみに、デフォルトポーズと他のアクションを切り替えても崩れなくなりました。これで安心してアクションが追加できる!?

…不具合は後で発覚するのが毎度のパターンなんだよなぁ(ぼそっ)



◎次回予告

9月になったので、次回は「8月の総括と9月の目標」です。いつまで残暑続くんですかね~?

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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