Character animation

Full-Body IK

フルボディIK

複数の目標に合わせて全身姿勢を調整する。

2 / 10

Interactive demo

Preparing the demo…

Full-Body IK

Drag to orbit, Ctrl/⌘ + scroll to zoom. Use two fingers on touch screens.

This explanation is currently available in Japanese.

ひとことで

両手・両足・頭など複数の目標を同時に満たすように、手足だけでなく腰や背骨も含めた全身の姿勢を調整する方法です。腕を伸ばすだけでは届かない場所の物を拾うとき、人は腰を落とし、背中を曲げ、体ごと近づきます。フルボディ IK は、この「体全体で合わせる」動きを計算で作ります。

ゲームでの使いどころ

  • 物を拾う・置く:床の物、低い棚、高い棚に手を伸ばす動作を、1 つのアニメーションと IK で様々な高さに合わせる。
  • 環境とのインタラクション:壁に手をついて寄りかかる、はしごや崖をつかんで登る、障害物を乗り越える。
  • VR のアバター:頭と両手(ヘッドセットとコントローラー)の 3 点だけから、全身の自然な姿勢を推定する。
  • 物理的な反応:押されたときに、両足を地面につけたまま上体でこらえる。

Unity の Final IK(FBBIK)、Unreal の Full Body IK / Control Rig などが代表的な実装です。

しくみ

全身を「骨のつながり(木構造)」と「目標(エフェクタ)」の集まりとして扱い、すべての目標にできるだけ近づく姿勢を探します。代表的な考え方は次のとおりです。

  1. 体幹(腰と背骨)を先に動かす:各エフェクタについて、手足の長さだけでは届かない分(不足)を求め、それを打ち消す方向へ腰を動かし、背骨を曲げます。複数の目標から引っ張られる力を平均するので、両手で低い物をつかむなら「前かがみ+しゃがむ」になります。
  2. 制約を守る:
    • 足を地面から離さない:腰と足の目標の距離が、脚の長さを超えないようにします。
    • 倒れない:腰(重心)が両足の支える範囲から大きく外れないようにします。前に体を倒すほど、腰を後ろへ引いて釣り合いをとります。
    • しゃがめる深さ・背骨の曲がる角度に限界を設ける。
  3. くり返す:1 と 2 を数回くり返して、体幹の姿勢を収束させます。
  4. 手足を解く:最後に、各手足を2 ボーン IKで目標に合わせます。

本格的な実装では、全身を FABRIK の拡張(複数の末端を持つ木構造)で解く方法、ヤコビ行列を使った最適化、位置ベースの拘束として解く方法などがあります。

実装のポイント

  • 優先度と重み:「足は必ず地面に」「手はできれば目標に」のように、エフェクタごとに重みをつけます。届かないときは、重みの低い目標をあきらめます。
  • 元の姿勢からの差を小さく:IK は答えが無数にあるので、元のアニメーションの姿勢にできるだけ近いものを選ぶ(元の姿勢に引き戻す弱い力を入れる)と、不自然な姿勢になりにくくなります。
  • フレーム間でなめらかに:目標が少し動いただけで姿勢が大きく変わらないよう、前のフレームの結果から始める、変化量を制限する、などの工夫をします。
  • しゃがみの深さの限界:膝や股関節には曲がる限界があるので、腰を下げすぎないよう高さの下限を設けます。

つまずきやすい点

  • 全部を一度に満たそうとしない:届かない目標があるのに無理に解くと、全身が不自然にねじれます。届く範囲を事前に判定し、届かなければ別のアニメーションに切り替えることも考えます。
  • 重心の見落とし:腰を手の方へ動かすだけだと、体が前へ倒れ込んだような姿勢になります。重心が足の上にあるかを必ず確かめます。
  • 計算コスト:反復が多いと重くなるので、主役のキャラクターだけに使い、遠くのキャラクターは手足の IK だけにする、といった使い分けをします。

デモで試すこと

  1. 両手の目標(黄)は、低い位置にあるボールの左右です。全身モードでは、腕を伸ばすだけでは届かないので、腰を落とし背中を曲げてボールを抱えます。
  2. 「解き方」を「手足だけ」にすると、腕だけで届こうとして届かず、赤い点線で届いていない距離が表示されます。
  3. 手の目標を高く上げると、腰は元の高さに戻ります。遠くへ動かすと、背中の傾きが大きくなります。
  4. 足の目標(青)を前後に動かすと、腰の位置(重心)もそれに合わせて移動します。「反復回数」を 1 にすると、目標への合わせ方が不十分になります。

References

Unreal Engine IK Rig Solvers ↗

A general reference for this subcategory.