Reach の概念は、インバース キネマティクスとリターゲットの場合、わずかに異なります。
インバース キネマティクス ソルバを使用している場合、Reach により、キャラクタの元の FK スタンスと HIKEffectorSetState に定義するターゲット ポイントの間で、ブレンドが制御されます。
各エフェクタには、移動を制御する Reach 値と回転を制御する Reach 値の 2 つの Reach 値があります。
Reach Translation は、インバース キネマティクス ソルバによって生成されるジョイントの位置を元の FK 位置にするか、エフェクタの位置にするか、この両方の間の位置にするかを制御します。
Reach Rotation は Reach Translation によく似ていますが、インバース キネマティクス ソルバによって生成されるジョイントの回転により、元の FK ポーズからのジョイントの向き、エフェクタの向き、この両方の間の向きのどれを使用するかが制御されます。
Reach Translation と Reach Rotation を結合することにより、元の FK 位置と、シーン内の特定の場所や項目のいずれかに、キャラクタのジョイントを固定することができます。
エフェクタの Reach Translation 値と Reach Rotation 値の両方を最大値に設定した場合、インバース キネマティクス ソルバでは、キャラクタの新しいスタンスを計算するときに、ジョイントの元の位置と回転が考慮されません。この設定を使用すると、ゲーム内の項目または場所の位置と回転に、ジョイントを効果的に固定することができます。
エフェクタの Reach Translation 値と Reach Rotation 値の両方をゼロのままにした場合、インバース キネマティクス ソルバは、エフェクタの位置と回転が何であっても、対応するジョイントをエフェクタに向けて移動しようとしません。この設定を使用すると、元の位置と回転に、ジョイントを効果的に固定することができます。
ただし、どちらの場合も、他のジョイントの引き寄せのために、ジョイントが移動される可能性があることに注意してください。詳細は、「Pull」を参照してください。
HumanIK の一般的な用途の多くには、キャラクタの手足が特定のポイントに届くように、または特定の時間に特定の項目と相互に作用するように、アニメーションを徐々に調整することが含まれます。たとえば、ドアのノブをつかむために手を伸ばしているキャラクタです。
この状況に対する一般的な方法は、適切なエフェクタ(この場合は右手)のトランスレーションと回転を適切な最終位置に設定することと、Reach 設定をアニメートすること、そして各フレームで Reach 値を増加させることです。 最初のフレームでは、元のフォワードキネマティクス アニメーションを変更せずに、Reach 値をゼロから開始する必要があります。キャラクタの移動の最終フレームでは、Reach の制御が、キャラクタの手から最終ゴールまで描画して、最大値に達する必要があります。間の各フレームでは、Reach の制御は、ゴールに向けてスムーズな移動を生成し、ゼロと最大値の間を補間する値に設定される必要があります。
リターゲット ソルバを使用している場合、Reach により、ソース アニメーションとターゲット キャラクタの間の最も重要なコンタクト ポイントが判定されます。すなわち、3 次元空間の 2 つのキャラクタの間で同期される必要があるジョイントです、これらのコンタクト ポイントは、ヒップにあることもあれば、異なるサイズやスケールのキャラクタにアニメーションをリターゲットしている場合、足にあることもあります。デフォルトにより、HumanIK リターゲット ソルバでは、ソースとターゲットの間の接点として足が使用されます。
Reach 設定は、キャラクタの複数の異なるノードの位置と向きに対して設定することができます。リターゲット ソルバでは、これらのすべての Reach 設定の競合する要件のバランスが調整され、最終的に生成されるポーズを元のアニメーションの配置に合わせる方法が決定されます。異なる Reach 設定間のこのバランス調整により、コンタクト ポイントを徐々にブレンドすることができます。たとえば、上の例のキャラクタが立っているポーズで始まり、跳び上がって空中ブランコをつかむ場合、Reach 設定は足のコンタクト ポイントを優先に開始し、手のコンタクト ポイントの優先度を徐々に増やし移行する必要があります。そのとき、アニメーションは空中ブランコをつかむと考えられます。