Reach

Reach の概念は、インバース キネマティクスとリターゲットの場合、わずかに異なります。

インバース キネマティクス

インバース キネマティクス ソルバを使用している場合、Reach により、キャラクタの元の FK スタンスと HIKEffectorSetState に定義するターゲット ポイントの間で、ブレンドが制御されます。

各エフェクタには、移動を制御する Reach 値と回転を制御する Reach 値の 2 つの Reach 値があります。

Reach Translation

Reach Translation は、インバース キネマティクス ソルバによって生成されるジョイントの位置を元の FK 位置にするか、エフェクタの位置にするか、この両方の間の位置にするかを制御します。

 

たとえば、左の図では、緑色のロケータは左手首ジョイントに対応するエフェクタを表しています。

Reach Translation 値がゼロである場合、インバース キネマティクス ソルバによって左手首に対して計算される位置は、FK 位置で保持されます(黄色のスケルトンにより表示)。

 

Reach Translation 値が最大である場合、インバース キネマティクス ソルバによって、ジョイントはエフェクタの位置に配置され、元の FK 位置は完全に無視されます。

この両極端の間の値では、FK ポーズと IK ターゲットの位置がブレンドされます。

Reach Rotation

Reach Rotation は Reach Translation によく似ていますが、インバース キネマティクス ソルバによって生成されるジョイントの回転により、元の FK ポーズからのジョイントの向き、エフェクタの向き、この両方の間の向きのどれを使用するかが制御されます。

 

たとえば、左の図では、緑色のロケータは回転され、左手首ジョイントに対する望ましい向きを与えます。

Reach Rotation 値がゼロである場合、インバース キネマティクス ソルバによって左手首に対して計算される回転は、元の FK 値で保持されます(黄色のスケルトンにより表示)。

 

Reach Rotation 値が最大である場合、インバース キネマティクス ソルバによって、ジョイントはエフェクタと同じマトリックスまで回転され、元の FK 回転は完全に無視されます。

この両極端の間の値では、FK ポーズと IK ターゲットの回転がブレンドされます。

Reach Translation と Reach Rotation を結合する

Reach Translation と Reach Rotation を結合することにより、元の FK 位置と、シーン内の特定の場所や項目のいずれかに、キャラクタのジョイントを固定することができます。

エフェクタの Reach Translation 値と Reach Rotation 値の両方を最大値に設定した場合、インバース キネマティクス ソルバでは、キャラクタの新しいスタンスを計算するときに、ジョイントの元の位置と回転が考慮されません。この設定を使用すると、ゲーム内の項目または場所の位置と回転に、ジョイントを効果的に固定することができます。

エフェクタの Reach Translation 値と Reach Rotation 値の両方をゼロのままにした場合、インバース キネマティクス ソルバは、エフェクタの位置と回転が何であっても、対応するジョイントをエフェクタに向けて移動しようとしません。この設定を使用すると、元の位置と回転に、ジョイントを効果的に固定することができます。

ただし、どちらの場合も、他のジョイントの引き寄せのために、ジョイントが移動される可能性があることに注意してください。詳細は、「Pull」を参照してください。

Reach をアニメートする

HumanIK の一般的な用途の多くには、キャラクタの手足が特定のポイントに届くように、または特定の時間に特定の項目と相互に作用するように、アニメーションを徐々に調整することが含まれます。たとえば、ドアのノブをつかむために手を伸ばしているキャラクタです。

この状況に対する一般的な方法は、適切なエフェクタ(この場合は右手)のトランスレーションと回転を適切な最終位置に設定することと、Reach 設定をアニメートすること、そして各フレームで Reach 値を増加させることです。 最初のフレームでは、元のフォワードキネマティクス アニメーションを変更せずに、Reach 値をゼロから開始する必要があります。キャラクタの移動の最終フレームでは、Reach の制御が、キャラクタの手から最終ゴールまで描画して、最大値に達する必要があります。間の各フレームでは、Reach の制御は、ゴールに向けてスムーズな移動を生成し、ゼロと最大値の間を補間する値に設定される必要があります。

リターゲット

リターゲット ソルバを使用している場合、Reach により、ソース アニメーションとターゲット キャラクタの間の最も重要なコンタクト ポイントが判定されます。すなわち、3 次元空間の 2 つのキャラクタの間で同期される必要があるジョイントです、これらのコンタクト ポイントは、ヒップにあることもあれば、異なるサイズやスケールのキャラクタにアニメーションをリターゲットしている場合、足にあることもあります。デフォルトにより、HumanIK リターゲット ソルバでは、ソースとターゲットの間の接点として足が使用されます。

 

たとえば、左の図では、元のアニメーションは赤いスケルトンにより表されています。背の低いキャラクタにリターゲットされる場合、Reach 設定では、足を重要な接点とする必要があります。

 

ただし、アニメーションに空中ブランコをつかむことが含まれている場合、コンタクト ポイントとして足を使用することは適切ではありません。ターゲット キャラクタは背が低いため、足が元の背の高いアニメーションでの足のトランスレーションに固定される場合、ターゲット キャラクタは宙づりで表示されます。

 

この場合、ソースとターゲットの間の接点として手を設定すると、キャラクタが空中ブランコをつかんでいるように見せることができます。

Reach をアニメートする

Reach 設定は、キャラクタの複数の異なるノードの位置と向きに対して設定することができます。リターゲット ソルバでは、これらのすべての Reach 設定の競合する要件のバランスが調整され、最終的に生成されるポーズを元のアニメーションの配置に合わせる方法が決定されます。異なる Reach 設定間のこのバランス調整により、コンタクト ポイントを徐々にブレンドすることができます。たとえば、上の例のキャラクタが立っているポーズで始まり、跳び上がって空中ブランコをつかむ場合、Reach 設定は足のコンタクト ポイントを優先に開始し、手のコンタクト ポイントの優先度を徐々に増やし移行する必要があります。そのとき、アニメーションは空中ブランコをつかむと考えられます。