
概要 📖 – トランスフォーム合成と座標変換
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)
↓
出力: 指定フォーマットのトランスフォームチャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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) で
xordとrord、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 する。
- Constant CHOP に
tx,ty,tz,rx,ry,rzのチャンネルを作成 - Transform CHOP に接続し、Transform Order を Scale Rotate Translate (srt)、Rotate Order を Rx Ry Rz (xyz) に設定
- Output を Transform (Euler) のままにして t/r/s チャンネルを出力
- Camera COMP のトランスフォームパラメータに CHOP Export して連動させる
Example 2: Look At でターゲットを追尾する 👁️
Target Object → Transform CHOP (Look At + Forward Direction = +Z) → Camera COMP
ターゲットオブジェクトを Look At に指定するだけで、Camera 側の回転をリアルタイムに計算してくれる。
- シーン内に注視対象の Null COMP を配置 (例:
/project1/target) - Transform CHOP の Look At にそのパスを指定
- Forward Direction を +Z、Up Vector を
(0, 1, 0)に設定 - Output を Transform (Euler) にしてカメラの回転に接続
- ターゲットを移動させるとカメラの回転が自動で追従する
Example 3: Quaternion Slerpで姿勢を補間 🪄
ポーズ A 用 CHOP & ポーズ B 用 CHOP → Transform CHOP (Input Operation: Quaternion Slerp, Input Weight) → Geometry COMP
Euler 角の直接補間ではジンバルロック気味のブレが出やすい。Slerp なら最短弧で滑らかに 2 つの姿勢を補間できる。
- ポーズ A とポーズ B を別々の CHOP として用意 (t/r/s チャンネル)
- Transform CHOP の Input 0 / Input 1 に接続
- Input Operation を Quaternion Slerp、Input Weight を 0〜1 のアニメーション値に設定
- 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 に入る。
- Transform CHOP の Output を 4×4 Matrix に設定
- Include Order Channels をオフにして 16 チャンネルのみに整える
- 後段で CHOP to TOP または Uniform 経由で GLSL TOP に転送
- シェーダ側で
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 🎯
- 前処理: Constant CHOP、LFO CHOP、Noise CHOP、Math CHOP、Hold CHOP
- 後処理: Filter CHOP、Lag CHOP、Limit CHOP、Null CHOP、Trail CHOP
Info CHOP情報 📊
Transform CHOPは Info CHOP による詳細情報取得に対応しています。
CHOP固有情報 🎚️
start: CHOPインターバルの開始(サンプル単位)length: CHOPのサンプル数sample_rate: フレーム毎秒のサンプルレートnum_channels: CHOPのチャンネル数time_slice: タイムスライス有効時は1、無効時は0export_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 にして、命名規約に合わないチャンネルを除去
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

