| On this page | |
| Since | 20.0 |
TransformObjectノードは、エレメントのトランスフォームの挙動(エレメント間のトランスフォーム階層の定義など)を管理します。
他にも、定義されたトランスフォーム順を使って移動/回転/スケールするといったアニメーションさせやすいトランスフォームコンポーネント入力を扱うこともできます。
TransformObjectノードをグラフ内に配置してそれらのパラメータを プロモートさせると (グラフ内のinputノードに接続すると)、
そのTransformObjectエレメントは、Animateステートでピックアップされるようになり、コントロールに変換されます。
要するに、ユーザが操作できるものとして表示されます。
詳細は、コントロールを参照してください。
トランスフォームの構築 ¶
TransformObjectノードで表現されるトランスフォームは、いくつかの色々な方法で構築することができます:
-
移動、回転、スケールの値をそれぞれ t 、 r 、 s のポートに接続する方法。
この方法だと、そのTransformObjectノードをAnimateステートでコントロールとして操作できるようになります。 t 、 r 、 s のどれかのポートをプロモートさせると(グラフ内の
inputノードに接続すると)、そのTransformObjectエレメントは、Animateステートでピックアップされるようになり、コントロールに変換されます。 Animateステートに入ると、そのコントロールにハンドルが用意され、そのハンドルを操作すると、それに応じた t 、 r 、 s の値が更新されます。トランスフォーム順(移動、回転、スケールの処理が適用される順番)は、 xord ポートで設定することができます。
xord
トランスフォーム順
0
スケール → 回転 → 移動
1
スケール → 移動 → 回転
2
回転 → スケール → 移動
3
回転 → 移動 → スケール
4
移動 → スケール → 回転
5
移動 → 回転 → スケール
回転順(X、Y、Z軸による回転の順番)は、 rord ポートで設定することができます。
rord
回転順
0
X → Y → Z
1
X → Z → Y
2
Y → X → Z
3
Y → Z → X
4
Z → X → Y
5
Z → Y → X
-
local ポートでトランスフォーム行列を指定する方法。これによって t / r / s のポート接続と同じことができます。
この方法は、トランスフォームデータが既に行列形式で表現されている場合に役立ちます。 たいていの場合、これは、直接操作またはアニメーションを付けるというよりも、リグロジックでTransformObjectを駆動させる場合に使用します。 また、駆動されるモーションの上にアニメーションを重ねることができるようにするために、 t / r / s のポートが解放されます。
-
restlocal ポートでトランスフォーム行列を指定し、そのトランスフォーム行列を使用して、TransformObjectの初期の位置と向きを設定する方法。 t / r / s トランスフォーム、 local トランスフォームは、この座標フレームを基準に適用されます。 実際に、この restlocal ポートは、TransformObjectに対して初期トランスフォームを設定すると同時に、他のトランスフォームポート( t / r / s 、 local )をアニメーションで使用することができます。
restlocal の使用例を挙げるとすれば、ジョイント階層で、ジョイントの(親を基準とした)位置と向きを restlocal に格納します。 これでジョイントのRest(静止)トランスフォームを設定することができます。 詳細は、スケルトンからRest(静止)トランスフォームを更新するの説明を参照してください。
-
xform ポートにワールド空間トランスフォーム行列を指定して、 t / r / s ポートや local / restlocal ポートで設定されたローカルトランスフォームを上書きする方法。 そのTransformObjectは xform 入力のトランスフォームに拘束されます。 詳細は、拘束を参照してください。
デフォルトでは、 xform はトランスフォームのすべてのコンポーネントを上書きします。 xformmask ポートに適切なビットマスクを指定することで、移動、回転、スケールのコンポーネントを組み合わせたトランスフォームを拘束することもできます。 詳細は、トランスフォームコンポーネントの拘束を参照してください。
xformmask
適用される上書き
0
上書きなし
1
移動
2
回転
3
回転、移動
4
スケール
5
スケール、移動
6
スケール、回転
7
スケール、回転、移動
ローカルトランスフォーム ¶
TransformObjectのローカル空間トランスフォームの作成過程では、すべてのトランスフォーム構築オプションを同時に使用することができます。 TransformObjectは、 t 、 r 、 s のポートを、 local および restlocal のトランスフォーム行列と組み合わせる際に、以下の計算式を使用します:
localxform = (scale * local.scale * restlocal.scale) *
(local.shear + restlocal.shear) *
(rotate * translate) *
(rotate.local * translate.local) *
(rotate.restlocal * translate.restlocal)実質的に、 restlocal トランスフォームは local トランスフォームの親として機能し、 local トランスフォームは t 、 r 、 s のポートで表現されたトランスフォームの親として機能します。 ただし、 local および restlocal トランスフォームのスケールとシアーは、 s ポートのスケールと局所的に組み合わされます。
この計算式に基づいてトランスフォームを組み合わせることで、オブジェクトの“静止ローカルトランスフォーム”を検討する際に役立つ特性が得られます。 例えば、TransformObjectがプロップを表している場合、そのプロップの restlocal トランスフォームを、以前のアニメーション位置に影響を与えることなくスケールさせることができます。 同時に、この挙動によって、プロップが不均一にスケールされた状態で回転した際に、意図しないシアーが生じるのを防ぐことができます。 xform ポートが接続されている場合、ローカルトランスフォームは拘束の影響を反映するように更新されます。
トランスフォーム階層 ¶
TransformObjectノードを親子形式で接続することで、トランスフォーム階層を作成することができます。 親子関係は、親TransformObjectノードと子TransformObjectノード間に2本のコネクションを作成することで確立されます:
-
親TransformObjectノードの xform → 子TransformObjectノードの parent
-
親TransformObjectノードの localxform → 子TransformObjectノードの parentlocal
xform 出力ポートは、そのTransformObjectのワールド空間トランスフォーム行列を生成します。 親TransformObjectノードの xform 出力を子TransformObjectノードの parent 入力に接続することで、その子は親のワールド空間行列にアクセスすることができます。
localxform 出力ポートは、トランスフォームの構築で説明されているすべての入力トランスフォームポートの組み合わせを表現したローカルトランスフォーム行列を生成します。 親TransformObjectノードの localxform 出力を子TransformObjectノードの parentlocal 入力に接続することで、スケールの継承が可能になり、その子は親のローカルスケール寄与度にアクセスすることができます。
スケールの継承 ¶
親のTransformObjectをスケールさせると、その子もそのスケールの影響を継承します。 様々なリグの挙動を簡素化するために親のスケーリングの効果を調整するのが役立つ場合があります。 そのような場合だと、 scaleinheritance ポートに適切なオプションを設定することで、スケールの継承の挙動を以下のように設定することができます:
0 - デフォルトのスケーリング
スケーリングが親から通常通りに継承されます。
xform = localxform * parent
1 - オフセットのみ
子の位置のみがスケーリングの影響を受けます。
xform = localxform.scale * localxform.rotate *
inverse(parentlocal.scale) * localxform.translate * parent
Tip
これは、MayaのSegment Scale Compensationと同様です。
2 - オフセットとスケール
子の位置は、 オフセットのみ オプションと同様にスケールされ、 親のローカルスケールは、子のローカル空間で適用されます。 もし親がX方向に2倍スケールされると、子は自身のX方向で2倍のスケールが適用されます。
xform = parentlocal.scale * localxform.scale * localxform.rotate *
inverse(parentlocal.scale) * localxform.translate * parent
localxform = parentlocal.scale * localxform
Tip
これは、Softimageの階層スケーリングと同様です。
3 - スケールのみ
オフセットとスケール オプションと同様に、同じローカルスケーリングが適用されますが、子の移動は影響を受けないままとなります。
xform = parentlocal.scale * localxform *
inverse(parentlocal.scale) * parent
localxform = parentlocal.scale * localxform
4 - 親スケーリングを無視
親からスケーリングを継承しません。
xform = localxform * inverse(parentlocal.scale) * parent
TransformObject出力ポート ¶
一般的に、TransformObjectによって生成されたワールド空間トランスフォーム行列を表現する xform 出力ポートは、ほとんどのリギング用途において使用するはずです。 ただし、1つ例外があります。それは、トランスフォーム階層をサポートするために、 localxform 出力ポートを子のTransformObjectに接続する必要がある場合です。
TransformObjectのその他の出力ポートは、リグの逆変換ワークフロー(例えば、モーションリターゲティング)をサポートするために存在しています。 多くの出力ポートには、別の意味に解釈してしまうような一般的な名前が付けられているため、これらのポートを使用する際は、ドキュメントの説明に特に注意を払ってください。
入力 ¶
parent:
Matrix4
親のワールド空間行列。 現在のTransformObjectを子として親子関係を確立する場合、このポートを親のTransformObjectの xform 出力ポートに接続してください。
parentlocal:
Matrix4
親のローカル空間行列。 現在のTransformObjectを子として親子関係を確立する場合、このポートを親のTransformObjectの localxform 出力ポートに接続してください。
scaleinheritance:
Int
子に対する親のローカルスケーリングの影響を制御します。 スケールの継承を参照してください。
xform:
Matrix4
TransformObjectのワールド空間での位置、スケール、向きを上書きするトランスフォーム行列。 これと xformmask を組み合わせて使用することで、TransformObjectのスケール、回転、移動のコンポーネントを選択的に設定することができます。
t:
Vector3
TransformObjectのローカル空間での位置を設定する移動値。
r:
Vector3
TransformObjectのローカル空間での向きを設定するオイラー角(単位は度)。 この回転順は、 rord ポートで設定します。
s:
Vector3
TransformObjectのローカル空間でのスケールを設定するスケール値。
local:
Matrix4
t 、 r 、 s のポートと同じ役割を果たすトランスフォーム行列。 local ポートを使用すると、TransformObjectをリグロジックで駆動させつつ、入力ポートである t 、 r 、 s をさらなるアニメーション用に解放することができます。 local は、ローカル空間におけるTransformObjectの restlocal 行列に対する追加オフセットとしても理解できます。
restlocal:
Matrix4
TransformObjectに対してローカル空間での初期の位置、スケール、向きを適用するトランスフォーム行列。 t / r / s 入力や local 入力からのトランスフォームは、この座標フレームを基準に適用されます。
xord:
Int
t 、 r 、 s の入力/出力ポート両方のトランスフォーム順を設定します。 デフォルトのトランスフォーム順は、スケール → 回転 → 移動です。 トランスフォーム順を参照してください。
rord:
Int
r の入力/出力ポートで指定されたオイラー角の回転順を設定します。 デフォルトの回転順は、X → Y → Zです。 回転順を参照してください。
xformmask:
Int
トランスフォームの特定のコンポーネントを上書きするために xform 行列入力と組み合わせて使用するビットマスク。 1桁目のビットは移動を上書きし、2桁目のビットは回転を上書きし、3桁目のビットはスケールを上書きします。 デフォルトでは、3ビットすべてが設定されています。 xformmaskテーブルを参照してください。
出力 ¶
xform:
Matrix4
TransformObjectのワールド空間トランスフォーム行列。
localxform:
Matrix4
TransformObjectのローカル空間トランスフォーム行列(例えば、xform = localxform * parent)。
Warning
スケールの継承がデフォルト以外の値を使用した場合、下位の階層に適切に再適用されるようにするために、この localxform は追加の親ローカルスケーリングを考慮して修正されます。
この場合、 localxform は、 実効的なローカルトランスフォーム を表現し、以前のxform = localxform * parentの関係性はもはや正しくありません。
以前のxform = localxform * parentの関係性を維持する localxform を計算したいのであれば、localxform = xform * inverse(parent)の式を使用すると良いです。
restlocal:
Matrix4
local 入力と restlocal 入力のトランスフォームの組み合わせです(ローカルトランスフォームを参照)。 この行列は、トランスフォーム階層における親オブジェクトに対するTransformObjectの初期位置と向きを表します。 t 、 r 、 s 入力ポートのアニメーションは、このローカル座標系で適用されます。
t:
Vector3
t 入力ポートによってローカル空間でのTransformObjectに適用される移動。 TransformObjectに拘束が設定されている場合、 t は、その拘束の動きと同等のアニメーションを生成する移動を意味します。 この t の値は、拘束のない同等のTransformObjectの t 入力ポートに適用することで、あたかも元の拘束がアニメーションにベイクされているかのような動きを生成することができます。
r:
Vector3
r 入力ポートによってローカル空間でのTransformObjectに適用されるオイラー角(単位は度)。 回転順は、 rord 入力値に従います。 TransformObjectに拘束が設定されている場合、 r は、その拘束の動きと同等のアニメーションを生成する回転を意味します。 この r の値は、拘束のない同等のTransformObjectの r 入力ポートに適用することで、あたかも元の拘束がアニメーションにベイクされているかのような動きを生成することができます。
s:
Vector3
s 入力ポートによってローカル空間でのTransformObjectに適用されるスケール。 TransformObjectに拘束が設定されている場合、 s は、その拘束の動きと同等のアニメーションを生成するスケールを意味します。 この s の値は、拘束のない同等のTransformObjectの s 入力ポートに適用することで、あたかも元の拘束がアニメーションにベイクされたかのような動きを生成できます。
| See also |