Version: 2021.3
IK
チュートリアル:マニュアルでのルートモーションのスクリプティング

ルートモーションの仕組み

ボディトランスフォーム

ボディトランスフォーム (Body Transform) とはキャラクターの重心です。これは Mecanim のリターゲティングエンジンに使用され、最も安定したディスプレースメントモデルを提供します。ボディの向きは下半身と上半身のボディの向きの平均で、アバターの T ポーズに対して相対的です。

ボディトランスフォームとボディの向きは アニメーションクリップ に格納されます (アバターに設定した マッスルの設定 を使用します)。アニメーションクリップ に格納されるワールド座標系のカーブはこれらだけです。これら以外のマッスルカーブと IK ゴール (手と足) は ボディトランスフォームに対して相対位置で格納されます。

ルートトランスフォーム

ルートトランスフォーム (Root Transform) は ボディトランスフォームを Y 平面上へ投影したもので、ランタイムに算出されます。ルートトランスフォームの変化は 1 フレーム毎に計算されます。そのトランスフォームの変化をゲームオブジェクトに適用する事で、オブジェクトが移動します。

キャラクター下の円はルートトランスフォームを表します
キャラクター下の円はルートトランスフォームを表します

アニメーションクリップインスペクター

アニメーションクリップエディターの設定 (Root Transform RotationRoot Transform Position (Y)Root Transform Position (XZ)) を使ってボディトランスフォームの投影であるルートトランスフォーム (Root Transform) を制御できます。これらの設定によって、ボディトランスフォームのいくつかは ルートトランスフォームに転送されます。例えば、動作の Y 位置をルートモーション (軌道) の一部とするか、ポーズ (ボディトランスフォーム) の一部とする (Bake into Pose) かは、自由に決められます。

Root Transform Rotation

Bake into Pose: 向きは ボディトランスフォーム (またはポーズ) に従います。ルートの向きは一定で、差分の向きは同一です。つまり、アニメーションクリップ によってゲームオブジェクトが回転されることはありません。

似た開始および終了のルート向きをもったアニメーションクリップのみでこのオプションを使用すべきです。UI 上の緑のライトによって、その アニメーションクリップ が適応するかが分かります。適する候補は真っ直ぐな歩行や走行などです。

Based Upon: これによりクリップの向きを設定できます。 Body Orientation を使用すると、クリップはボディの前方ベクトルに従います。このデフォルト設定は、たいていのモーションキャプチャ (Mocap) データ、すなわち歩く、走る、ジャンプでは正しく機能しますが、機銃掃射 (航空機から地上に向かって射撃を行う) のようにボディの前方ベクトルに対して直角の場合は正しく機能しません。このような場合は、Offset 設定を使って手動で向きを調整できます。Original を使うと、インポートしたクリップに対して指定したオフセットの値を自動的に加えます。これらは通常、キーフレームつきのデータで使用され、アーティストが設定したとおりの向きにします。

Offset: Based Upon によりオプションが有効となっている場合、オフセットを入力します。

Root Transform Position (Y)

ここでも、Root Transform Rotation の説明と同じ考え方を適用します。

Bake Into Pose: モーションの Y コンポーネントは ボディトランスフォーム (ポーズ) に従います。Root Transform の Y コンポーネントは一定で、差分の Root Position Y は 0 になります。すなわち、このクリップによってゲームオブジェクトの高さは変更されません。再び UI 上の緑のライトによって、このクリップは、Y モーションをポーズにベイクするのに適切かどうかが示されます。

ほとんどの AnimationClip でこの設定は使用可能です。ゲームオブジェクト の高さを変更するクリップ (例えば上下にジャンプする場合など) にのみ、これを無効にすべきです。

注意: Animator.gravityWeight は Bake Into Pose の Y 位置により決定されます。有効にする場合は gravityWeight = 1、無効にする場合は disable = 0 となります。gravityWeight はステート間を移動する場合のみブレンドされます。

Based Upon: Root Transform Rotation と同様に、Original または Mass Center (Body) から選択できます。さらに Feet オプションがあり、高さが変わる (Bake Into Pose が無効) アニメーションクリップ では便利です。Feet を使用するとき Root Transform Position Y はすべてのフレームでもっとも低い足の Y と一致します。したがってブレンドされる場所は足の付近にあり、ブレンドや遷移のときに宙に浮いてしまう問題を回避できます。

Offset: Root Transform Rotation と同様に、 Offset 設定によって、アニメーションクリップ の高さを手動で調整できます。

Root Transform Position (XZ)

ここでも、Root Transform RotationRoot Motion Position (Y) と同じ考え方を適用します。

Bake Into Pose は一般にアイドル状態で、差分の Position (XZ) を 0 にしたい場合に使用されます。何度も評価を繰り返すことが原因で生じる値の小さな差分が蓄積されることを防止します。また Based UponOriginal となっているキーフレームつきのクリップに使用し、アーティストが設定した位置を強制的に設定します。

Loop Pose

Loop Pose は、ブレンドツリーまたは遷移の際のポーズのブレンドのように、ルートトランスフォームを参照して発生します。ルートトランスフォームを算出すると、ポーズはそれに相対的に反応します。開始と終了フレームの間の相対的なポーズの差分は算出され、Clip の 0–100% の範囲に分配されます。

ジェネリックなルートモーションとループポーズ

これは本質的にヒューマノイドルートモーションと同様の働きをしますが、ルートトランスフォームを算出/予測するためにボディトランスフォームを使用するのではなく、ルートノード に設定されているトランスフォームが用いられます。ポーズ (ルートモーションのボーンの下位で変化するボーン) は ルートトランスフォームに対して相対的となります。

IK
チュートリアル:マニュアルでのルートモーションのスクリプティング