手足のコンタクトの設定には、次のセクションで説明されているように、HumanIK ソルバに設定する HIKPropertySetState と HumanIK の両方の設定が必要です。
手足のコンタクトは、HumanIK ソルバに設定する HumanIK で有効化および設定されます。
足のコンタクトを有効にするには、HIKFootFloorContactId プロパティのモードを HIKModeOn に設定します。
手のコンタクトを有効にするには、HIKHandFloorContactId プロパティのモードを HIKModeOn に設定します。
HIKSetPropertyMode(MyPropertyState, HIKFootFloorContactId, 1); HIKSetPropertyMode(MyPropertyState, HIKHandFloorContactId, 1);
フロア コンタクト エンジンの最も重要な構成オプションは、キャラクタの手足の設定に使用されるコンタクト タイプです。これらのコンタクト タイプの詳細については、「コンタクト タイプ」を参照してください。
キャラクタの足のコンタクト タイプを設定するには、HIKFootContactTypeId プロパティの値を次の値の 1 つに設定します。
キャラクタの手のコンタクト タイプを設定するには、HIKHandContactTypeId プロパティの値を次の値の 1 つに設定します。
HIKSetPropertyValue(MyPropertyState, HIKFootContactTypeId, 3.0f); HIKSetPropertyValue(MyPropertyState, HIKHandContactTypeId, 1.0f);
選択するコンタクト タイプに応じて、キャラクタの手足を定義するマーカの配置を決定する補助プロパティのセットも構成する必要があります。HumanIK により、これらのプロパティに対するデフォルトの値のセットが提供されますが、モデルのサイズとシェイプに従ってより適切な値を設定することをお勧めします。選択したコンタクト タイプに対して設定する必要がある補助プロパティの詳細については、コンタクト タイプでさまざまなコンタクト タイプの説明を参照してください。
たとえば、標準のコンタクト タイプを使用するためにキャラクタの足を構成する場合、次のプロパティを設定する必要があります。
HIKSetPropertyValue(MyPropertyState, HIKFootBottomToAnkleId, 12.0f); HIKSetPropertyValue(MyPropertyState, HIKFootBackToAnkleId, 3.0f); HIKSetPropertyValue(MyPropertyState, HIKFootMiddleToAnkleId, 11.7f); HIKSetPropertyValue(MyPropertyState, HIKFootFrontToMiddleId, 6.9f); HIKSetPropertyValue(MyPropertyState, HIKFootInToAnkleId, 3.4f); HIKSetPropertyValue(MyPropertyState, HIKFootOutToAnkleId, 5.1f);
HumanIK リターゲット ソルバを使用している場合、ターゲット キャラクタに対して、ターゲット キャラクタのコンタクト タイプへの手足のマーカの配置に使用される手足のすべての寸法を設定する必要があります。ソース キャラクタに対しては、HIKFootBottomToAnkleId プロパティのみ設定する必要があります。上に表示されているその他の手足の寸法のプロパティは、ソース キャラクタからは読み込まれません。
キャラクタに対して使用する HIKPropertySetState により、複数のその他のオプションのプロパティが提供され、それを構成して足および手のコンタクト エンジンの動作を制御することができます。これらのプロパティに関する詳細は、「足および手のコンタクトのプロパティ」を参照してください。
一度キャラクタの手足のコンタクトを有効化および構成したら、HumanIK ソルバに設定する HumanIK で、キャラクタの手の指および足指のフロア コンタクトを有効化および構成することもできます。
手の指および足の指のコンタクトは、通常は、個別に自由に動く手の指または足指を持ち、HumanIK によって制御されるキャラクタの場合のみ使用され、通常は標準の足および手のコンタクト タイプとともに使用されます。
足の指のコンタクトを有効にするには、HIKFootFingerContactId プロパティのモードを HIKModeOn に設定します。
手の指のコンタクトを有効にするには、HIKHandFingerContactId プロパティのモードを HIKModeOn に設定します。
HIKSetPropertyMode(MyPropertyState, HIKFootFingerContactId, 1); HIKSetPropertyMode(MyPropertyState, HIKHandFingerContactId, 1);
キャラクタに対して使用する HIKPropertySetState により、複数のその他のオプションのプロパティが提供され、それを構成して足および手のコンタクト エンジンの動作を制御することができます。これらのプロパティに関する詳細は、「足および手のコンタクトのプロパティ」を参照してください。
一度キャラクタの手足がフロアまたは別の方向指定されたプレーンとのコンタクトに反応する方法を定義したら、それぞれの手足に対して HumanIK が考慮する必要があるプレーンの実際の位置および向きを定義する必要があります。各手足のプレーンの場所は、HumanIK ソルバに設定する HIKEffectorSetState に、別々に保存されて維持されます。
フロア コンタクト エンジンに対して方向指定されたプレーンを設定するには、四肢ごとに HIKSetEffectorFloorStatefv() 関数を呼び出します。この関数には次の引数が必要です。
HIKSetEffectorFloorStatefv(MyEffectorState, HIKLeftFootFloor, matrix); HIKSetEffectorFloorStatefv(MyEffectorState, HIKRightFootFloor, matrix);
代わりの方法として、HIKSetEffectorFloorStateTQfv()関数を使用することもできます。この関数は、方向指定されたプレーンの任意のポイントのトランスレーションおよび回転を含む、4 つの要素の浮動小数点数の配列を 2 つ受け取ります。
const float transform[] = {35.1f,0.9f,276.7f,1.0f};
const float rotation[] = {0.4f,0.0f,1.3f,1.0f};
HIKSetEffectorFloorStateTQfv(MyEffectorState, HIKLeftFootFloor, transform, rotation);
HIKSetEffectorFloorStateTQfv(MyEffectorState, HIKRightFootFloor, transform, rotation);フロア コンタクトの設定の最後の手順は、HIKEffectorSetState でフロア コンタクトのソルバ ステップを有効にすることです。
HIKSetIKSolvingStep() 関数を呼び出してソルバ ステップを設定する場合、HIKSolvingStepContact および HIKSolvingStepContactApprox ステップを含める必要があります。これらのステップは HIKSolvingStepAll に含まれているので、そのまま HIKSolvingStepAll を使用することができます。例:
HIKSetIKSolvingStep(MyEffectorState, HIKSolvingStepAll);
IK ソルバ ステップに関する詳細は、「選択されたボディ パーツをソルビングする」を参照してください。