Metlivi ブログ

キャラクターの体を動かしながらIKの足ターゲットを固定する方法

IKの足を固定するには、キャラクターの体のコントロールを動かす間、各足ターゲットのワールド位置を一定に保ちます。動く体と固定されたターゲットの間の関節は、レッグソルバーに調整させます。ターゲットが体の動きを継承する場合は、そのトランスフォームの親子関係を分離するか、IKの計算前に動きを補正します。

このガイドは、体を上下させたり、傾けたり、移動させたりしながら、両足を同じ位置に保ちたいリグ付きバーチャルキャラクターのポーズを作る人向けです。以下のワークフローでは、文書化されたトランスフォームとIKの挙動を、実践的な診断手順と組み合わせています。具体例として、UnityとGodotの用語を使用します。

2026年10月29日読了まで7分Metlivi Editorial Team
セクション 1

足ターゲットが体と一緒に動くのはなぜですか?

ローカル座標が変わっていなくても、ターゲットがシーン内を移動することがあります。ローカルトランスフォームはオブジェクトの親に対する相対位置を表すため、祖先ノードを動かすと子ノードのワールドトランスフォームも変わります。Godotでは、transformとglobal_transformによってこの違いが説明されています。3Dトランスフォームの使用 — Godot Engine

まず足ターゲットのコントロールを表示し、体を少し横に動かします。見えている足とは別に、ターゲットを観察してください。ターゲットが体と一緒に動く場合は、その祖先ノードを調べます。骨盤、体のコントロール、または別の移動グループの下に置かれている可能性があります。

ローカル位置のフィールドだけでセットアップを判断しないでください。移動の前後でターゲットのワールド位置を記録します。これにより、「ターゲットが意図した位置から外れたのか」と「固定されたターゲットに脚が追従できなかったのか」という2つの問題を切り分けられます。

セクション 2

体と足のコントロールはどのように整理すればよいですか?

体の動きと、固定する足ターゲットには別々のコントロールブランチを使います。実用的な構成では、スケルトンと体のコントロールを一方のブランチに置き、左右の足ターゲットを、動かさないシーンコントロールの下にある別のブランチに配置します。重要なのは、操作する体のコントロールによってターゲットのブランチが動かないことです。

キャラクター全体を操作する共通のコントロールに両方のブランチを含めることもできます。ただし、その下にある体だけを動かす場合に限ります。全体コントロールを動かせば、両方のブランチが動きます。コントロールを選ぶ前に、操作の目的が「固定した足の上で体を移動する」ことなのか、「キャラクター全体を移動する」ことなのかを決めてください。

アプリケーションがトランスフォームの継承を個別に設定できる場合は、それも選択肢になります。たとえばGodotのNode3D.top_levelを設定すると、ノードは親のトランスフォームを継承しなくなります。これは文書化されたトランスフォーム機能であり、それ自体がIKソルバーを設定するわけではありません。Node3D — Godot Engine

ターゲットの親や継承モードを変更する場合は、現在のワールドポーズを維持してください。まずワールド位置と向きを記録し、関係を変更した後、そのポーズに戻します。その後、再び体を動かす前に結果を確認してください。

セクション 3

ターゲットを動く親の下に置く必要がある場合は?

固定したワールドポーズを別途記録し、親の現在のトランスフォームからターゲットに必要なローカルポーズを計算します。位置の関係は次のとおりです。ターゲットのローカル位置 = 親の現在のワールドトランスフォームの逆行列 × 保存したターゲットのワールド位置。Unityでは、InverseTransformPointを使ってワールド座標をローカル座標に変換できます。Transform.InverseTransformPoint — Unity

平行移動のみの簡単な例を考えてみましょう。ワールドX = 1.0の位置にターゲットを固定し、親の初期位置がX = 0.0だとします。このとき、ターゲットのローカルXは1.0です。親をX = 0.3に移動した後も、ターゲットをワールドX = 1.0に保つには、ローカルXを0.7にする必要があります。ローカルXを1.0のままにすると、ターゲットはワールドX = 1.3に移動します。

この引き算で対応できるのは、単純化した例だけです。親が回転またはスケールしている場合は、トランスフォーム全体の変換が必要です。UnityのTransformPointはローカル位置をワールド空間に変換し、スケールも含めます。そのため、位置の変換には方向ベクトルの演算ではなく、点に対する演算を使います。Transform.TransformPoint — Unity

足が接地状態になったときに、固定ポーズを記録します。体が動いている間は、保存した値を使い続けてください。ターゲットが動きを継承した後で再記録すると、ずれた位置を新しい基準として保存してしまいます。向きも固定する必要がある場合は、位置と同様にターゲットの向きも保存して変換します。

セクション 4

脚のIKがターゲットに追従するように設定するには?

大きくポーズを変える前に、ソルバーのチェーン割り当てを確認します。Unity Animation Rigging 1.4.1のTwo Bone IKでは、Root、Mid、Tipの各トランスフォーム、Target、および任意のHintを使います。2つのセグメントで構成される一般的なキャラクターの脚では、それぞれ股関節、膝関節、足首関節に対応します。Hintは曲がる方向を制御します。Two Bone IK — Unity Animation Rigging

初期テストでは、Constraint influenceとTarget position influenceを最大にします。Target rotation influenceは別に確認してください。Unityではこれらのウェイトは個別に設定できるため、位置への追従と向きの一致を分けてテストできます。Maintain Target Offsetを有効にすると、TipとTargetの間にある初期位置または向きの差が維持されます。Two Bone IK — Unity Animation Rigging

コンストレイントを有効にする前に、ターゲットを意図した足首のポーズに合わせます。意図的にオフセットを使う場合は、その意味を記録してください。初期オフセットが不明なままだと、後でターゲットとソルブ後の関節を比較しにくくなります。

HintまたはPoleコントロールを使って意図した膝の曲がり方を設定し、その後、体を少し動かします。テスト中はHintの配置を把握しやすい状態に保ってください。ターゲット、体、曲がる方向のコントロールを同時に変えると、予期しない結果の原因を特定しにくくなります。

セクション 5

両足を固定したまま、体はどこまで動かせますか?

ターゲットを固定しても、体がどの位置にでも届くわけではありません。関節の可動範囲に制限がなく、伸長もしない理想的な2セグメントチェーンの場合、脚の付け根からターゲットまでの距離は、|上側セグメントの長さ − 下側セグメントの長さ|以上、上側セグメントの長さ + 下側セグメントの長さ以下である必要があります。実際には、関節の可動制限によってその範囲が狭まることがあります。

セグメントの長さがそれぞれ0.45シーン単位のキャラクターを例にすると、幾何学的な最大到達距離は0.90単位です。腰が足首のターゲットより0.80単位高く、横に0.30単位離れている場合、その距離は√(0.80² + 0.30²)、およそ0.854単位です。これは理想的な範囲内です。横方向の距離を0.50単位にすると、およそ0.943単位となり、その範囲を超えます。

この計算を使うと、到達範囲の問題とトランスフォームの問題を区別できます。ターゲットが固定されているのにチェーンが届かない場合は、体の移動量を減らすか、両脚に合わせて体の位置を調整します。脚ごとに個別に評価してください。横方向に体を移動すると、一方のターゲットには近づき、もう一方からは遠ざかることがあります。

最初に動作を確認するポーズでは、両脚に曲がりが見える状態を保ち、控えめな動きからテストします。各脚が到達限界に近づく位置を確認してから、体の可動範囲を広げます。その範囲はリグごとに確認し、別のキャラクターの移動量をそのまま当てはめないでください。

セクション 6

足首だけでなく、足全体を固定するには?

リグにとって「固定」が何を意味するのかを決めます。足首のターゲットを静止させると関節位置は固定されますが、足には意図した向きも必要です。足裏の接地点と足首のピボットは別の基準点なので、コントロールを配置する際は、設計上のオフセットを維持してください。

診断には、足首の位置を固定したまま体だけを回転させる方法が有効です。かかととつま先を観察します。足首を軸に動く場合は、足の向きのコントロールと、独立したつま先のコントロールがあればそれも確認してください。このテストでは、ターゲットの位置と見た目上の接地を切り分けられます。

意図した固定時の向きも、位置と一緒に保存します。体の移動中は、その両方を保存したポーズと比較してください。Godotのトランスフォームのドキュメントでは、トランスフォームは原点と、向きやスケールを表す基底を組み合わせたものと説明されています。ポーズ全体を理解する際の参考になります。3Dトランスフォームの使用 — Godot Engine

セクション 7

滑りを再現可能な手順で診断するには?

以下の手順は、前述のトランスフォームとソルバーの挙動に基づく実践的な診断方法です。問題が再現する最小限の体の動きから始め、一度に1つの条件だけを変えてください。

観察結果 最初に確認すること 次の対応
ターゲットが体と一緒に動く 動かしている祖先ノードと継承トランスフォーム コントロールブランチを分けるか、保存したワールドポーズに戻す
ターゲットは固定されているが、足首が届かない チェーンの割り当て、位置の影響度、到達範囲 設定を確認してから、体の移動量を減らす
足首は固定されているが、かかとやつま先が動く 足の向きと接地オフセット 意図した固定時の向きに戻す
膝の曲がり方が予期せず変わる HintまたはPoleの配置 体を控えめに動かしながら、曲がる方向のコントロールを試す
ドラッグ操作と再生時で結果が異なる 各コントロールを書き換えるシステムとそのタイミング 再生中に評価されたトランスフォームを調べる

アニメーションまたはプロシージャルなセットアップでは、明示的な依存関係の順序を使います。まず体のポーズを決め、次に保存したターゲットを復元または変換し、その後で脚のIKを評価します。アプリケーションがこれらの処理をどの順序で実行するかを確認してください。コールバック名だけでは、その評価中にソルバーが更新済みのターゲットを読み取るとは限りません。

最後に、短いループでテストします。体を横に動かし、低くし、少し回転させて、開始時のポーズに戻します。その間、各ターゲットのワールドポーズを保存した基準値と比較してください。ターゲットが固定できたら、残りの調整項目が明確になります。体が動ける範囲、膝の曲がる方向の一貫性、意図した接地を保つために必要な足の向きです。

セクション 8

出典

関連記事

このテーマをさらに見る