概要で紹介されているように、HIKEffectorSetState では、キャラクタの各スケルトン ノードのインバース キネマティクスのゴール ポイントが格納されます。エフェクタが対応するノードで引き寄せる強さを制御するパラメータ、およびキャラクタのスケルトンの他のジョイントで引き寄せる強さを制御するパラメータのセットとともに格納されます。インバース キネマティクス ソルバにより、すべてのエフェクタの位置、回転、およびパラメータのバランスが調整され、キャラクタの最終的なポーズを含む新しい HIKCharacterState が構築されます。
インバース キネマティクス ソルバを呼び出すときはいつでも、まずキャラクタのノードのターゲット ポイントと、各エフェクタの Reach、Pull コンストレイン、および Resist コンストレインの適切な値を使用して、HIKEffectorSetState を設定する必要があります。詳細は、「インバース キネマティックス ソルバ」を参照してください。
HumanIKリターゲット ソルバのみを使用している場合、通常はエフェクタの設定に、トランスレーション、回転、およびスケール値の使用、またはコンストレイン値の使用は必要ありません。この設定は、リターゲット ソルバによって内部で実行されるためです。
「HIKCharacterState でデータを設定および取得する」で紹介されているように、HumanIK は正規化された空間で内部で機能します。各 HIKCharacterState により、各ノードの回転およびスケール値がキャラクタのデフォルトの T スタンスに格納されますが、そのノードのオフセットは含まれません。同様に、HIKEffectorSetState に含まれる IK ゴール ポイントは、同じ正規化された空間内にあります。キャラクタの新しいポーズを生成するために、インバース キネマティクス ソルバに HIKEffectorSetState を提供する場合、ソルバでは、HIKEffectorSetState に保存された回転およびスケール値がすでに正規化された空間に存在することが求められます。同様に、HIKEffectorSetState のエフェクタから回転およびスケール値を読み取るとき、返される値は正規化された空間内にあります。
対応するノードが、キャラクタのデフォルトの T スタンスに回転またはスケール オフセットを含まないエフェクタの場合、この正規化されたスペースはグローバル スペースと同じです。このようなエフェクタの場合、エフェクタの回転値をグローバル スペースでのキャラクタの手足の望ましい向きに設定することができます。ただし、対応するノードが、キャラクタのデフォルトの T スタンスに回転またはスケール オフセットを含むエフェクタの場合、グローバル スペースでエフェクタの回転およびスケール値の設定および抽出では、キャラクタの T スタンスのオフセットは考量されません。これは、予期しない回転ゴールの原因になる可能性があります。
HumanIK 内で内部で使用される正規化されたスペースの代わりに、グローバル スペースでエフェクタの回転およびスケール値を排他的に提供する場合、用語 CharacterSpace によって識別される関数を使用することができます。たとえば、HIKGetCharacterSpaceEffectorStatefv()。これらの関数の 1 つを使用してエフェクタの回転またはスケール値を設定するとき、対応するノードに対するキャラクタのデフォルトの T スタンスに含まれるオフセットは、新しい値が HIKEffectorSetState に格納される前に削除されます。同様に、これらの関数の 1 つを使用して HIKEffectorSetState から回転およびスケール値を抽出するとき、デフォルトの T スタンスに含まれるオフセットは、値が返される前に再適用されます。
T スタンスに、対応するノードに対する回転またはスケール オフセットが含まれるかどうかにかかわらず、すべてのエフェクタに対してこれらの CharacterSpace 関数を使用することができます。ただし、対応するノードが T スタンスにオフセットを含むエフェクタに対してのみこれらの CharacterSpace 関数を使用することにより、パフォーマンスを向上させることができる場合があります。この場合、必要な場合のみ、正規化されたスペースとグローバル スペースの間で変換が実行されるためです。
HIKEffectorSetState でエフェクタに対する正規化された回転およびスケール オフセットを提供する別の方法は、まず HIKCharacterState に含まれるポーズに合うように各エフェクタのトランスレーション、向き、およびスケールを設定することです。このポーズは通常、ゲーム エンジンから取得されたキャラクタの現在のポーズです、次に、必要に応じてキャラクタが特定のプロップに届くように、または手足を回すように、必要に応じてエフェクタのトランスレーション、向き、およびスケールをオフセットし、これらの新しい値を HIKEffectorSetState に再適用します。HIKCharacterState に含まれるデータからエフェクタをオフセットすることにより、オフセットを個々のエフェクタに適用するとき、すでに正規化されたスペースで作業していることが保証されます。