キャラクター・アニメーション

ルートモーション

Root Motion

アニメーションのルート移動で本体を進める。

5 / 10

インタラクティブデモ

デモを準備しています…

ルートモーション

ドラッグで視点を回転、Ctrl(⌘)+ スクロールでズーム。タッチ操作は 2 本指です。

ひとことで

アニメーションの中に含まれている「体全体がどれだけ前へ進んだか・向きを変えたか」(ルートの移動)を取り出し、それをそのままキャラクター本体の移動に使う方法です。プログラムで決めた速さで本体を動かし、アニメーションはその場で再生する方式と比べて、足の運びと移動が必ず一致するので、足が地面の上を滑りません。

ゲームでの使いどころ

  • 歩き出し・止まり・方向転換:加速や減速の具合がアニメーターの付けた動きどおりになり、足が滑らない。
  • 攻撃・回避・よじ登り:踏み込み斬り、ローリング回避、段差の乗り越えなど、アニメーションで表現した移動量をそのまま使いたい動作。
  • カットシーンとゲームプレイの接続:演出で作った移動をそのままゲーム内の位置に反映できる。
  • [モーションマッチング](/keywords/simulation/animation/motion-matching/):データベースの動きの移動量で本体を動かすのが前提です。

Unity の「Apply Root Motion」、Unreal の「Root Motion from Everything」などで有効にできます。

しくみ

アニメーションの骨格には、足元(地面)の位置を表すルートボーンがあります。

  1. ルートの移動を取り出す:毎フレーム、ルートボーンの前のフレームからの移動量(平行移動と、鉛直軸周りの回転)を求めます。
  2. アニメーションからは取り除く:その移動量を骨格の姿勢からは差し引き、アニメーションは「その場」で再生します。
  3. 本体に適用する:取り出した移動量を、キャラクターの向きに合わせて回転してから、本体(キャラクターコントローラーや物理のカプセル)の移動として加えます。

ルートボーンの動きがない(または信頼できない)アニメーションでは、着地している足の動きを打ち消すように本体を動かすことで、移動量を推定することもできます。足が地面に固定されていれば、アニメーションの中でその足が後ろへ動いた分だけ、体は前へ進んでいるはずだからです。デモはこの方法で移動量を求めています。

一方、その場再生 + プログラムの移動では、本体の速さはゲームのコードが決め(例えば一定の速さ)、アニメーションはその場で再生されます。歩き出しでは足がゆっくり出ているのに本体は最初から速く進み、止まるときはアニメーションが止まっているのに本体が進み続けるので、足が滑ります。

実装のポイント

  • 物理・衝突との組み合わせ:ルートモーションの移動は「動きたい量」として、キャラクターコントローラーに渡し、壁や段差との衝突はコントローラー側で処理します。
  • 操作性とのバランス:ルートモーションだけに頼ると、入力してから動き出すまでアニメーションに縛られ、操作が重く感じられます。プレイヤーの移動はプログラムで決め、足の滑りはフットロックや再生速度の調整で隠す、という折衷も一般的です。
  • ネットワーク:ルートモーションはアニメーションの再生状態に依存するので、サーバーとクライアントで同じ結果を得るには、アニメーションの時間を同期する必要があります。
  • ブレンド中の移動:2 つのアニメーションを混ぜているときは、ルートの移動量も同じ重みで混ぜます。

つまずきやすい点

  • ルートボーンが動いていない:アニメーションがその場で作られている(In Place)と、取り出す移動量がありません。制作時にルートボーンに移動を入れておきます。
  • 腰の揺れまで本体に移してしまう:腰の左右の揺れをルートの移動として扱うと、本体(カメラ)まで揺れます。ルートの移動は水平成分と向きだけにし、揺れはアニメーション側に残します。
  • フレームレートによる誤差:移動量をフレームごとに積み重ねるので、固定タイムステップでないと、長い距離でわずかにずれることがあります。

デモで試すこと

  1. 2 人とも、「歩き出す → 歩く → 止まる → 立ち止まる」同じアニメーションを再生しています。右下のグラフの青がアニメーションの想定する速さ、緑が左の人物に与えた一定の速さです。
  2. 左(その場再生 + 一定速度)は、歩き出しと止まる瞬間に、足が地面の上を黄色い線のように滑ります。止まってからも、足を着いたまま前へ進んでいきます。
  3. 右(ルートモーション)は、着地した足が足跡(赤)の上から動かず、左下の「滑り」はほぼ 0 cm のままです。
  4. 「再生速度」を下げると、足の滑りの違いがよく見えます。

参考資料

Unreal Engine IK Rig Solvers ↗

分野全体の資料で、この項目を直接扱っているとは限りません。