ひとことで
たくさんの関節がつながった鎖の先端を目標に届かせる IK を、「先端から根元へ」と「根元から先端へ」の 2 方向に、関節の位置を骨の長さに合わせて直していくことで解く方法です。Aristidou と Lasenby が 2011 年に発表しました。角度や行列の計算をせず、点と距離だけで解けるので、実装が簡単で速く、結果もなめらかです。
ゲームでの使いどころ
- 触手・しっぽ・首:タコの触手、ドラゴンの首やしっぽ、ロボットアーム、ヘビの体を目標に向けて伸ばす。
- ロープや鎖の端をつかむ:ぶら下がった鎖の先を手で引っ張る、クレーンのアームを伸ばす。
- 背骨や指:多関節の背骨を曲げて視線や狙いを合わせる、指を物の形に沿わせる。
- フルボディ IK の土台:木構造(枝分かれ)にも拡張でき、複数の目標を持つ全身の IK にも使われます。
しくみ
関節の位置を (根元)〜 (先端)、各骨の長さを 、目標を とします。
- 届くかどうか:根元から目標までの距離が骨の長さの合計より長ければ、鎖をまっすぐ目標の方へ伸ばして終わりです。
- 後ろ向きの処理:先端 を目標 に置きます。次に を、「 から への向きを保ったまま、距離がちょうど になる位置」へ移します。これを根元まで順にくり返します。
この時点で、根元 は元の位置からずれて(浮いて)います。
- 前向きの処理:根元 を元の位置に戻し、今度は先端に向かって同じように直します。
今度は先端が目標からずれます。
- くり返す:先端が目標に十分近づくまで(または決めた回数)2 と 3 をくり返します。多くの場合、数回で収束します。
最後に、各骨が隣の関節を向くよう回転を設定します。
実装のポイント
- 前のフレームの結果から始める:関節の位置を毎フレーム保持し、そこから解き始めると、動きが連続してなめらかになります(ウォームスタート)。
- 関節の角度制限:肘のように曲がる向きや角度に制限がある関節は、各ステップで関節の位置を許される円錐の中に押し込みます。
- 複数の目標(木構造):枝分かれした骨格では、各枝で後ろ向きの処理をして分岐点の位置を平均し、そこから前向きに処理します。
つまずきやすい点
- ねじれは扱えない:位置だけで解くので、骨の軸周りのねじれは決まりません。骨の向きを設定するときに、ねじれの基準(上方向)を別に与えます。
- 自然な姿勢とは限らない:解は目標に届くことだけを保証します。人の腕や背骨に使う場合は、角度の制限や、元のアニメーションへ戻す力が必要です。
- 目標がほぼ真後ろ:根元の真後ろなど、鎖が大きく折り返す必要がある目標では、収束が遅くなることがあります。
デモで試すこと
- 3 本の触手が、黄色い目標に向かって伸びます。「目標を自動で動かす」をオフにして、目標をドラッグしてみてください。
- 「1 回目の後ろ向きの結果を表示」をオンにすると、赤い点線が、先端を目標に置いてから根元へ向かって直した直後の形です。根元が台から浮いているのが分かります。
- 「往復の回数」を 1 にすると、目標から少しずれることがあります。回数を増やすと先端がぴたりと目標に合います。左下は実際に何回で収束したかです。
- 「関節の数」を変えると、少ない関節ではカクカクと、多い関節では柔らかな曲線で目標に届きます。