プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
槍兵再作成39
再作成中の槍兵モデル
標準リグ方式をやめて、ボーンを1から作り直した。IKは使えないが、XNA連携上の問題は無さそうだ。



◎階層の基本構造

ボーンを1から作るにあたり、まず「何を参考に、どんな階層構造とするか?」を考える必要があります。

A案:階層の概観はロボットサンプル、
   中身は標準リグのような構造とする

B案:キャプテンサンプルのように平坦な階層とする

平坦なボーン階層というのは馴染みが無いので、A案でやってみます。

1 「取得>プリミティブ>ヌル」でヌルを追加

2 ヌルをモデル直下に移動し「DeformerRoot」に名称変更

3 「2Dチェインを描く」や「チェインにボーンを追加」などで
  (DeformerRootの下に)チェインやボーンを追加

チェインやボーンの作成に際し、気になる点が多々あるので、まずは大雑把に作成してXNAで動くかテストしましょう。



◎左右対称チェインの作成

腕や足などのボーンは左右対称です。ボーンの座標を細かく調整した後で、左右対象コピーが簡単に出来ると楽なんですが、可能でしょうか?

まず腕からやってみます。階層ツリーは編集の切り貼りで簡単に出来ました。問題はX座標の反転ですが、チェイン終点のX座標を反転したら、全てのボーンのX座標が反転しました。

しかし足を同様にやってみると、切り貼りした段階で向きや座標がおかしくなりました。足はいろいろ調整したので、その影響かもしれません。とりあえず手動で適当に修正します。

槍兵再作成34   槍兵再作成35

エンベロープやアニメなどを適当に付けると、XNAで無事に動きました。
とりあえず大雑把なテストとしては成功ですね^^



◎槍ボーン追加テスト

槍ボーンを追加して、両手で持てるか確認します。

槍兵再作成36   槍兵再作成37

前回ラストのような位置ズレはなさそうです。念のため両足も確認しましたが、問題無さそうでした。



◎気になるポイント

もう一度、気になるポイントを抑えながら細かく丁寧に作り直します。

・ボーンはわざと曲げた方が良いか?
 →IKで曲がる方向を決めるために曲げた方が良い

・チェインの繋ぎ目をどうするか?(後述)

・頂点は揃えるべきか?(後述)

・変な方向に曲がることが多い(後述)



◎チェインの繋ぎ目

前回ラストで、SoftimageとXNAの位置ズレが発覚しました。その原因として「チェインの繋ぎ目」を疑っています。

XNAのボーンは「次のボーンは、前のボーンの終点から連続している」ことを前提としています(多分?)。しかしSoftimageのチェインはその前提を関知しないので、上位ボーン終点と下位チェイン開始点の座標が一致しない場合「XNAでズレが生じるかもしれない」と考えたわけです。

上位ボーン終点と下位チェイン開始点の座標が一致しない場合

上図でボーンAの階層下にボーンCが存在する場合、ボーンA終点とボーンC開始点の座標が一致しないので、XNAでアニメする際に位置ズレが生じます。


この位置ズレの対策として、下記3案を考えました。

A案:座標の位置を合わせる
B案:コンストレイン機能で合わせる
C案:同一のチェインにまとめる

A案は、座標を1つ1つ手動で合わせるシンプルな手法です。微調整の際に、関連する全ての座標をいちいち変更するのはちょっと手間かもしれません。

B案は、下位座標を上位座標に連動するようセットしておきます。微調整は楽になりそうですが、設定を誤るとややこしいことになりそうです。

C案は、同一チェイン内のボーンとして座標を一致させます。極端な話、1つのチェインで全てのボーンを記述すればズレは生じません。但しIKはボーン全体に影響します。

C案はダメですね。上手く出来ればB案が良さげな気がしますが「上手く出来るならここまで苦戦しねーよ!」って一人ツッコミが入ったので、A案にしましょう。(^^;



◎複数の頂点を揃える

ボーンはわざと曲げた方がIKのために良いと確認しました。しかし背骨から頭部に向かう正中線ボーンのX座標は全て0にしないと心理的に落ち着きません。ロボットサンプルを確認すると、背骨や首骨等のX座標は全て0でした。やっぱりそうだよねぇw

しかし背骨から頭骨までボーンを一通り記述した後でX座標を0に修正すると、他の骨のX座標が自動的に変更されてしまい、全て0にするのは案外難しかったりします。ボーン作成時にグリッドとスナップを使って揃えられないかと思ったのですが、グリッドがXZ軸にあって上手くいきません。

ネットを調べると、こちらの記事に「複数の頂点を揃えるには?」との項目がありました。(昔読んだような…デジャブ?)

実際にやってみると、上手くいく場合と一部反映されない場合がありました。「おかしいな?」といろいろ試したら、マウス中ボタンで一括選択した場合と、シフトキーを押しながら複数選択した場合とで、結果が異なることが判明しました。

ガガーン!!

これはショックです。試行錯誤中は‘試す度に結果が異なる’ことで悩むことが多かったのですが、原因の大半はコレじゃないでしょうか?(爆)



◎チェインの構成

RokDeBone2の場合、手元のボーンを曲げると、その先のボーンもそのまま移動するだけです。しかしSoftimageの場合、手元のボーンを曲げるとその先のボーンも自動的に曲がることがあります。

これが狙い通りに曲がる場合と、あらぬ方向へ曲がる場合があるのですが、そのボーンを修正すると他のボーンもおかしくなって、容易に戻せなかったりします。この現象が頻発するようになったと思ったら、どうやらチェインの構成が悪かったようです。

例えば、正中線上の背、首、頭のボーンを1つのチェインでまとめてしまうと、この現象が頻発します。背骨で1つのチェイン、首骨と頭骨で1つのチェインにすると、わりと素直に曲がります。

チェインの構成はIKやFKに影響するので、よく考えろってことですね。ポイントとしては、別方向に曲がるボーンは別チェインにすべきもののようです。標準リグを参考に構成を見直します。



◎続・チェインの繋ぎ目

改めて考えると、前述の槍ボーンは離れてるのに位置ズレは無さそうでしたね?ロボットサンプルを確認すると、肩骨は胸骨から離れてました。「離れたチェインはXNAで位置ズレを起こす」という仮説は、的外れっぽいなぁ…。

でも、他のチェインの多くは上位チェインの終点座標からスタートしています。私もそうしたいのですが、ボーン記述後にいちいちXYZの各値をコピーしているので、ちょっと手間なんですよねぇ。もっと手軽な方法はないか探っても、長いチェインを記述して「ボーンでチェインを分割」で切断するぐらいしか見当たらないし…。

…待てよ?スナップ機能で合わせれば良いのでは?

スナップのターゲットを「すべてのオブジェクト」から「ヌル/チェイン」に変更したら上手くいきました。「すべてのオブジェクト」でチェインにスナップしないのはちょっと気に入らないのですが、まぁいいか…。



◎チェインルートの回転値

通常は、ボーンの回転値が(0, 90, 0)の場合、Y軸に垂直な直線を想像するでしょう。ところが、Softimageで適当なボーンにこの値を入力すると、斜め方向に直線が延びることが多いのです。

この謎はXNA連携のデバッグ難度を高める要因の1つだったのですが、今回その謎が解けました。チェインルート(開始点)の回転値が影響していたのです。チェインルートの回転値を(0, 0, 0)とすると、ボーンは予想方向に曲がりました。

困ったことに、「2Dチェインを描く」でボーンを描くと、チェインルートの回転初期値が適当な値になってしまい、これを(0, 0, 0)とすると描いたボーンが変な方向に曲がってしまいます。

以前はここでビビって元に戻していた(CTRL+Z)のですが、今回は全てのチェインルートの回転値を(0, 0, 0)とします。変な方向に曲がったのをいちいち修正するのは手間ですが、これで数値入力による制御が可能となります。どうせなら全てのボーンの回転値を整数で付け直すと、後で感覚的にわかりやすいですね。

しかしこんな面倒なこと、普通しないんだろうなぁ…と思ってロボットサンプルを確認したら、正数値のボーンが若干ありました。考え方としては、コレもアリってことか?w



◎左右対称チェインの作成(その2)

正中線ボーンのX座標を揃えたので、次は手足のボーンです。ヘルプや前述の記事に「対称ボタンを使え」とありましたので、今度はこの手法で記述します。

ふむ、確かに左右対称にボーンが描けますね。チェインルートの回転値をいちいち修正しているので、ありがたみは薄いですがw


…後で気付いたのですが「対称に複製」機能がありました。これを使うと、片側調整後に左右対称複製などが可能です。

これは便利でありがたいのですが、チェインルートの回転値が反転するので、(0,0,0)ではなくなってしまいます。動作には影響無いのですが、後でデバッグする際にわかりにくいかも…。

いずれにせよ、ボーン名称は1つ1つ手動で変更する必要があります。RockDeBone2はRとLを自動的に換えてくれましたが、さすがにあんな強引なことはしてくれません(笑)



◎とりあえず完成

ボーンが完成したので、再度エンベロープやアニメを大雑把に付けてテストします。

槍兵再作成38   槍兵再作成39

感触はまずまず良好で、XNA連携上の問題は無さそうです。


但し、難点が2点あります。

・IKは期待はずれな方向に曲がるので実質使えない
 →当面はFKオンリーで作成する

IKが使えないことはある程度覚悟してました。もっと研究すれば期待通りの方向に曲がると思いますが、今はそこまでする必要性を感じないので後日の課題とします。


・デフォルトポーズやニュートラルポーズが不完全

大半は一発で初期ポーズに戻りますが、個別選択してリセットしないと戻らないボーンが2本あります。また、よく見ると他のボーンも初期値と微妙に誤差があります。見た目に影響は無いのですが、気分的にはちょっとイマイチです。



◎次回予告

ボーンの構成/座標/角度などを丁寧に作り直したのですが、時間をかけたほどの効果は無かったかも(汗)

でも少しは勉強になったし、小ワザも幾つか覚えたので良しとしましょう。


次回はエンベロープウエイトの微調整とモーション作成です。

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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