未来を創る、テックコミュニティー

代表技術通信~Unityに舞い戻りでVR⑪

草場代表
2020/11/12

こんばんは。代表の草場です。

Unity LearnのIntroduction to 3D Animation Systemsの勉強です。Working with Assets です。

2.5 Setting the Root Motion of imported Animation Clips

1.概要

インポートしたアニメーションクリップの切り取りでは、標準化された開始ポーズでループするランアニメーションを作成しました。これを他のLocomotionアニメーションとブレンドして、より複雑なアニメーションを作成することができます。

2.始める前に

3Dアニメーションシステム入門Unityプロジェクトをダウンロードしておいてください。プロジェクトをダウンロードしたら
1. Unityエディタでプロジェクトを開き、プロジェクトウィンドウで、アセット > 2.5 Setting Root Motion of Imported Animation Clips(インポートしたアニメーションクリップのルートモーションを設定する)を選択します。

3.ルートモーションの紹介

ルートノードはアニメーションのルートモーションを定義するために使用されます。ルートモーションとは、アニメーションによってゲームオブジェクトが絶対的な動きをするのではなく、以前の位置からオフセットすることです。これは、単にスクリプトではなく、アニメーション自体に基づいた動きをすることができるので、動きをよりリアルに見せることができることを意味します。
しかし、これには欠点があります:アニメーションの動きはスクリプトの動きに比べて一貫性がありません。
ルートモーションを使うかどうかはケースバイケースで決める必要があります。今回は、ルートモーションを使用します。

4.現在のルートモーションを確認する

変更を行う前に、現在のルートモーションを確認する必要があります。ヒューマノイドアニメーションのルートモーションに焦点を当てます。ルートモーションの情報を確認するには、以下の手順に従います。

1. プロジェクトウィンドウで、HumanoidRunアニメーションクリップを選択します。インスペクタで、アニメーションタブがまだ選択されていない場合は、アニメーションタブを選択します。
2. 追加設定の折り目の上にある情報ボックスを見つけてください。

例を確認
この例のアニメーションでは、平均速度が(0.341, 0.034, 5.259)であり、角速度が3.1 deg/sであることがわかります。これは、このアニメーションがラン・アニメーションにふさわしくない3つのことをしていることを意味しています。
0.341 m/sの速度で右に傾いている。
0.034 m/sの速度で地面から上昇する。
3.1 deg/sの速度で右に曲がる。
これは理想的ではありません。これをゲームで使っていたら、キャラクターが大回りして実際には地面から離れてしまいます。
ルートモーションの要素をポーズに組み込むことで、これらの問題を解決することができます。これは、ルートモーションに全く影響を与えないことを意味します。

5.ルートローテーションの設定

ルートモーションが正しく設定されていないことがわかったので、正しく設定します。最初に取り組むべき問題は、ルートローテーションです。
ランアニメーションはキャラクターを直線的に移動させなければならないので、ルートローテーションはポーズに組み込まれている必要があります。
これを行うには、
1. インスペクタで、Root Transform Rotationの設定を見つけ、Bake Into Pose を有効にします。これで、平均角度 Y 速度が 0.0 deg/s であることがわかります。アニメーションが回らなくなったので、平均速度も変更されます。

6.ルートローテーションのソースを見直す

現在、Root RotationのソースはBody Orientationです。つまり、ルートローテーションは、キャラクターの胴体が向いている方向に基づいています。

ソースをオリジナルに変更することができます。これにより、インポートされたアニメーションの元の回転がルート回転のベースになります。しかし、この場合、いずれにせよキャンセルすることになるので、「Body Orientation」で構いません。
もしインポートしたアニメーションがヒューマノイドではなくジェネリックであれば、ボディオリエンテーションではなく、ルートノードのオリエンテーションを使用するオプションがあったはずです。これはジェネリックリグにはボディという概念がないからです。

7.Adjusting オフセット

ルートの回転オフセットは、アニメーションクリップの開始時のポーズからルートが回転する量です。
ルートモーションのソースを確認したので、アニメーションが円ではなく前方に回転するようにオフセットを調整します。これを行うには、以下のようにします。
1. インスペクタで、ルート回転オフセットの設定を見つけます。[Root Transform Rotation – Offset]プロパティ名をクリックし、Average Velocity Xの値が0になるまで右にドラッグします。このチュートリアルでランアニメーションの例を使用した場合は、オフセット値が 1.51 になるはずです。平均速度は、(0.000, 0.034, 5.277)になります。

ルートモーション情報には、新しい平均速度が表示されています。アニメーションが円ではなく、完全に前方に走るようになりました。

8.縦のルートモーションを焼く

アニメーションが地面から離れるのを止めるためには、垂直方向の動きをキャンセルする必要があります。そのためには、垂直方向のルートモーションをポーズに組み込む必要があります。以下のようにします。
1. インスペクタで、Root Transform Position (Y)の設定を見つけます。 Bake Into Pose を有効にします。これで、Average Velocity が 0 であることがわかるはずです。

また、垂直ルートモーションのソースを選択することもできます。先ほどと同じように、オリジナルを選択すると、インポートされたときのルートの位置をベースにしていることを意味します。
ヒューマノイドリグには、垂直方向のルートモーションを足や重心を基準にするオプションがありますが、ジェネリックリグにはこれらのオプションはありません。その代わり、ジェネリックリグには、ルートノードの位置をベースにするオプションがあります。
主に垂直方向の動きをするアニメーションでは、垂直方向の位置を足や質量の中心に置くなどのオプションを使いたい場合があるかもしれません。その場合は、アニメーションの残りの部分と一致するように、この動きをオフセットすることもできます。
垂直方向のルートトランスフォーム位置の設定が表示されます。Based Upon]プロパティには、[Original]、[Center of Mass]、[Feet]オプションが表示されます。

9.側根運動を見直す

ルートモーションオプションの最後のセットは、ラテラルルートモーションの設定です。これらはXZ平面内でのアニメーションの動きを制御します。

ラテラル・ルート・トランスフォームの位置の設定が示されています。
垂直方向にしか動かない、または全く動かないアニメーション(例えば、キャラクタがその場で回転しているようなアニメーション)のために、ラテラル・ルート・モーションをポーズに組み込むべきです。前述のように、これは元々インポートされたアニメーション、汎用リグの場合はルートノードの位置、ヒューマノイドリグの場合は質量の中心に基づいています。
ランアニメーションからすべてのルートモーションを無効にして、スクリプトを使って単純にコントロールしたい場合は、ラテラルルートモーションをポーズにベイクすることができます。この例のランアニメーションでは、ラテラル・ルートモーションをベイクしてはいけません。

10.まとめ

ルートモーションの基本的な原理と、アニメーションに使用するタイミングについて説明しました。
ルートモーションの設定を確認して、それが結果のアニメーションにどのように影響するかを理解できました。
アニメーションのルート回転を設定しました。
垂直方向と横方向のルートモーションをベイクするタイミングを特定しました。

次は、アニメーションクリップを完成させ、完全に機能するアニメーションを作成するための最終設定を探ります。

この記事を書いた人
草場代表
エディター