読者です 読者をやめる 読者になる 読者になる

ツクロウヤ

Unityによるゲーム開発記やUnity,3dsMaxのTipsなどを記載していきます。

【Unity+3dsmax】UnityのHumanoid用リグ

今回も前回に引き続き、Unity+3dsmaxでリグを組む際のまとめです。
今回は3dsmaxでのリグの構成についてまとめていきたいと思います。
ちなみにUnityのHumanoid用でスマホなどで使用する指などを無くした最小構成のものです。

■どんなリグ?

リグは前回の説明の通り、CATで作成しています。
見た目はよくあるこんな感じです。

f:id:ArtAwA:20170404004052j:plain

リグの機能としては以下のようなものを入れています。

・肘、膝のアップベクター
・手足のIKFK切り替え
・原点からの全体移動回転
・中心からの全体移動回転(バク宙など用)

場合によっては、腰だけを回転できるようにしたり、頭の向きが対象の方向を向くルックアットを入れてあげてもいいかもしれません。

●構成注意点

3dsmaxのBipedなどでは背骨が3本入っていますが、UnityのHumanoidに合わせて、背骨は2本にしています。CATの「Base Human」を用いた場合、Ribcage(UnityだとChest)の基点が上にあり、UnityのChestは下と異なっているので、「Base」の何もない状態からHubを追加していって作成しています。
UnityのHumanoidの構成に関しては公式の以下を参照ください。

Mecanim Humanoid について | Unity Japan Official Blog

●CATの注意点

CATが通常のボーンとは異なり、以下のような注意点があります。

・コンストレイントなどの情報がCATレイヤーに保存されている
 └CATレイヤーを再生にした状態でコンストレイントを設定する
 └リンクコンストレイントなどで両手持ち、片手持ちなどを容易に切り替えられるのでモーションを付ける上で便利でもある

・CATのギズモ生成以外で作成したコントローラーはレイヤ表示がされない(仕様?)
 └CATの機能の「リグを追加」で追加しても表示されません
 └全体移動のコントローラー類は通常のスプラインを使用
 └レイヤ表示やCATのプロパティ表示はバグがありそう(3dsmax2017 SP3)

・CATのギズモで生成したコントローラーは親子付けでは位置や回転などが継承されない
 └リンク情報の位置などに継承のチェックが付いていてもなるようです(仕様?)
 └全体移動のコントローラーなどの関連付けはリンクコンストレインで設定する

■スケマティクビュー(階層)はどうなってる?

スケマティクビューの階層では以下のような感じで作っています。

f:id:ArtAwA:20170404002708p:plain

構成としてはモデル、ボーン、リグコントローラー毎にポイントの子供にしてグループ化しています。(ポイントは無くても問題ありません、Unityでオブジェクト数が気になる場合は消しても大丈夫です。)
Unityへ出力をする際は、モデル、ボーンのグループとRoot、ALL_Rootを出力し、リグコントローラーはアニメをベイクしてあげるので、出力には含めません。

RootはUnityに出力した際に親となるオブジェクトです。Unityでスクリプト制御をしたりする場合はここで制御するようにして、Transformの値は0,0,0=原点になるようにしています。
ALL_Rootはオブジェクト全体の調整用のものです。3dsmaxで出力すると座標軸がUnityと異なるため、方向を合わせてあげる必要があります。そのため、調整用のオブジェクトを3Dデータ上で挟んでいます。
方向合わせに関しては公式のドキュメントの以下を参照ください。

Unity - マニュアル: インポートされたモデルの角度の修正方法

Humanoidはこれで問題なさそうですが、Genericは座標軸の違いやRootMotionなどで色々とおかしな状態になっているので、別途検証してそのうちまとめたいと思います。

次回は3dsmax→Unityへの出力関係をまとめていきます。
それでは今回はこの辺で
(´・ω・`*)ノシ