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を駆動させる場合に使用します。
Note
t 、 r 、 s のポートの方が local ポートよりも優先されます。 t 、 r 、 s のどれかのポートの入力が接続されているだけで、 local ポートは無視されます。
-
restlocal ポートでトランスフォームマトリックスを指定し、そのトランスフォームマトリックスを使用して、TransformObjectの初期の位置と向きを設定する方法。 t / r / s トランスフォーム、 local トランスフォームは、この座標フレームを基準に適用されます(事前乗算されます)。 実際に、この restlocal ポートは、TransformObjectに対して初期トランスフォームを設定すると同時に、他のトランスフォームポート( t / r / s 、 local )をアニメーションで使用することができます。
restlocal の使用例を挙げるとすれば、ジョイント階層で、ジョイントの(親を基準とした)位置と向きを restlocal に格納します。 これでジョイントのRest(静止)トランスフォームを設定することができます。 詳細は、スケルトンからRest(静止)トランスフォームを更新するの説明を参照してください。
-
xform ポートにワールド空間トランスフォームマトリックスを指定して、 t / r / s ポートや local ポートで設定されたローカルトランスフォームを上書きする方法。 xform ポートを接続すると、そのTransformObjectは xform 入力のトランスフォームに拘束されます。 詳細は、拘束を参照してください。
デフォルトでは、 xform はトランスフォームのすべてのコンポーネントを上書きします。 xformmask ポートに適切なビットマスクを指定することで、移動、回転、スケールのコンポーネントを組み合わせたトランスフォームを拘束することもできます。 詳細は、トランスフォームコンポーネントの拘束を参照してください。
xformmask
適用される上書き
0
上書きなし
1
移動
2
回転
3
回転、移動
4
スケール
5
スケール、移動
6
スケール、回転
7
スケール、回転、移動
トランスフォーム階層 ¶
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
入力 ¶
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
TransformObjectのローカル空間での位置、スケール、向きを設定するトランスフォームマトリックス。
restlocal:
Matrix4
TransformObjectに対してローカル空間での初期の位置、スケール、向きを適用するトランスフォームマトリックス。 t / r / s 入力や local 入力からのトランスフォームは、この座標フレームを基準に適用されます。 このマトリックスは、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
TransformObjectの restlocal マトリックス入力のコピーを返します。 これは、TransformObjectの初期の位置と向きを設定するのに使用します。
t:
Vector3
t 入力ポート、または、 local マトリックス入力ポートの移動コンポーネントのどちらかでTransformObjectに適用されたローカル空間での移動量。 これは、入力の移動をパススルーさせるのに役立ちます。
r:
Vector3
r 入力ポート、または、 local マトリックス入力ポートの回転コンポーネントのどちらかでTransformObjectに適用されたローカル空間でのオイラー角(単位は度)。 回転順は、 rord 入力ポートで決まります。 これは、入力の回転をパススルーさせるのに役立ちます。
s:
Vector3
s 入力ポート、または、 local マトリックス入力ポートのスケールコンポーネントのどちらかでTransformObjectに適用されたスケール。 これは、入力のスケールをパススルーさせるのに役立ちます。
See also |