足および手のコンタクトを設定する

手足のコンタクトの設定には、次のセクションで説明されているように、HumanIK ソルバに設定する HIKPropertySetStateHumanIK の両方の設定が必要です。

手順 1. 足および手のコンタクトを有効化および構成する

手足のコンタクトは、HumanIK ソルバに設定する HumanIK で有効化および設定されます。

足のコンタクトを有効にするには、HIKFootFloorContactId プロパティのモードを HIKModeOn に設定します。

手のコンタクトを有効にするには、HIKHandFloorContactId プロパティのモードを HIKModeOn に設定します。

例:

HIKSetPropertyMode(MyPropertyState, HIKFootFloorContactId, 1);
HIKSetPropertyMode(MyPropertyState, HIKHandFloorContactId, 1);

コンタクト タイプを設定する

フロア コンタクト エンジンの最も重要な構成オプションは、キャラクタの手足の設定に使用されるコンタクト タイプです。これらのコンタクト タイプの詳細については、「コンタクト タイプ」を参照してください。

キャラクタの足のコンタクト タイプを設定するには、HIKFootContactTypeId プロパティの値を次の値の 1 つに設定します。

キャラクタの手のコンタクト タイプを設定するには、HIKHandContactTypeId プロパティの値を次の値の 1 つに設定します。

  • 0は、標準の足のコンタクト タイプを示します。これはデフォルトのコンタクト タイプであり、このコンタクト タイプを使用する場合は、下の足および手のコンタクトを設定するにスキップすることができます。
  • 1は、足首または手首の足のコンタクト タイプを示します。
  • 2は、足指ベースまたは指ベースの足のコンタクト タイプを示します。
  • 3は、蹄の足のコンタクト タイプを示します。

例:

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 により、複数のその他のオプションのプロパティが提供され、それを構成して足および手のコンタクト エンジンの動作を制御することができます。これらのプロパティに関する詳細は、「足および手のコンタクトのプロパティ」を参照してください。

手順 2. 手の指および足の指のコンタクトを有効化および構成する

一度キャラクタの手足のコンタクトを有効化および構成したら、HumanIK ソルバに設定する HumanIK で、キャラクタの手の指および足指のフロア コンタクトを有効化および構成することもできます。

手の指および足の指のコンタクトは、通常は、個別に自由に動く手の指または足指を持ち、HumanIK によって制御されるキャラクタの場合のみ使用され、通常は標準の足および手のコンタクト タイプとともに使用されます。

足の指のコンタクトを有効にするには、HIKFootFingerContactId プロパティのモードを HIKModeOn に設定します。

手の指のコンタクトを有効にするには、HIKHandFingerContactId プロパティのモードを HIKModeOn に設定します。

例:

HIKSetPropertyMode(MyPropertyState, HIKFootFingerContactId, 1);
HIKSetPropertyMode(MyPropertyState, HIKHandFingerContactId, 1);

手の指および足の指のコンタクトを構成する

キャラクタに対して使用する HIKPropertySetState により、複数のその他のオプションのプロパティが提供され、それを構成して足および手のコンタクト エンジンの動作を制御することができます。これらのプロパティに関する詳細は、「足および手のコンタクトのプロパティ」を参照してください。

手順 3. フロア(床)の位置および向きをセットアップする

一度キャラクタの手足がフロアまたは別の方向指定されたプレーンとのコンタクトに反応する方法を定義したら、それぞれの手足に対して 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);

手順 4. ソルバ ステップを設定する

フロア コンタクトの設定の最後の手順は、HIKEffectorSetState でフロア コンタクトのソルバ ステップを有効にすることです。

HIKSetIKSolvingStep() 関数を呼び出してソルバ ステップを設定する場合、HIKSolvingStepContact および HIKSolvingStepContactApprox ステップを含める必要があります。これらのステップは HIKSolvingStepAll に含まれているので、そのまま HIKSolvingStepAll を使用することができます。例:

HIKSetIKSolvingStep(MyEffectorState, HIKSolvingStepAll);

IK ソルバ ステップに関する詳細は、「選択されたボディ パーツをソルビングする」を参照してください。