マトリックスを使用してエフェクタ データを設定および取得する

次の手順では、各ノードのトランスレーション、向き、およびスケール値を表す変換マトリックスを含むデータ セットを使用して、HIKEffectorSetState で複数のエフェクタのデータを設定および取得する方法を説明します。

HIKEffectorSetState にエフェクタ データを設定する

手順 1. データ ブロックを構築します

16 バイトでアラインされたメモリ バッファに、各エフェクタに対する次の項目を格納します。

  • 変換配列で紹介されているフォーマットに従う、HIKEffectorSetState の各エフェクタに対するマトリックス。データ セット内の各マトリックスのオフセットは、16 バイトでアラインされる必要があります。
  • 4 つの浮動小数点数値の配列であり、エフェクタの移動達成度、回転達成度、Pull コンストレイン、Resist コンストレインに対する望ましい値を示します。これらの値は、0.01.0の範囲である必要があります。

例:

// first Node's data block 
// -- matrix data
{-45.95f, 87.81f, -205.81f, 0.0f, 
 -0.54f, 0.0f, -0.05f, 0.83f,
 0.16f, 0.16f, 0.16f, 1.0f,
 -36.91f, 85.10f, -203.83f, 0.0f,
// -- constraint data
 0.5f, 0.5f, 1.0f, 0.0f},
// second Node's data block 
// -- matrix data
{-36.91f, 85.10f, -203.83f, 0.0f,
 -0.39f, 0.57f, -0.40f, 0.58f,
 0.16f, 0.16f, 0.16f, 1.0f
 -37.17f, 47.86f, -218.01f, 0.0f,
// -- constraint data
 0.5f, 0.5f, 1.0f, 0.0f},
},
// third Node's data block 
...

手順 2. データ説明を構築します

このデータ説明は、HIKEffectorDataDescriptionMatrix 構造のインスタンスである必要があります。データ説明のために、次の項目を指定する必要があります。

  • 各エフェクタのデータ ブロック内の各マトリックスのオフセット。各データ ブロックに各マトリックスの前に HumanIK によって使用されないカスタム情報が含まれる場合を除き、この値は通常は 0 です。
  • 各エフェクタのデータ ブロック内のコンストレイン データのオフセット。
  • ストライド、または各データ ブロックのサイズ。各マトリックスは 16 の浮動小数点数の配列であり、さらに各データ ブロックには 4 つの浮動小数点数のコンストレイン パーセンテージが含まれるため、この値は通常は sizeof(float) * 20 と同等です。
  • マトリックスがデータ セットに格納されるすべてのエフェクタの一意の ID を含む配列であり、それらのマトリックスが格納される順になります。この配列の最後の要素は、特別な列挙値 HIKLastNode である必要があります

    この配列には特別な値 HIKNotUsed も含めることができ、この値は HumanIK に指示して、対応するデータ ブロックをスキップします。

例:

int myUsedEffectors[] = {HipsEffectorId, 
                         LeftAnkleNodeId,
                         RightAnkleNodeId,
                         ...
                         RightFootPinkyEffectorId,
                         HIKLastNode
                         };
HIKEffectorDataDescriptionMatrix myDesc = {0,
                                           64,
                                           sizeof(float)*20,
                                           myUsedEffectors
                                           };

手順 3. データを HumanIK に渡します

HIKSetEffectorStateData()関数を呼び出し、データ セットに含まれるトランスレーション、回転、スケール、および IK コンストレイン値を HIKCharacter に適用します。

例:

HIKSetEffectorStateData(lEffectorState,
                        &myDesc,
                        (void *)goalBuffer[frameId]);

HIKEffectorSetState からエフェクタ データを抽出する

各エフェクタのトランスレーション、クォータニオン回転、およびスケール値に対して変換マトリックスを使用して、HIKEffectorSetState State からエフェクタ データを取得するには、上の「マトリックスを使用してエフェクタ データを設定および取得する」で説明されているようなプロセスに従う必要があります。