ひとことで
両手・両足・頭など複数の目標を同時に満たすように、手足だけでなく腰や背骨も含めた全身の姿勢を調整する方法です。腕を伸ばすだけでは届かない場所の物を拾うとき、人は腰を落とし、背中を曲げ、体ごと近づきます。フルボディ IK は、この「体全体で合わせる」動きを計算で作ります。
ゲームでの使いどころ
- 物を拾う・置く:床の物、低い棚、高い棚に手を伸ばす動作を、1 つのアニメーションと IK で様々な高さに合わせる。
- 環境とのインタラクション:壁に手をついて寄りかかる、はしごや崖をつかんで登る、障害物を乗り越える。
- VR のアバター:頭と両手(ヘッドセットとコントローラー)の 3 点だけから、全身の自然な姿勢を推定する。
- 物理的な反応:押されたときに、両足を地面につけたまま上体でこらえる。
Unity の Final IK(FBBIK)、Unreal の Full Body IK / Control Rig などが代表的な実装です。
しくみ
全身を「骨のつながり(木構造)」と「目標(エフェクタ)」の集まりとして扱い、すべての目標にできるだけ近づく姿勢を探します。代表的な考え方は次のとおりです。
- 体幹(腰と背骨)を先に動かす:各エフェクタについて、手足の長さだけでは届かない分(不足)を求め、それを打ち消す方向へ腰を動かし、背骨を曲げます。複数の目標から引っ張られる力を平均するので、両手で低い物をつかむなら「前かがみ+しゃがむ」になります。
- 制約を守る:
- 足を地面から離さない:腰と足の目標の距離が、脚の長さを超えないようにします。
- 倒れない:腰(重心)が両足の支える範囲から大きく外れないようにします。前に体を倒すほど、腰を後ろへ引いて釣り合いをとります。
- しゃがめる深さ・背骨の曲がる角度に限界を設ける。
- くり返す:1 と 2 を数回くり返して、体幹の姿勢を収束させます。
- 手足を解く:最後に、各手足を2 ボーン IKで目標に合わせます。
本格的な実装では、全身を FABRIK の拡張(複数の末端を持つ木構造)で解く方法、ヤコビ行列を使った最適化、位置ベースの拘束として解く方法などがあります。
実装のポイント
- 優先度と重み:「足は必ず地面に」「手はできれば目標に」のように、エフェクタごとに重みをつけます。届かないときは、重みの低い目標をあきらめます。
- 元の姿勢からの差を小さく:IK は答えが無数にあるので、元のアニメーションの姿勢にできるだけ近いものを選ぶ(元の姿勢に引き戻す弱い力を入れる)と、不自然な姿勢になりにくくなります。
- フレーム間でなめらかに:目標が少し動いただけで姿勢が大きく変わらないよう、前のフレームの結果から始める、変化量を制限する、などの工夫をします。
- しゃがみの深さの限界:膝や股関節には曲がる限界があるので、腰を下げすぎないよう高さの下限を設けます。
つまずきやすい点
- 全部を一度に満たそうとしない:届かない目標があるのに無理に解くと、全身が不自然にねじれます。届く範囲を事前に判定し、届かなければ別のアニメーションに切り替えることも考えます。
- 重心の見落とし:腰を手の方へ動かすだけだと、体が前へ倒れ込んだような姿勢になります。重心が足の上にあるかを必ず確かめます。
- 計算コスト:反復が多いと重くなるので、主役のキャラクターだけに使い、遠くのキャラクターは手足の IK だけにする、といった使い分けをします。
デモで試すこと
- 両手の目標(黄)は、低い位置にあるボールの左右です。全身モードでは、腕を伸ばすだけでは届かないので、腰を落とし背中を曲げてボールを抱えます。
- 「解き方」を「手足だけ」にすると、腕だけで届こうとして届かず、赤い点線で届いていない距離が表示されます。
- 手の目標を高く上げると、腰は元の高さに戻ります。遠くへ動かすと、背中の傾きが大きくなります。
- 足の目標(青)を前後に動かすと、腰の位置(重心)もそれに合わせて移動します。「反復回数」を 1 にすると、目標への合わせ方が不十分になります。