アニメーションの軌道をリターゲットする

一部のアニメーション エンジンは、アニメーションの連続するフレーム間のトランスレーションと回転のデルタとして表される、キャラクタ アニメーションの軌道情報を追跡します。この情報により、エンジンは複数の異なるアニメーションをその開始位置に関係なくブレンドすることができます。 アニメーションのトランスレーション、回転、スケールのデルタを各フレームでブレンドすることで、ブレンドの結果が、前のフレームに対して適切な移動、回転、スケールになることが保証されます。

しかし、この軌道ブレンドは、プロポーションの異なるキャラクタにアニメーションをリターゲットする場合に問題を引き起こす可能性があります。たとえば、歩行のアニメーションを大きいキャラクタからはるかに小さいキャラクタにリターゲットする場合などです。

この問題を解決するために、HumanIK では、ソース キャラクタのアニメーションに指定したトランスレーションと回転のデルタを、ターゲット キャラクタのキャラクタ スペースに変換することができます。これらの調整されたデルタ値は、ターゲット キャラクタが追従している実際の軌道をアニメーション エンジンに提供します。そのため、リターゲットされたアニメーションの上に他のアニメーションをブレンドすることができます。

軌道のリターゲットを設定する

次の説明は、「HumanIK を使用する」で説明したリターゲットの設定と実行のための基本的な説明を踏まえたものです。

  1. ターゲット キャラクタの HIKPropertySetState を設定するときは、次のことを行います。

    • HIKHipsTranslationModeId プロパティの値を 2 に設定します。 この値は、リターゲットを実行するときに HipsTranslationId ノードに含まれているデルタを調整するようにリターゲット ソルバに指示します。
    • HIKForceActorSpaceId のモードを 0(デフォルト)に設定します。

  2. 各フレームで、ソース キャラクタの HIKCharacterState を設定するときに、アニメーションの前のフレームからのデルタトランスレーション、回転、スケールの値を、ソース キャラクタの HipsTranslationId ノードによって維持される値に格納します。
  3. 各フレームで、リターゲットの結果をターゲット キャラクタの HIKCharacterState から取得するときに、調整されたデルタトランスレーションとデルタ回転をターゲット キャラクタの HipsTranslationId ノードから取得します。 値はグローバル スペースで表現されます。

    ソース キャラクタに HipsTranslationId ノードがない場合、ターゲット キャラクタの HipsTranslationId ノードには、ソース キャラクタの HipsNodeId ノードからリターゲットされた値が含まれます。