ルートモーション

Unreal Engine 4 内でルートベースのアニメーションを処理する方法

Choose your operating system:

Windows

macOS

Linux

通常、インゲームのアニメーションでは、キャラクターのコリジョン カプセル (またはその他の形状) は、シーンを通してコントローラーによって操作されます。カプセルからのデータは、その後アニメーションを動かすために使用されます。例えばカプセルが前進している場合、キャラクターが独力で移動している様子を作成するために、システムはキャラクターに対してランニング、または歩行のアニメーションを再生することを把握しています。しかしこのタイプの動きが全ての状況で常に理想的とは言えません。ある状況では、複雑なアニメーションがコリジョン カプセルを実際に動かすことが理にかなっていて、その逆は該当しません。このような状況で、 ルートモーション処理 はゲームにとって重要な課題となります。

例えば、前に飛び出す動作を事前にメッシュにアニメートしたプレイヤーからの特殊攻撃を考えてみてください。キャラクター モーションが全てプレイヤー カプセルに基づいている場合、こうしたアニメーションではキャラクターはカプセルの外側へ出されてしまい、事実上コリジョンが消滅してしまいます。アニメーションの再生が終わると、プレイヤーはコリジョン位置に戻ります。通常カプセルは全ての演算の中心となるため、これは厄介な問題です。カプセル外のキャラクターは、ジオメトリを通過し、適切に反応しません。加えて、アニメーションの最後にキャラクターがカプセルへ戻るのは現実的ではありません。

このコンセプトになじみがないユーザーは、説明を読んだだけでは適切なルートモーションが何故重要なのか簡単に理解できないかもしれません。以下のアニメーションキャラクターは、前へ飛び出してハンマーをたたきつける動作を事前にアニメートした攻撃を行います。キャラクターが前進移動しているアニメーションはゲームで処理していないことに留意してください。アニメーション アーティストがあえてこのように作成しました。

ルートモーションの別の例は、 アニメーション コンテンツ サンプル のセクション 1.9 のページをご覧ください。

ルートモーションとは?

簡単に言うと、ルートモーションはスケルトンのルートボーンのアニメーションに基づくキャラクターの動作です。ほとんどのインゲームのアニメーションは、キャラクターのルートが静止したままのサイクルを介して処理されます。しかし、上記の例のように必ずしもこれ該当するわけではありません。これを処理するために、ルート モーションをキャラクターから取り除き、代わりにそれをキャラクターのカプセルに適用します。これは UE4 でルートモーションが何を行うかの本質を示しています。

ルートモーションを適切に使用するには、キャラクターのルートボーンが原点 (0,0,0 回転なし) にあることが重要です。こうすることで、システムがアニメートされた動き (キャラクター) から物理的な動き (カプセル) を隔離できるようになります。

アニメーションのルートモーションは再生中に表示することができます。ルートボーンが動いているいずれかのアニメーションを開いて、ビューポートで [Show > Bones] を選択します。アニメーションのプロパティで Enable Root Motion を選択しなかった場合は、キャラクターのルートが動くと赤い線が表示されます。これはアニメーションのルートモーションを示しています。

RootMotionBone.png

ルートモーションを有効にすると、赤い線は消えます。代わりにキャラクターが所定の位置に移動します。これは、キャラクターのルートがオリジナルの位置から移動しなくなるためです。この画像ではキャラクターのルートモーションを有効にしています。上記の画像と同一フレームですが、キャラクターの位置は変化していないことに注意してください。

RootMotionAppliedBone.png

これは何を意味するのでしょうか?システムはキャラクター アニメーションのルートモーションを考慮しているため、キャラクターのコリジョン カプセルへ同じモーションを再び適用できるようになりました。つまり、アニメーターが意図したモーションと全く同じ動作をさせることも出来ますが、ゲーム内のコリジョンやその他の物理およびゲームプレイ イベントに対して適切に反応することもできるようになりました。 動作中のルートモーション セクションに説明があります。

ルート モーションを有効にする

ルートモーションは、 アニメーション エディタ [Asset Details (アセットの詳細)] パネル内で アニメーション シーケンス のために有効にすることができます。

RootMotion_AssetDetailsOptions.png

ルート モーションはアニメーション シーケンス毎に処理されるようになり、アニメーション シーケンスの [Asset Details (アセットの詳細)] パネルでオン、オフを切り替えることができるようになりました。ただし、ネットワーク ゲームでは、ルートモーションはいまだに Animation Montage を使用する必要があります。以下の Root Motion from Montages Only をご覧ください。

プロパティ

説明

Enable Root Motion

オンの場合、 ルートモーションの抽出ができます。

Root Motion Root Lock

ルートモーション抽出時に指定した位置にルート ボーンをロックします。( Ref Pose :リファレンスポーズのルートボーン位置を使用、 Anim First Frame :最初のフレームでのルートボーン位置を使用、 Zero : フレーム 0 でのルートボーン位置を使用)

Force Root Lock

ルートモーションが無効であっても、ルートボーンのロックを強制します。

Use Normalized Root Motion Scale

有効にした場合、抽出したルートモーションに正規化したスケール係数を使用します。FVector(1.0, 1.0, 1.0)

ルート モーションをアニメーション シーケンス内で有効にするか否かを定義する一方で、それが アニメーション ブループリント 内でどのように処理されるかを決める必要があります。Animation ブループリント内でルート モーションを処理可能にするいくつかの方法があります。アニメーション ブループリント エディタの [Details] パネルの Root Motion Mode ドロップダウン メニューから設定できます。

RootMotionMode.png

オプションは以下の通りです。

プロパティ

説明

No Root Motion Extraction

ルート モーションがそのまま残されます (ルート ボーンに適用されます)。

Ignore Root Motion

ルート モーションが抽出され (かつルート ボーンから削除され) ますが、キャラクターには適用されません。

Root Motion from Everything

以下を参照

Root Motion from Montages Only

以下を参照

Root Motion from Everything

このオプションが、ルート モーション モードとして設定される場合、最終的なキャラクターのポーズに寄与する各アニメーション アセット (シークエンス、ブレンドスペース、モンタージュなど) では、ルート モーションが抽出されます (ただし、ルート モーションを含むものとして設定されていた場合)。抽出された各ルート モーションは、ソース アセットのポーズに寄与する重みに基づいてブレンドされます。

以下のようなことが可能です。

FromEverything.png

上図では Jog_Loop_Fwd_RM Jog_Loop_Right_RM のルート モーションは、それぞれ 0.5 の重みでブレンドされます。その結果、アニメーションでキャラクターは斜め前に走り、マップを横切ることになります。

Root Motion from Montages Only

この方法は、ネットワーク ゲームを念頭に設計されました。そのため、機能に制限があります。 Root Motion from Everything は制約がないように設計されているため、アニメーションがネットワーク上でレプリケートされることがないようなゲームに限り使用することをお勧めします。

動作中のルートモーション

以下に、ルートモーションなしのアニメーションの問題、そしてアニメーションにルートモーションを適用するメリットを分析していきます。

ルートモーションなしのアニメーション

ルートモーションなしのアニメーションは、ご覧のとおりキャラクターをカプセルから引き離すようなアニメーションとなります。カプセルの位置に不自然に急速に戻っていることに気がつくかもしれません。これはアニメーションの再生が終わると、キャラクターのコントローラーが元の位置にキャラクターを引き戻すために生じます。

カプセルからの分離が問題になる理由

ここで対処するのは、キャラクターが突然カプセルへ戻る問題のみではありません。キャラクターはコリジョン形状を離れているため、ワールドのオブジェクトを通過して全体的な継続性がなくなっています。この例では、キャラクターの攻撃によって壁を通り抜けて戻っているのがわかります。

ルートモーション処理による問題の解決

アニメーションにルートモーションの使用を設定すると、アニメーターが設定した動作が一時的にカプセルの駆動力となります。これにより、アニメーションの終了点から再生を続けることができます。2 回目に攻撃がトリガーされると、新しい位置からの攻撃が開始するのが分かります。もちろん、最初に向きを変えたためカメラから逸れてはいません。

ルートモーションと物理

カプセルがついていくということは、物理コリジョンが引き続き使用可能で、キャラクタが壁をすり抜けてしまう問題を解決し、キャラクタがカプセル位置に急に戻ってしまう問題も解決できます。以下の画像では、アニメーションはルート モーションを使っており、カプセルを伴うためキャラクターは壁を完全には通過せずにぶつかります。

完全ではないのは、キャラクターのブレンドするアニメーションによって、幾分壁を通り抜けてしまうからです。しかし、この問題は壁かキャラクターどちらかのコリジョン ボリュームと連携することで簡単に対処することができます。重要な点は、カプセルがモーションから遅れずに対応していて、キャラクターが壁を突き抜けたり急激にカプセルへ戻ったりしないことです。

ルートモーション中にキャラクターの物理ステートが考慮されています。例えばキャラクターの物理ステートが Walking または Falling の場合、ルートモーションの Z 軸は無視されて、重力が適用されます。キャラクターは落下するか、坂を下るか、もしくは階段を上ります。キャラクターの物理ステートが Flying の場合、ルートモーションが完全に適用されて、重力は無視されます。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる