Transform CHOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Transform CHOP の座標変換機能を示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – トランスフォーム合成と座標変換

Transform CHOPは、入力トランスフォームを合成し、Translate / Rotate / Scale パラメータを掛け合わせて任意のフォーマットで出力する CHOPです。Transform Order や Rotate Order の切り替え、Quaternion / Matrix 形式での出力、Look At による注視制御まで 1 オペレータで完結します。

主な用途 🎯

  • Translate / Rotate / Scale チャンネルを合成して 1 つのトランスフォームに統合
  • 複数入力トランスフォームの合成 (Input 0 と Input 1 の連結 / Lerp / Slerp)
  • 出力フォーマット変換 (Euler / Quaternion / 4×4 Matrix / 3×3 Matrix / Position)
  • Look At によるオブジェクトの注視 (カメラのターゲット追従)
  • Transform Order / Rotate Order を切り替えた行列計算の制御

データフロー 🔄

入力: t/r/s チャンネル または トランスフォーム形式

Input Pre Operation (invert / transpose)

Input 0 と Input 1 の合成 (Lerp / Slerp / 連結)

Transform Page の t/r/s/p 適用

Xform Matrix / Look At 合成

Post Operation

出力フォーマット変換 (Euler / Quaternion / Matrix / Position)

出力: 指定フォーマットのトランスフォームチャンネル

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Input Page 📥

Custom Input Orders .custinputorders 🔀

入力に Transform Order / Rotate Order が含まれる場合、それを無視して下記のカスタム順序で上書きするかどうか

項目 内部名 説明
Custom Input Orders .custinputorders オン: 下の Transform Order / Rotate Order を入力に強制適用。オフ: 入力に付随する順序チャンネルを尊重する。

Transform Order (Input) .inxord 🔢

入力トランスフォームの T / R / S 適用順序。列ベクトル規約では Scale Rotate Translate は T * R * S * Position として合成される

項目 内部名 説明
Scale Rotate Translate .srt T * R * S * Position
Scale Translate Rotate .str R * T * S * Position
Rotate Scale Translate .rst T * S * R * Position
Rotate Translate Scale .rts S * T * R * Position
Translate Scale Rotate .tsr R * S * T * Position
Translate Rotate Scale .trs S * R * T * Position

Rotate Order (Input) .inrord 🌀

入力トランスフォームの各軸回転を合成する順序。Rx Ry Rz の場合は R = Rz * Ry * Rx

項目 内部名 説明
Rx Ry Rz .xyz R = Rz * Ry * Rx
Rx Rz Ry .xzy R = Ry * Rz * Rx
Ry Rx Rz .yxz R = Rz * Rx * Ry
Ry Rz Rx .yzx R = Rx * Rz * Ry
Rz Rx Ry .zxy R = Ry * Rx * Rz
Rz Ry Rx .zyx R = Rx * Ry * Rz

Input 0 Pre Operation .input0preop 🔄

Input 0 のトランスフォームを他と合成する前に適用する前処理

項目 内部名 説明
None .none 何もしない
Invert .invert トランスフォームを反転 (逆行列)
Transpose .transpose 転置。マトリクス形式のトランスフォームでのみ有効
Invert Transpose .inverttranspose 反転 + 転置。転置はマトリクス形式入力のみ有効

Input 1 Pre Operation .input1preop 🔁

Input 1 のトランスフォームを他と合成する前に適用する前処理

項目 内部名 説明
None .none 何もしない
Invert .invert トランスフォームを反転 (逆行列)
Transpose .transpose 転置。マトリクス形式のトランスフォームでのみ有効
Invert Transpose .inverttranspose 反転 + 転置。転置はマトリクス形式入力のみ有効

Input Operation .inputoperation 🔗

Input 0 と Input 1 のトランスフォーム同士をどう合成するか。Position に適用される最終形は input1 * input0 * Position なので Input 0 → Input 1 の順で適用される

項目 内部名 説明
Input 0, then Input 1 .input0input1 input1 * input0。Position に対して Input 0 が先に適用される標準順序
Input 1, then Input 0 .input1input0 input0 * input1。逆順での合成
Quaternion Lerp .quatlerp クォータニオン線形補間 (Input Weight で 2 入力をブレンド)
Quaternion Slerp .quatslerp クォータニオン球面線形補間 (滑らかな回転ブレンド)

Input Weight .inputweight ⚖️

Input Operation のブレンド重み:

  • Input Weight: Quaternion Lerp / Slerp 等のブレンド型 Input Operation で使用する重み (0〜1)

Transform Page 🎚️

Transform Order .xord 🔢

このページで指定した T / R / S を合成する順序

項目 内部名 説明
Scale Rotate Translate .srt T * R * S * Position
Scale Translate Rotate .str R * T * S * Position
Rotate Scale Translate .rst T * S * R * Position
Rotate Translate Scale .rts S * T * R * Position
Translate Scale Rotate .tsr R * S * T * Position
Translate Rotate Scale .trs S * R * T * Position

Rotate Order .rord 🌀

このページの回転 r[xyz] を合成する順序

項目 内部名 説明
Rx Ry Rz .xyz R = Rz * Ry * Rx
Rx Rz Ry .xzy R = Ry * Rz * Rx
Ry Rx Rz .yxz R = Rz * Rx * Ry
Ry Rz Rx .yzx R = Rx * Rz * Ry
Rz Rx Ry .zxy R = Ry * Rx * Rz
Rz Ry Rx .zyx R = Rx * Ry * Rz

Transform / Rotate / Scale / Pivot .trsp 📐

Translate .t ➡️
– XYZ 方向の平行移動量 (tx, ty, tz)
– オブジェクトの位置オフセットを与える

Rotate .r 🔄
– XYZ 軸まわりの回転角 (度単位、rx, ry, rz)
– Rotate Order に従って軸の合成順序が決まる

Scale .s 🔍
– XYZ 軸方向の拡大縮小倍率 (sx, sy, sz)
– 1.0 が等倍、負値で反転

Pivot .p 📍
– 回転・スケーリングの基準点 (px, py, pz)
– デフォルトの原点以外を中心に変換したいときに指定

Xform Matrix/CHOP/DAT .xformmatrixop 🧮

外部 OP からトランスフォームを取り込む参照先:

  • Xform Matrix/CHOP/DAT パス: CHOP / DAT のパスを指定すると、その内容を追加のトランスフォームとして合成

Multiply Order .multiplyorder ✖️

入力トランスフォームと Transform Page で指定したトランスフォームの合成順序

項目 内部名 説明
Input, then Transform Page .inputxformpage Transform Page * Input
Transform Page, then Input .xformpageinput Input * Transform Page

Look At .lookat 👁️

注視対象オブジェクトのパス:

  • Look At Object パス: 注視対象オブジェクトのパス。生成されたトランスフォームを適用すると Forward Direction が対象の原点を向く

Up Vector .upvector ⬆️

Look At でオブジェクトを向ける際、Y 軸正方向がどちらを指すかを決めるベクトル

Up Vector .upvector ⬆️
upvectorx, upvectory, upvectorz の 3 成分でアップ方向を指定
– デフォルトは (0, 1, 0) (ワールド Y 軸を上)

Forward Direction .forwarddir 🧭

オブジェクトの「前方」とみなす軸と方向

項目 内部名 説明
+X .posx X 軸正方向を前方
-X .negx X 軸負方向を前方
+Y .posy Y 軸正方向を前方
-Y .negy Y 軸負方向を前方
+Z .posz Z 軸正方向を前方
-Z .negz Z 軸負方向を前方

Pre Operation .preop 🔧

Transform / Rotate / Scale / Pivot から生成したトランスフォームを Xform Matrix / Look At と合成する前に適用する前処理

項目 内部名 説明
None .none 何もしない
Invert .invert トランスフォームを反転 (逆行列)

Operation .operation 🪢

Transform Page の合成結果と入力トランスフォームをどう組み合わせるか

項目 内部名 説明
Input, then Transform Page .inputxformpage Transform Page * Input
Transform Page, then Input .xformpageinput Input * Transform Page
Quaternion Lerp .quatlerp クォータニオン線形補間で 2 つをブレンド
Quaternion Slerp .quatslerp クォータニオン球面線形補間で滑らかにブレンド

Weight .weight ⚖️

Operation のブレンド重み:

  • Weight: Quaternion Lerp / Slerp 等のブレンド型 Operation で使用する重み (0〜1)

Output Page 📤

Post Operation .postop 🛠️

最終出力直前に適用する後処理

項目 内部名 説明
None .none 何もしない
Invert .invert トランスフォームを反転 (逆行列)
Transpose .transpose 転置。マトリクス形式のトランスフォームでのみ有効
Invert Transpose .inverttranspose 反転 + 転置。転置はマトリクス形式のみ有効

Output .output 📤

出力トランスフォームのフォーマット

項目 内部名 説明
Transform (Euler) .transform 標準の t[xyz], r[xyz], s[xyz] チャンネル。Include Order Channels がオンなら xord / rord も同梱
Transform (Quaternion) .transformquat t[xyz], q[xyzw], s[xyz] チャンネル。回転をクォータニオンで表現
4×4 Matrix .mat 列優先 16 チャンネルの 4×4 マトリクス。最後の 4 チャンネルが平行移動成分
3×3 Matrix .mat3 9 チャンネルの 3×3 マトリクス。回転とスケールのみで平行移動を含まない
Position .position 空間内の最終位置のみを出力。向き情報は含まない

Determinant .determ 🧾

マトリクス出力時の行列式同時出力:

  • Determinant: オン: マトリクス出力に行列式チャンネルを追加。オフ: 出力しない

Un-matched Channels .unmatchedchans ⚠️

出力フォーマットの命名規約 (t[xyz], r[xyz] 等) にマッチしない入力チャンネルの扱い

項目 内部名 説明
Warn .warn マッチしないチャンネルがあれば警告
Ignore .ignore 警告を出さずそのまま通過させる
Delete .delete 命名規約に合わないチャンネルを削除

Custom Output Orders .custoutputorders 🔀

出力トランスフォームに別の Transform Order / Rotate Order を当てるかどうか

項目 内部名 説明
Custom Output Orders .custoutputorders オン: 下の Transform Order / Rotate Order を出力に適用 (合成結果は同一だがチャンネル値は変わる)。オフ: Transform Page と同じ順序で出力。

Transform Order (Output) .outxord 🔢

出力時の T / R / S 合成順序

項目 内部名 説明
Scale Rotate Translate .srt T * R * S * Position
Scale Translate Rotate .str R * T * S * Position
Rotate Scale Translate .rst T * S * R * Position
Rotate Translate Scale .rts S * T * R * Position
Translate Scale Rotate .tsr R * S * T * Position
Translate Rotate Scale .trs S * R * T * Position

Rotate Order (Output) .outrord 🌀

出力時の回転 r[xyz] 合成順序

項目 内部名 説明
Rx Ry Rz .xyz R = Rz * Ry * Rx
Rx Rz Ry .xzy R = Ry * Rz * Rx
Ry Rx Rz .yxz R = Rz * Rx * Ry
Ry Rz Rx .yzx R = Rx * Rz * Ry
Rz Rx Ry .zxy R = Ry * Rx * Rz
Rz Ry Rx .zyx R = Rx * Ry * Rz

Include Order Channels .includeorderchans 🏷️

順序チャンネルの同梱可否:

  • Include Order Channels: オン: Transform (Euler) で xordrord、Transform (Quaternion) で xord を同梱。マトリクス / Position 出力では同梱されない

Continuous Rotations .continuousrotations ♾️

回転値の連続化:

  • Continuous Rotations: オン: 360 度 → 1 度のような巻き戻りを避け 360 度 → 361 度として連続化。オフ: 0〜360 の範囲で wrap される

Use Rotation Hint .usehint 💡

回転チャンネルの初期ヒント:

  • Use Rotation Hint: オン: 下の Hint パラメータを起点に解を選ぶ (例: カメラ出力の開始角度を固定)

Hint .hint 🎯

Use Rotation Hint オン時の参照角度 (度単位)

Hint .hint 🎯
hintx, hinty, hintz で各軸の概算開始角度を指定
– 出力回転チャンネルがこの値に近い解を採用するように働く


Common Page 🔧

Time Slice .timeslice ⏱️

Time Slice モードの強制設定:

  • オン: チャンネルを「タイムスライス」モードに強制
  • タイムスライス: 前回のクックフレームから現在のクックフレームまでの時間

Scope .scope 🎯

影響を受けるチャンネルの絞り込み:

  • Scope 文字列: 影響を受けるチャンネルを指定する文字列
  • パターンマッチング: *[1-10] 等のパターンが使用可能

Sample Rate Match .srselect

複数の入力 CHOP のサンプルレートが異なる場合の処理方法

項目 内部名 説明
Resample At First Input’s Rate .first 最初の入力のレートで他をリサンプル
Resample At Maximum Rate .max 最高サンプルレートでリサンプル
Resample At Minimum Rate .min 最低サンプルレートでリサンプル
Error If Rates Differ .err レート不一致でエラー

Export Method .exportmethod 📤

CHOP チャンネルをパラメータに接続する方法

項目 内部名 説明
DAT Table by Index .datindex DAT テーブルのインデックスでチャンネルとパラメータを対応付け
DAT Table by Name .datname DAT テーブルの行名でチャンネルとパラメータを対応付け
Channel Name is Path:Parameter .autoname チャンネル名を `path:parameter` 形式で記述し直接対応付け

Export Root .autoexportroot 🌳

Channel Name is Path:Parameter モード時のパス基点:

  • Export Root パス: autoname モードでチャンネル名のパス部分を相対化する基点 OP のパス

Export Table .exporttable 📋

DAT Table エクスポート方式での参照 DAT:

  • Export Table DAT: datindex / datname モード時に参照する DAT のパス

Rename from .commonrenamefrom 🔤

リネーム対象チャンネルのパターン:

  • Rename from パターン: リネーム対象とするチャンネル名のパターンマッチング文字列

Rename to .commonrenameto 🔁

リネーム後の置換パターン:

  • Rename to パターン: Rename from にマッチしたチャンネルの新しい名前パターン (デフォルトはリネームなし)

実践アイデア 💡

Example 1: カメラの位置と回転を 1 つに束ねる 🎥

Constant CHOP (tx,ty,tz,rx,ry,rz) → Transform CHOP (Output: Transform Euler) → Camera COMP

個別のスライダで動かしている位置・回転チャンネルを Transform CHOP に通し、Transform Order と Rotate Order を明示してカメラへ Export する。

  1. Constant CHOP に tx, ty, tz, rx, ry, rz のチャンネルを作成
  2. Transform CHOP に接続し、Transform Order を Scale Rotate Translate (srt)、Rotate Order を Rx Ry Rz (xyz) に設定
  3. Output を Transform (Euler) のままにして t/r/s チャンネルを出力
  4. Camera COMP のトランスフォームパラメータに CHOP Export して連動させる

Example 2: Look At でターゲットを追尾する 👁️

Target Object → Transform CHOP (Look At + Forward Direction = +Z) → Camera COMP

ターゲットオブジェクトを Look At に指定するだけで、Camera 側の回転をリアルタイムに計算してくれる。

  1. シーン内に注視対象の Null COMP を配置 (例: /project1/target)
  2. Transform CHOP の Look At にそのパスを指定
  3. Forward Direction を +Z、Up Vector を (0, 1, 0) に設定
  4. Output を Transform (Euler) にしてカメラの回転に接続
  5. ターゲットを移動させるとカメラの回転が自動で追従する

Example 3: Quaternion Slerpで姿勢を補間 🪄

ポーズ A 用 CHOP & ポーズ B 用 CHOP → Transform CHOP (Input Operation: Quaternion Slerp, Input Weight) → Geometry COMP

Euler 角の直接補間ではジンバルロック気味のブレが出やすい。Slerp なら最短弧で滑らかに 2 つの姿勢を補間できる。

  1. ポーズ A とポーズ B を別々の CHOP として用意 (t/r/s チャンネル)
  2. Transform CHOP の Input 0 / Input 1 に接続
  3. Input Operation を Quaternion Slerp、Input Weight を 0〜1 のアニメーション値に設定
  4. Output を Transform (Quaternion) もしくは Transform (Euler) で出力し、ジオメトリの姿勢に Export

Example 4: 出力を 4×4 マトリクスにして GLSL に渡す 🧮

Transform CHOP (Output: 4x4 Matrix) → CHOP to TOP / Uniform → GLSL TOP

Euler では扱いづらいワールド変換を、4×4 マトリクスのままシェーダに送り込む。列優先 16 チャンネルなのでそのまま mat4 uniform に入る。

  1. Transform CHOP の Output を 4×4 Matrix に設定
  2. Include Order Channels をオフにして 16 チャンネルのみに整える
  3. 後段で CHOP to TOP または Uniform 経由で GLSL TOP に転送
  4. シェーダ側で mat4 uMatrix として受け取り頂点変換に利用

関連オペレータ 🔗

類似機能OP 🔍

  • Hold CHOP — チャンネル値をフレーム単位で保持。Transform の入力前段で値を固定したいときに使用
  • Math CHOP — 個別の t/r/s チャンネルに対する四則演算・範囲変換に特化、トランスフォーム合成は不可

組み合わせ推奨OP 🔄

  • Constant CHOP — Transform CHOP の入力に与える t/r/s 初期値の生成元
  • Filter CHOP — Transform 出力をスムージングしてカメラ追従の揺れを抑える
  • Lag CHOP — Transform 出力に慣性的な遅延を付与
  • CHOP to TOP — 4×4 Matrix 出力をシェーダ uniform に転送
  • Geometry COMP — Transform 出力をジオメトリのトランスフォームに Export

前処理・後処理CHOP 🎯


Info CHOP情報 📊

Transform CHOPは Info CHOP による詳細情報取得に対応しています。

CHOP固有情報 🎚️

  • start: CHOPインターバルの開始(サンプル単位)
  • length: CHOPのサンプル数
  • sample_rate: フレーム毎秒のサンプルレート
  • num_channels: CHOPのチャンネル数
  • time_slice: タイムスライス有効時は1、無効時は0
  • export_sernum: Export接続の更新回数

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間(ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: Transform Order / Rotate Order を変えたら見た目が崩れた
✅ Solution:

  • Transform Order と Rotate Order は合成順序の指定であり、同じ t/r/s 値でも順序を変えると結果が変わる
  • 入力に xord / rord チャンネルが付随しているか確認し、必要なら Custom Input Orders をオンにして強制
  • 下流の Geometry COMP / Camera COMP 側のオーダーと一致させて確認 (Include Order Channels をオンにして同じ順序を伝搬)

❌ Problem: Look At でターゲットを向かない / 逆を向く
✅ Solution:

  • Forward Direction を確認 (+Z が前のオブジェクトなら +Z、+Y が前なら +Y を選択)
  • Up Vector がターゲット方向と平行になっていないかチェック (平行だとロール解が不定)
  • Operation を Input, then Transform Page にして Look At 結果が後ろから上書きされないか確認

❌ Problem: Quaternion 出力にしたら値が暴れる / 反転する
✅ Solution:

  • Continuous Rotations をオンにして隣接サンプル間の符号反転を抑える
  • Use Rotation Hint + Hint で開始姿勢を固定し、解の選択を安定化させる
  • 前段に Filter CHOP や Lag CHOP を入れ、入力角度をスムージングしてから渡す

❌ Problem: 出力チャンネル数が想定と違う / 不要なチャンネルが混入する
✅ Solution:

  • Output を確認 (Transform Euler は 9〜11ch、Quaternion は 10〜11ch、4×4 Matrix は 16ch、Position は 3ch)
  • Include Order Channels をオフにして xord / rord を出力から外す
  • Un-matched Channels を Delete にして、命名規約に合わないチャンネルを除去

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました