IK ピボットを使用する

IK ピボットとは 3 次元空間の仮想点で、エフェクタがその周りを回転します。これらの IK ピボットを使用して、空間の外部点の周囲を回転するジョイントに関するアニメーションをよりリアルにすることができます。例:

IK ピボットの効果

エフェクタの IK ピボットを設定すると、エフェクタそのもののグローバルトランスレーション、方向、スケール値を提供すると同時に、グローバル スペースでの 3D 変換を提供します。IK ピボットは HumanIK がこのエフェクタのトランスレーションと方向値を加味する方法を、効果的に新しい IK のゴールポイントを作成するよう修正します。

この最終的な IK のゴールポイントは、次のプロセスで計算されます。

別の見方をすると、エフェクタに対し指定したトランスレーション値と、固定長の仮想ラインの両端の 2 つの点を定義したピボットとなります。ピボットがエフェクタに対し指定した方向に回転すると、この仮想ラインも回転し、エフェクタを効果的に 3D 空間の別のピボットにトランスレーションします。

エフェクタに対し設定されている IK コンストレイン(Reach、Pull、Resist)は通常、IK ピボットを使用する際に適用し、最終的なソリューションでキャラクタのスケルトンがこの IK のゴールポイントにどの程度近づくかや、キャラクタのスケルトンの他の部分が、その点に到達するためにどのくらい変形しても良いかをコントロールします。

IK ピボットの位置を設定し取得する

エフェクタに IK ピボットを設定するには、HIKSetEffectorPivotStatefv() または HIKSetEffectorPivotStateTQSfv() 関数のいずれかを呼び出します。 これらの関数は両方とも、IK ピボットのトランスレーションを 4 つの浮動小数点値の配列で提供する必要があります。

例:

const float pivotPointT[] = {124.3f, 253.8f, 604.4f, 0.0f};
HIKSetEffectorPivotStateTQSfv(myEffectorSet, LeftWristEffectorId, globalT,
                                                                  globalQ,
                                                                  globalS,
                                                                  pivotPointT);

IK ピボットの位置は、それぞれ HIKGetEffectorPivotStatefv()HIKGetEffectorPivotStateTQSfv() 関数を使用して取得できます。

詳しくは、API リファレンスの関数の説明を参照してください。