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

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

Transform XYZ CHOP のパラメータ画面と XYZ 座標変換の概要図

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

概要 📖 – 3D 座標・ベクトルの変換

Transform XYZ CHOPは、入力されたチャンネル値を 3D 座標またはベクトルとして解釈し、Translate / Rotate / Scale / Pivot 変換を適用する CHOPです。Transform Order と Rotate Order を明示的に指定でき、入力 1 から行列を受け取って合成することも可能です。

主な用途 🎯

  • 3D 座標値(tx, ty, tz チャンネル)の Translate / Rotate / Scale 変換
  • ベクトル値の回転・スケーリング(Translate は適用せず方向のみ変換)
  • Transform Order と Rotate Order による行列乗算順序の明示的制御
  • Pivot 指定による任意点を中心とした回転・スケール
  • 入力 1 の Transform を変換ソースに使用し、Pre Operation(Invert / Transpose)で行列を加工

データフロー 🔄

入力 0: 座標 / ベクトルチャンネル(tx, ty, tz など)

Normalize(ベクトル時の事前正規化)

入力 1 の Transform Matrix と合成(Pre Operation: Invert / Transpose)

Transform Page の Translate / Rotate / Scale / Pivot 適用

Multiply Order で乗算順序を確定

Output Page の Normalize / Un-matched Channels 処理

出力: 変換後の座標 / ベクトル

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Input Page 📥

Input 0 Type .input0type 🔀

入力 0 のチャンネル値を座標として扱うかベクトルとして扱うかを決定するメニュー

項目 内部名 説明
Position .position 入力 0 の値を座標として扱う(Translate も適用される)
Vector .vector 入力 0 の値をベクトルとして扱う(Translate は適用されず、回転・スケールのみ)

Normalize (入力側) .innormalize 📐

入力 0 がベクトルのときの事前正規化:

  • Normalize: オンにすると、入力 0 がベクトルの場合に変換前に長さ 1 に正規化

Custom Input Order .custinputorder 🎛️

入力 1 の Transform/Rotate Order を Custom で上書き:

  • Custom Input Order: オンにすると、入力 1 の順序を Input Page の Transform Order / Rotate Order で上書き

Transform Order (入力 1) .inxord 🔢

入力 1 の Transform を解釈するときの Translate / Rotate / Scale 適用順序

項目 内部名 説明
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 (入力 1) .inrord 🔁

入力 1 の回転を解釈するときの X / Y / Z 軸回転の適用順序

項目 内部名 説明
Rx Ry Rz .xyz Rz * Ry * Rx の順で回転行列を合成
Rx Rz Ry .xzy Ry * Rz * Rx の順
Ry Rx Rz .yxz Rz * Rx * Ry の順
Ry Rz Rx .yzx Rx * Rz * Ry の順
Rz Rx Ry .zxy Ry * Rx * Rz の順
Rz Ry Rx .zyx Rx * Ry * Rz の順

Input 1 Pre Operation .input1preop 🔄

入力 1 の Transform を、他の Transform と合成する前に加工する単項演算

項目 内部名 説明
None .none 何もしない(パススルー)
Invert .invert Transform を逆行列に置換
Transpose .transpose Transform を転置(行列形式の Transform のみ有効)
Invert Transpose .inverttranspose Invert と Transpose を同時に適用(行列形式の Transform のみ Transpose が有効)

Transform Page 🔧

Transform Order .xord 🔢

Transform Page の Translate / Rotate / Scale を適用する順序を決定するメニュー

項目 内部名 説明
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 🔁

X / Y / Z の各軸回転を合成するときの順序

項目 内部名 説明
Rx Ry Rz .xyz Rz * Ry * Rx の順で回転行列を合成
Rx Rz Ry .xzy Ry * Rz * Rx の順
Ry Rx Rz .yxz Rz * Rx * Ry の順
Ry Rz Rx .yzx Rx * Rz * Ry の順
Rz Rx Ry .zxy Ry * Rx * Rz の順
Rz Ry Rx .zyx Rx * Ry * Rz の順

Translate / Rotate / Scale / Pivot 🧮

Translate .t ➡️
– 入力座標に加算する XYZ 方向の平行移動量
– 入力 0 が Vector 型のときは適用されない

  • tx: X 軸方向の平行移動
  • ty: Y 軸方向の平行移動
  • tz: Z 軸方向の平行移動

Rotate .r 🔄
– 各軸まわりの回転角(度数法)
– 適用順序は Rotate Order パラメータで決定

  • rx: X 軸まわりの回転(度)
  • ry: Y 軸まわりの回転(度)
  • rz: Z 軸まわりの回転(度)

Scale .s 🔍
– 各軸方向のスケーリング係数
– 負の値で反転、0 で潰れる

  • sx: X 軸方向のスケール係数
  • sy: Y 軸方向のスケール係数
  • sz: Z 軸方向のスケール係数

Pivot .p 📍
– Rotate / Scale を行う基準点(XYZ 座標)
– デフォルトは原点(0, 0, 0)

  • px: ピボットの X 座標
  • py: ピボットの Y 座標
  • pz: ピボットの Z 座標

Pre Operation .preop ♻️

Transform Page 行列の Invert オプション:

  • Pre Operation: オンにすると、Transform Page の行列を Invert(逆行列)してから合成

Multiply Order .multiplyorder ✖️

入力側 Transform と Transform Page 側 Transform をどの順序で乗算するか

項目 内部名 説明
Input, then Transform Page .inputxformpage Transform Page * Input の順(入力を先に Transform Page で変換)
Transform Page, then Input .xformpageinput Input * Transform Page の順(Transform Page を先に Input で変換)

Output Page 📤

Un-matched Channels .unmatchedchans

Transform 形式の命名規則(tx / ty / tz / rx / ry / rz / sx / sy / sz など)に一致しないチャンネルの扱い

項目 内部名 説明
Warn .warn 命名規則に合わないチャンネルが見つかったら警告を出す
Ignore .ignore 命名規則に合わないチャンネルを警告なしで無視
Delete .delete 命名規則に合わないチャンネルを削除

Normalize (出力側) .normalize 📐

変換後ベクトルの再正規化:

  • Normalize: オンにすると、変換後のベクトルを長さ 1 に再正規化

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: オブジェクトの軌道アニメーション 🛰️

LFO CHOP (rx, ry, rz) → Transform XYZ CHOP (Pivot=原点) → Geometry COMP

LFO CHOP で生成した角度を Transform XYZ CHOP に流し、Pivot を原点に設定して任意点を中心に周回させる基本パターン。Pivot を被写体側に移すと自転、原点側に置けば公転になります。

  1. LFO CHOP を 3 個(rx / ry / rz)または 3 チャンネル CHOP として用意
  2. Transform XYZ CHOP の Rotate(r)に LFO の値を Export
  3. Pivot を (0, 0, 0) に設定し原点中心の回転を有効化
  4. 出力チャンネル(tx, ty, tz)を Geometry COMP の Transform へ接続
  5. Rotate Order を xyz から zyx へ変えてジンバルロック挙動の違いを確認

Example 2: センサー姿勢ベクトルの座標系変換 📡

Serial CHOP (acc_x, acc_y, acc_z) → Transform XYZ CHOP (Input 0 Type=Vector) → Render TOP

IMU センサーから取得した加速度ベクトルを、TouchDesigner のワールド座標系に合わせて回転変換するパターン。Vector モードでは Translate が適用されず方向のみが変換されるため、姿勢ベクトルの取扱いに適しています。

  1. Serial CHOP で acc_x / acc_y / acc_z の 3 チャンネルを取得
  2. Transform XYZ CHOP の Input 0 Type を Vector に設定
  3. Rotate(r)でセンサー → ワールド座標系のオフセット角を設定
  4. Output Page の Normalize をオンにして長さを 1 に再正規化
  5. 得られた単位ベクトルを Render TOP のライト方向や法線として参照

Example 3: Pivot を移動させた回転スケーリング 🎯

Constant CHOP (tx, ty, tz) → Transform XYZ CHOP (Pivot=対象点, Scale=0.5) → Instancing

オブジェクト群を「ある特定の点」を基準に縮小・回転させたいときの典型パターン。Pivot を対象点に置き、Scale で縮小、Rotate で回転を加えると、Pivot を中心とした収束・拡散アニメーションが作れます。

  1. Constant CHOP で初期座標 tx / ty / tz を用意
  2. Transform XYZ CHOP の Pivot を対象点(例: (5, 0, 0))に設定
  3. Scale を (0.5, 0.5, 0.5) にして Pivot 中心に縮小
  4. Rotate に LFO CHOP を Export して Pivot 中心の回転を加算
  5. 出力を Instancing の Translate チャンネルとして Geometry COMP に接続

Example 4: 入力 1 の Transform を逆行列化して座標系を戻す ♻️

入力 CHOP → Transform XYZ CHOP (入力 1=Object CHOP, Input 1 Pre Operation=Invert) → 元座標系

Object CHOP から取得した別オブジェクトの Transform を逆行列化し、その座標系で表現された値をワールド座標系に戻すパターン。Input 1 Pre Operation の Invert / Transpose を組み合わせると、座標系の前後変換が 1 ノードで完結します。

  1. Object CHOP で参照対象 Geometry の Transform を取得し入力 1 に接続
  2. Transform XYZ CHOP の Input 1 Pre Operation を Invert に設定
  3. Multiply Order を Input, then Transform Page に設定
  4. 入力 0 にローカル座標で表現された値を流し込む
  5. 出力にワールド座標系へ戻された値が得られる

関連オペレータ 🔗

類似機能OP 🔍

  • Object CHOP — Geometry COMP 等の Transform をチャンネル化して取得(Transform XYZ の入力 1 ソース用途で多用)
  • Lookup CHOP — 値域変換に特化(座標変換ではなくテーブル参照)
  • Math CHOP — チャンネル単位の四則演算・Range 変換(行列変換は不可)

組み合わせ推奨OP 🔄

  • LFO CHOP — Rotate に流し込む角度生成ソースとして定番
  • Object CHOP — 他オブジェクトの Transform を入力 1 として受け取る
  • Constant CHOP — Translate / Pivot 等の固定値ソースに使用
  • Filter CHOP — Rotate / Translate に流す前にスムージング
  • Trail CHOP — 変換後の軌跡を時系列で記録

前処理・後処理CHOP 🎯


Info CHOP情報 📊

Transform XYZ 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: Translate を設定しているのに位置が変わらない
✅ Solution:

  • Input 0 Type が Vector になっていないか確認(Vector の場合 Translate は無視される)
  • Position として扱いたい場合は Input 0 Type を Position に変更
  • 前段で Math CHOP 等で値域が 0 倍されていないか確認

❌ Problem: Rotate Order を変えると結果が大きく変わる / ジンバルロックが発生する
✅ Solution:

  • Rotate Order は X / Y / Z の合成順序を決めるため、最終姿勢が変わるのは正常動作
  • 3 軸のうち 2 軸が重なるジンバルロック回避には、Object CHOP の Quaternion 経由など別アプローチを検討
  • 用途で最も自然な順序(多くは xyz)を 1 つ選んで固定し、上流で角度を生成する側に責任を寄せる

❌ Problem: Pivot を変えても回転中心が変わらない
✅ Solution:

  • Rotate / Scale が 0 のままだと Pivot の効果が見えないので、まず Rotate に値を入れて確認
  • Transform Order が srt 以外の場合、Pivot の影響タイミングが変わるので順序も併せて確認
  • Pivot は Transform Page 内のみ有効。入力 1 側の Pivot 効果は Object CHOP 側で吸収される

❌ Problem: Un-matched Channels の警告が大量に出る
✅ Solution:

  • 入力チャンネル名が tx / ty / tz / rx 等の Transform 命名規則と一致しているか確認
  • Rename CHOP で命名を tx 系に揃えるか、Un-matched Channels を Ignore / Delete に変更
  • 前段の Math CHOP / Rename CHOP の出力チャンネル名を確認

❌ Problem: 入力 1 の Transform が想定外に作用する
✅ Solution:

  • Multiply Order が Input, then Transform PageTransform Page, then Input どちらかで合成順が変わる
  • Input 1 Pre Operation を Invert / Transpose に切替えて意図と一致するか確認
  • 入力 1 の Transform Order / Rotate Order が想定と違う場合は Custom Input Order を有効化して上書き

参考資料 📚

その他 🔗

公式リソース 📖

この記事は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をコピーしました