リターゲットを適用した場合、あるジョイントがフリップする場合があります。
例えば、ここでは肩のフレームを確認します。
6フレーム
7フレーム
8フレーム
7フレームでジョイントがフリップしています。
前後のジョイントを確認すると、鎖骨とひじに対し、肩が反転していることがわかります。
これを回避するための方法として今回Look At(KineFX)を使用します。このノードは、最初の入力変換行列を to インプットによって与えられた位置に向くように回転させます。up インプットが接続されている場合は,そのインプットがロールを決定するために使用されます.
このノードはリギング作業用に設計されており、Look At VOPノードとはいくつかの重要な点で異なります。
- この回転は,既存の行列に適用され,入力されたスケーリング(一様または非一様)を保持します.
- 入力したトランスフォームで見つかった初期回転は、upインプットがない場合のクォータニオン回転の起点として使用されます。
- upインプットは方向ではなく位置を指定します。
- to位置とup位置を指す軸を指定することができます。
Rig Attribute VOPでLookatを設定します。
まずは、Look atを設定するジョイントを指定します。
Look atの入力は下記になります。
from
「look at」操作が適用される変換。
to
変換結果が向き合うターゲット位置。
up
結果の「ロール」を制御するために使用される位置。
今回はLook atが適用される変換はRightArmで、変換結果が向くターゲットにforearmを設定します。
Get point Transformを追加します。
Get point Transformは、指定されたポイントインデックスに対する変換情報を返します。
ここでは方向を修正したジョイントRigtShoulderにLook atを設定します。
Get Point Transformを追加し、ターゲットとしてForeArmを指定しました。
Look At AxisをXに設定します。
これは、このセットアップにおいて子供のジョイントを示す軸がそもそもX軸になっているからです。
次にロールを制御するためにUp軸を固定する必要があります。
Get Parent Transformを作成し、Get point Transformとつなぎます。
KineFXスケルトン内のジョイントの親のTransformを取得します。
Get Parent Transformのxformにorientを接続します。
Orientは方向を表すベクトルに 4×4 の変換行列を掛けて方向を変えます。
orientのFromを下記のように変更しました。
Offset Transformを追加し、下記のように接続します。
Offset TransformはKineFX の変換行列を指定された変換でオフセットします。
Orientの結果をtに入れており、この値だけオフセットすることができます。
ModeをPost-Multiplyに設定します。
Pre-Multiplyは、与えられた xform にオフセットを前乗算します。概念的には、これはオフセットを子変換として適用するのと似ています。
result = offset * xform
Post-Multiplyは、与えられた xform にオフセットを後乗算します。概念的には、これはオフセットを親変換として適用するのと似ています。
result = xform * offset
Offset TransformをLook AtのUpに接続します。
Look AtのUp AxisをYに設定します。
最後にSet Point Transformを追加し、Look Atをxformに接続して、Right ShoulderのGet Point TransformのptnumをSet Point Transformのptに接続します。
Set Point Transformの設定でUpdate Children Transformsをオフにします。
オンの場合、指定されたポイントのワールド変換が変更されると、指定されたポイントの子のポイント変換が更新されます。 オフの場合、指定されたポイントの子は、変換ハンドルで Child Compensationを使用する場合と同じように所定の位置に留まります。