Houdini 20.0 ノード APEXノード

TransformObject

リグ内のトランスフォームの階層を表現/構築します。

On this page
Since 20.0

TransformObjectノードは、エレメントのトランスフォームの挙動(エレメント間のトランスフォーム階層の定義など)を管理します。 他にも、定義されたトランスフォーム順を使って移動/回転/スケールするといったアニメーションさせやすいトランスフォームコンポーネント入力を扱うこともできます。 TransformObjectノードをグラフ内に配置してそれらのパラメータを プロモートさせると (グラフ内のinputノードに接続すると)、 そのTransformObjectエレメントは、Animateステートでピックアップされるようになり、コントロールに変換されます。 要するに、ユーザが操作できるものとして表示されます。

詳細は、コントロールを参照してください。

トランスフォームの構築

TransformObjectノードで表現されるトランスフォームは、いくつかの色々な方法で構築することができます:

  1. 移動、回転、スケールの値をそれぞれ trs のポートに接続する方法。

    この方法だと、そのTransformObjectノードをAnimateステートでコントロールとして操作できるようになります。 trs のどれかのポートをプロモートさせると(グラフ内のinputノードに接続すると)、そのTransformObjectエレメントは、Animateステートでピックアップされるようになり、コントロールに変換されます。 Animateステートに入ると、そのコントロールにハンドルが用意され、そのハンドルを操作すると、それに応じた trs の値が更新されます。

    トランスフォーム順(移動、回転、スケールの処理が適用される順番)は、 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

  2. local ポートでトランスフォームマトリックスを指定する方法。これによって trs のポート接続と同じことができます。

    この方法は、トランスフォームデータが既にマトリックス形式で表現されている場合に役立ちます。 たいていの場合、これは、直接操作またはアニメーションを付けるというよりも、リグロジックでTransformObjectを駆動させる場合に使用します。

    Note

    trs のポートの方が local ポートよりも優先されます。 trs のどれかのポートの入力が接続されているだけで、 local ポートは無視されます。

  3. restlocal ポートでトランスフォームマトリックスを指定し、そのトランスフォームマトリックスを使用して、TransformObjectの初期の位置と向きを設定する方法。 t / r / s トランスフォーム、 local トランスフォームは、この座標フレームを基準に適用されます(事前乗算されます)。 実際に、この restlocal ポートは、TransformObjectに対して初期トランスフォームを設定すると同時に、他のトランスフォームポート( t / r / slocal )をアニメーションで使用することができます。

    restlocal の使用例を挙げるとすれば、ジョイント階層で、ジョイントの(親を基準とした)位置と向きを restlocal に格納します。 これでジョイントのRest(静止)トランスフォームを設定することができます。 詳細は、スケルトンからRest(静止)トランスフォームを更新するの説明を参照してください。

  4. 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 / slocal )がアニメーションで使いやすくなるようにクリアにします。

xord: Int

trs の入力/出力ポート両方のトランスフォーム順を設定します。 デフォルトのトランスフォーム順は、スケール → 回転 → 移動です。 トランスフォーム順を参照してください。

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

APEXノード