Language:
Page Info
Engine Version:

ルート モーション

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

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

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

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

ルートモーションとは?

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

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

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

RootMotionBone.png

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

RootMotionAppliedBone.png

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

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

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

RootMotion.png

アンリアル エンジンのバージョン 4.5 以前は、ルート モーションを定義するために、AnimationMontage を使用する必要がありました。バージョン 4.6 以降では、ルート モーションはアニメーション シーケンス毎に処理されるようになり、ペルソナのアニメーションのプロパティでオン、オフを切り替えることができるようになりました。 ただし、ネットワーク ゲームでは、ルートモーションはいまだに Animation Montage を使用する必要があります。以下の Root Motion from Montages Only をご覧ください。

ルート モーションをアニメーション シーケンス内で有効にするか否かを定義する一方で、それが アニメーション ブループリント 内でどのように処理されるかを決める必要があります。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_RMJog_Loop_Right_RM のルート モーションは、それぞれ 0.5 の重みでブレンドされます。その結果、アニメーションでキャラクターは斜め前に走り、マップを横切ることになります。

Root Motion from Montages Only

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

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

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

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

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

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

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

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

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

ルートモーションと物理

カプセルがあるということは、物理コリジョンをなおも使用可能であることを意味します。キャラクターが壁を通り抜ける問題、およびキャラクターがカプセル位置に素早く戻る必要がある問題も緩和します。以下の画像では、アニメーションはルート モーションを使っており、カプセルを伴うためキャラクターは壁を完全には通過せずにぶつかります。

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

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