HumanIK ノードおよびエフェクタにジョイントをマッピングする

HumanIK のインバース キネマティクスとリターゲット ソルバは、HIKCharacters のスタンスを、そのスケルトンの構築によって部分的に定義される可動能力に基づいて計算します。二足動物と四肢動物では、キャラクタのノードが特定の典型的な配置で接続されていることが求められます。たとえば、右肩は右肘の親ノードで、右肘は右手首の親ノードになるといった具合です。HumanIK の生体力学モデルは、これらのノードの動く方法についての情報を備えています。ソルバが 1 つまたは複数のノードを動かして HIKEffectorSetState またはソース アニメーションの要求を満たす必要がある場合、ソルバはこの組み込まれた情報を利用して新しいポーズを構築します。

しかし、このプロセスで独自のキャラクタをコントロールできるようにするには、キャラクタのスケルトンの各ジョイントを、HumanIK が認識できるノードのいずれかにマップする必要があります。これらの各ノードには、HIKNodeId 列挙値にリストされる一意のわかりやすい ID があります。次のセクションでは、この列挙値の命名規則を理解し、キャラクタのジョイントに適切なノードを選択するためのガイドラインを示します。

必須のノードとコモンノード

次の図は、最も一般的に使用されるノードの一意の ID を示しています。

必須のノード

HumanIK では、コントロールするすべてのキャラクタに、特定の最小ノード セットが存在している必要があります。これらの必須のノードは、上の図で赤いアスタリスクで示されています。

脊椎と首

HumanIK は、最大 9 個の追加の脊椎ノード(Spine1NodeIdSpine9NodeId)と最大 10 個の首ノード(NeckNodeIdNeck1NodeIdNeck9NodeId)をサポートしています。これらのノードは下から上に向かって番号が付けられ、小さい番号ほどヒップに近く、大きい番号ほど頭に近くなります。

脊椎ノードまたは首ノードを定義する場合、番号をスキップすることはできません。たとえば、ボーンを Spine3NodeId にマップするには、Spine1NodeIdSpine2NodeId もマップする必要があります。

手と足

手と足は、HumanIK ではほとんど同じです。親子関係が若干異なるだけであり、それぞれの足と手に同じタイプのジョイントを含めることができます。キャラクタの手と足はそれぞれ個別に定義します。これにより、各キャラクタをきわめて複雑にすることができます。たとえば海賊のキャラクタに、足首より下にジョイントがない義足が 1 本、足指の根元に単一のジョイントはあるが足指の関節が自由には動かないブーツをはいた足が 1 本、関節が完全に自由に動く手が 1 本、指が何本か欠けてけがをした手が 1 本設定することができります。

次の図は、手の完全なノード階層を示しています。

次の図は、足の完全なノード階層を示しています。

指と足指

HumanIK では、それぞれの手と足について最大で 6 本の指をキャラクタライズできます。人間のスケルトンの 5 本指(親指、人差し指、中指、薬指、小指)と、第 6 の追加指です。

それぞれの指と足指は、複数の HumanIK ノードを含むことができるジョイント チェーンです。上の図は、すべての指と足指でキャラクタライズできるすべてのノードを示しています。ここでは親指と追加指のノードの名前だけを示していますが、その他の指と足指のジョイントも同じ命名規則に従っています。 完全なリストについては、HIKNodeId 列挙値を参照してください。

  • 上の図に示すように、それぞれの指と足指に、A、B、C、D で識別する最大 4 つのメイン ジョイントを定義することができます。これらの指ノードまたは足指ノードを定義する場合、文字をスキップすることはできません。たとえば、LeftIndexCNodeId ノードを定義するには、LeftIndexANodeId ノードと LeftIndexBNodeId ノードも定義している必要があります。
  • 特殊効果を得るために、それぞれの指と足指には、指または足指のベースに追加のインハンド ジョイントがあります(たとえば、上記の手の画像の LeftPinkyInNodeId)。これらのノードはオプションであり、省略可能です。

指や足指を表すジョイント チェーンは、キャラクタの他のスケルトンに次のようにコネクトされます。

  • 手の親指は、常に手首ノードに直接コネクトされます。
  • 足の追加足指は、常に足首ノードに直接コネクトされます。
  • その他すべての指と足指は、オプションの手ノードまたは足ノードがキャラクタライズされる場合は、そのノードにコネクトされます(上記の図では LeftHandNodeIdLeftFootNodeId)。 オプションの手ノードまたは足ノードがキャラクタライズされない場合、これらの指や足指は、代わりに手首ノードまたは足首ノードに直接コネクトされます(上記の図では LeftWristNodeIdLeftAnkleNodeId)。

キャラクタの指と足指をキャラクタライズするときには、一般に、それぞれの指と足指の先端を 1 つのノードにマップすることをお勧めします。指の数、または指のジョイントの数が異なるキャラクタ間でアニメーションをリターゲットする場合は特にそうです。これは、各指のエフェクタにより、そのジョイント チェーンの最後にキャラクタライズされたノードの配置が決まるからです。 したがって最後にキャラクタライズされたノードが指の先端にある場合、エフェクタを使用してキャラクタの指先の配置をコントロールできます。 「エフェクタの配置」を参照してください。

手ノードと足ノード

オプションの手ノードと足ノードである LeftHandNodeIdRightHandNodeIdLeftFootNodeIdRightFootNodeId を使用すると、キャラクタの指と足指のベースにジョイントを加えることができます。 このノードを最もよく使用するのは、それぞれの指または足指のアーティキュレーションを完全に表す必要はないが、手または足を曲げることでリアリティが増すような場合です。たとえば、つま先が閉じた靴をはいた人間のキャラクタで足ノードを使用すると、次に示すように、個々の足指のノードを定義しなくても、足を足指のベースのところで曲げることができます。

特殊ノード

前述の各ノードに加えて、HumanIK では特殊効果用に次のノードをサポートしています。

鎖骨ノードと追加鎖骨ノード

キャラクタのスケルトンの左半身と右半身に、LeftCollarExtraNodeId ノードと RightCollarExtraNodeId ノードで定義される追加の鎖骨のボーンを含めることができます。 これらの追加の鎖骨のボーンは、人間が腕を上げたときの肩の動きをシミュレートするのに役立ちます。

追加鎖骨ノードは、有効にした場合、鎖骨ノードと肩ノードの間に位置します。つまり、LeftCollarExtraNodeIdLeftCollarNodeIdLeftShoulderNodeId の間に位置し、RightCollarExtraNodeIdRightCollarNodeIdRightShoulderNodeId の間に位置します。

デフォルトでは、HumanIK は肩の回転を鎖骨ノードと追加鎖骨ノードに均等に分散させます。たとえば、キャラクタが左腕を上げると、回転の半分が LeftCollarNodeId に適用され、半分が LeftCollarExtraNodeId に適用されます。しかし、HIKExtraCollarRatioId プロパティの値を設定することで、鎖骨ノードと追加鎖骨ノードの間でブレンドの比率をコントロールできます。 詳細は、「全般プロパティ」を参照してください。

ロール ノード

HumanIK は、キャラクタの肩、肘、ヒップ、膝でのロール ノードの使用をサポートしています。これらの各ロール ノードは、通常は関連する親ノードとスケルトンにおける次のノードのほぼ中間に配置されます。 たとえば、左肩のロール ノードは、左肩と左肘の中間に位置し、左肘のロール ノードは肘と手首の中間に位置します。ロール ノードが関連付けられているノードに HumanIK ソルバがロール回転を適用するときは、そのロール回転のパーセンテージを代わりにロール ノードに適用することができます。このプロセスをロール抽出と呼びます。

ロール抽出は、Biped と Quadruped の動物の腕と脚がその軸のまわりを実際に回る方法をシミュレートします。腕や脚の先の方のより適切な位置からスキン デフォメーションを制御できるため、スキニングされたキャラクタに作成したアニメーションのリアリティが大きく向上します。

デフォルトでは、ロール抽出はすべてのロール ノードでアクティブになっていません。ロール抽出を有効にするには、各ロール ノードのキャラクタ プロパティをアクティブにし、そのプロパティの値を、親ノードではなくロール ノードに適用するロール回転のパーセンテージを示すように設定する必要があります。

詳細は、「ロール抽出を使用する」を参照してください。

リファレンス ノード

リファレンス ノード ReferenceNodeId は、キャラクタの全体的な移動、回転、スケールに関するオプションのリポジトリとして用意されています。ヒップの概念上の親と考えてください。

ほとんどの場合、リファレンス ノードを使用する必要はありません。リファレンス ノードは、主に次のような状況で使用することを想定しています。

  • HIKForceActorSpaceId プロパティをオンにしてリターゲットを実行する場合。この場合、ターゲット キャラクタの HIKCharacterState でリファレンス ノードの状態を変更することが、ターゲット キャラクタの全体的な移動、回転、スケールを変更する唯一の手段です。通常、この変更は、リターゲット ソルバを呼び出す前に、HIKSetNodeStatefv() 関数または HIKSetNodeStateTQSfv() 関数を使用して行います。
  • モデルのヒップに、キャラクタの移動、回転、スケールを定義する親がある場合、リファレンス ノードを使用してその親のデータを HumanIK に同期すると便利な場合があります。

ヒップ トランスレーション

ヒップ トランスレーション ノード HipsTranslationId は、キャラクタのヒップ トランスレーション用の独立したリポジトリとして使用します。 キャラクタのこのノードを有効にしたときに、HumanIK ソルバでキャラクタのヒップ トランスレーションをオフセットする必要がある場合、最終的なトランスレーションは HipsNodeId ノードではなくヒップ トランスレーション ノードに保存されます。

デフォルトでは、ヒップの回転は、HipsTranslationId ノードが有効でも HipsNodeId ノードに保存されます。しかし、キャラクタの HIKHipsTranslationModeId プロパティの値を 1 に設定することにより、ヒップの回転を HipsTranslationId ノードに保存するように HumanIK を設定することができます。この場合、トランスレーションと回転はいずれも HipsNodeId ノードに適用されません。

HipsTranslationId ノードを使用して、ソース キャラクタの軌道をターゲット キャラクタにリターゲットすることもできます。詳細は、「アニメーションの軌道をリターゲットする」を参照してください。