初期化フェーズで、HumanIK で使用する各キャラクタを作成およびセットアップし、そのポーズを記録する HIKCharacterState、キャラクタの特徴を定義する HIKPropertySetState、ゴール ポイントおよび IK コンストレインを HumanIK ソルバに提供する HIKEffectorSetState を指定します。
インバース キネマティックスの初期化: インバース キネマティックス ソルバのみの使用を計画している場合は、このページに記載されているすべての手順を 1 回実行し、キャラクタをセットアップします。
リターゲットの初期化: リターゲット ソルバの使用を計画している場合は、2 つのキャラクタ(アニメーションの描画元のソース キャラクタと、アニメーションの適用先のターゲット キャラクタ)をセットアップする必要があります。
ソース キャラクタおよびターゲット キャラクタに対してそれぞれ 1 回ずつ、手順 1 ~ 3 を 2 回実行します。ただし、リターゲット ソルバはターゲット キャラクタに対してのみ内部的にインバース キネマティックス ソルバを起動するため、必要な HIKEffectorSetState は 1 つのみです。したがって、手順 4 は 1 回実行するだけで済みます。
この手順の最終的な目標は、ゲームのキャラクタのスケルトン構造および物理ジオメトリを正確に反映したデフォルトの T スタンスを使用して完全にキャラクタライズされた HIKCharacter オブジェクトを得ることです。
この目標を達成するためには、次の 2 つの主要な手法があります。
詳細は、「HIKCharacter をプログラムでキャラクタライズする」を参照してください。
このアプローチには、プログラマではなく組織内のアーティストおよびテクニカル ディレクタによってキャラクタライゼーションを設定することができるという利点があり、キャラクタライゼーションによって生成された IK の結果に関する視覚的なフィードバックを即座に得ることができます。
詳細は、「HIKCharacter を視覚的にキャラクタライズする」を参照してください。
さまざまな手法の詳細について下位のトピックを参照し、プロジェクトおよびデザイン パイプラインにとって最適な手法を決定してください。
キャラクタの HIKCharacter を作成したら、少なくとも 1 つの HIKCharacterState を作成する必要があります。この HIKCharacterState には、各キャラクタのノードに対する移動および回転行列が含まれており、HumanIK ソルバの入力および出力として使用されます。
HIKCharacterState クラスのインスタンスを作成するには、HIKCharacterStateCreate() 関数を呼び出します。この関数には次の 2 つの引数が必要です。
HIKCharacterState * MyCharState = HIKCharacterStateCreate(MyChar, &malloc);
HIKPropertySetState は、HIKCharacter のさまざまなオプション属性を定義します。たとえば、特定の条件下で一部のジョイントが動く方法、フロアとの接触を確立する方法、キャラクタの左右をミラーリングするかどうかなどです。
HIKPropertySetStateCreate() 関数を呼び出し、HIKPropertySetState にメモリを割り当てるために呼び出されるコールバック関数へのポインタを引数として渡すことで、キャラクタの HIKPropertySetState を作成する必要があります。標準の malloc 関数、または malloc と同じ種類の定義を満たす任意のカスタム メモリ割り当て方法を指定できます。「 HumanIK オブジェクトとメモリ管理」を参照してください。
HIKPropertySetState * MyPropertySet = HIKPropertySetStateCreate(&malloc);
HIKPropertySetState は HIKCharacter または HIKCharacterDefinition に直接依存しないことに注意してください。HIKPropertySetState には同じプロパティが含まれ、それらのプロパティの値およびモードのみが、キャラクタによって変化します。各 HIKPropertySetState で使用できるプロパティの詳細は、「キャラクタ プロパティ」を参照してください。
HIKEffectorSetState には、各キャラクタのノードに対するターゲット ポイントと、各エフェクタ(Reach、Pull、Resist)に対するコンストレイン セットが含まれています。HIKEffectorSetState は、インバース キネマティックス ソルバが実行するソルバ ステップ(コントロールするボディ パーツ)も定義します。
HIKEffectorSetStateCreate() 関数を呼び出し、HIKEffectorSetState にメモリを割り当てるために呼び出されるコールバック関数へのポインタを引数として渡すことで、HIKEffectorSetState を作成する必要があります。標準の malloc 関数、または malloc と同じ種類の定義を満たす任意のカスタム メモリ割り当て方法を指定できます。「 HumanIK オブジェクトとメモリ管理」を参照してください。
HIKEffectorSetState * MyEffectorSet = HIKEffectorSetStateCreate(&malloc);
HumanIK リターゲット ソルバはインバース キネマティックス ソルバを内部的に使用するので、アニメーションのリターゲットのみに HumanIK を使用している場合でも、HIKEffectorSetState を作成する必要があります。