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

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

Object CHOP の相対位置計算機能を示す図

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

概要 📖 – オブジェクト間の相対位置・姿勢・距離を計算

Object CHOPは、Target オブジェクトと Reference オブジェクトの相対 Transform・距離・方位を計算してチャンネル出力する CHOPです。Reference 視点から見た Target の位置・回転・距離・方位を一度に取り出せるため、追従カメラやインタラクティブな物理表現の基盤として利用されます。

主な用途 🎯

  • 2 つのオブジェクト間の相対 Transform 取得(位置・回転・スケールを CHOP チャンネル化)
  • Bearing(方位角)の算出(Reference オブジェクトから Target を向くための回転値)
  • オブジェクト間距離の取得(直線距離・逆二乗距離による物理シミュレーション補助)
  • カメラ・キャラクタ追従ロジック(Reference カメラから Target キャラへの向きを毎フレーム計算)
  • 4×4 / 3×3 行列の取得(後段の Transform 系処理や CHOP to TOP 経由 GPU シェーダへの供給)

データフロー 🔄

入力: Target Object + Reference Object(DAT Table または個別指定)

Compute モード選択(Transform / Matrix / Measurements)

Transform / Matrix / Measurement の算出

Transform Order / Rotate Order によるチャンネル整形

出力: 相対値チャンネル群

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Object Page 🎯

Target / Reference 指定 🎯

DAT Table .dat 📋
– 複数の Target / Reference ペアを一括指定するための Table DAT のパス
– 1 列目に Target、2 列目に Reference を記述(ヘッダ行なし)

Target Object .target 🎯
– Reference オブジェクトとの相対位置を計算する対象 OP のパス
– 文字列として記述可能で、式や変数も利用できる

Reference Object .reference 📍
– 比較の原点となる OP のパス
– 文字列として記述可能で、式や変数も利用できる

Swap Target / Reference .swaptargetreference 🔄
– Target Object と Reference Object を入れ替える
– 計算方向を反転したいときに使用


Output Page 📤

Compute .compute 🧮

オブジェクトから取得する情報の種別を選択するメニュー

項目 内部名 説明
Transform (Euler) .transform オイラー角(rx, ry, rz)を用いた Transform を出力
Transform (Quaternion) .transformquat クォータニオン(qx, qy, qz, qw)を用いた Transform を出力
4×4 Matrix .mat 4×4 の Transform 行列を出力
3×3 Matrix .mat3 スケール・回転を含む 3×3 行列を出力(平行移動成分は含まれない)
Measurements .measure 下記トグルを有効化して測定項目を選択。Reference オブジェクトを原点・Z 軸基準とした座標系における Target の位置を取得する

Measurements 出力チャンネル 📐

Compute = Measurements 時に有効になる出力項目トグル

Position .translate 📍
– Reference オブジェクトから Target オブジェクトへの変位(移動量)
– tx, ty, tz チャンネルとして出力

Rotation .rotate 🔄
– Reference から Target への姿勢の差分
– rx, ry, rz チャンネル(オイラー角)として出力

Scale .scale 📏
– Reference オブジェクトから Target オブジェクトへのスケール差分
– sx, sy, sz チャンネルとして出力

Quaternion .quat 🌀
– Reference から Target への姿勢差分をクォータニオンで表現
– qx, qy, qz, qw チャンネルとして出力

Bearing .bear 🧭
– Reference オブジェクトが Target を向くために必要な回転値
– 追従カメラ・自動 LookAt の実装に有用

Single Bearing Angle .singlebear 📡
– Reference に対する Target の方向を 1 つの角度で表現
– 0°: 正面 / 90°: 横 / 180°: 背後

Distance .distance 📏
– 2 オブジェクト間の直線距離
– 接近判定や proximity トリガに利用

Inverse Square Distance .invsqr
– 距離の二乗の逆数
– 電場・重力・音量減衰など物理モデルの近似に有用

Transform Order .xord 🔁

Rotation / Scale / Transform / Bearing / Single Bearing Angle モードでの Transform 適用順

項目 内部名 説明
Scale Rotate Translate .srt S → R → T の順で適用
Scale Translate Rotate .str S → T → R の順で適用
Rotate Scale Translate .rst R → S → T の順で適用
Rotate Translate Scale .rts R → T → S の順で適用
Translate Scale Rotate .tsr T → S → R の順で適用
Translate Rotate Scale .trs T → R → S の順で適用

Rotate Order .rord 🔃

Rotation / Scale / Transform / Bearing / Single Bearing Angle モードでの回転軸適用順

項目 内部名 説明
Rx Ry Rz .xyz X → Y → Z の順で回転を適用
Rx Rz Ry .xzy X → Z → Y の順で回転を適用
Ry Rx Rz .yxz Y → X → Z の順で回転を適用
Ry Rz Rx .yzx Y → Z → X の順で回転を適用
Rz Rx Ry .zxy Z → X → Y の順で回転を適用
Rz Ry Rx .zyx Z → Y → X の順で回転を適用

Bearing Reference .bearingref 🧭

Bearing 計算で基準となる方向ベクトル

項目 内部名 説明
X Axis .x X 軸を基準方向として使用
Y Axis .y Y 軸を基準方向として使用
Z Axis .z Z 軸を基準方向として使用(デフォルトの前方)
Bearing Vector .vector 任意の Bearing Vector パラメータで基準方向を指定

その他の出力オプション 🛠️

Bearing Vector .bearing 🎯
– Bearing Reference = Bearing Vector のときに使用する任意基準ベクトル
– X, Y, Z の各成分をそれぞれ bearingx / bearingy / bearingz で指定

Include Order Channels .includeorderchans 📑
– Transform Order と Rotate Order の値を CHOP チャンネルとして含めるトグル
– 後段で順序情報を参照したいときに有効化

Point Scope X / Y / Z .tscopex 🔣
– オプションのポイント入力を接続した場合に、どのチャンネルを X / Y / Z として扱うかを指定
tscopex / tscopey / tscopez の 3 パラメータで個別設定

Append Attributes .appendattribs 📎
– Object CHOP が作成する回転チャンネルに rotate アトリビュートを付与
– 後段の Transform 系処理がチャンネル種別を識別できるようになる

Smooth Rotation .smoothrotate 🌊
– 0°, 90° 等の境界で発生する回転の不連続を抑制
– 滑らかな回転カーブが必要なアニメーションで有効化


Channel Page 🎚️

Channel Names .nameformat 🔤

出力チャンネルの命名規則

項目 内部名 説明
Channel Name .channel 自動命名(例: tx, ty, tz
Target and Channel Names .target Target 名をプレフィックスに付加(例: target = obj1 のとき obj1:tx, obj1:ty, obj1:tz

Output Range .outputrange 📐

オブジェクトパスを切り取る区間の指定方式

項目 内部名 説明
Start / End .startend 下記 Start / End パラメータで指定した範囲を使用

区間 / 単位 設定 ⏱️

Cook Past Values (Slow) .cookpast 🐢
– フレームスキップが発生したときに、過去フレームでも入力をクックして不連続を回避
– 計算量が増えるため必要な場合のみオン

Start / End .start ⏯️
– 区間の開始時刻 (start) と終了時刻 (end) を指定
– Output Range = Start / End のときに有効

Start Unit / End Unit .startunit 📐
start / end パラメータの単位
– Samples / Frames / Seconds から選択(startunit / endunit で個別指定)

Extend Left .left ⬅️

CHOP インターバルより前のフレームでの外挿方法

項目 内部名 説明
Hold .hold 現在のチャンネル値を保持
Slope .slope 開始前の傾きを延長
Cycle .cycle チャンネルを繰り返しサイクル
Mirror .mirror 1 サイクルごとに反転してサイクル
Default Value .default Default Value パラメータの値を使用

Extend Right .right ➡️

CHOP インターバルより後のフレームでの外挿方法(Extend Left と同じ選択肢)

項目 内部名 説明
Hold .hold 現在のチャンネル値を保持
Slope .slope 終了後の傾きを延長
Cycle .cycle チャンネルを繰り返しサイクル
Mirror .mirror 1 サイクルごとに反転してサイクル
Default Value .default Default Value パラメータの値を使用

Default Value .defval 🔢

Default Value .defval 🔢
– Extend Left / Extend Right を Default Value に設定したときに用いる定数値
– 回転チャンネル作成時、Object CHOP は 180° 不連続を避けるよう値を選ぶため出力カーブが連続的に見える


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: カメラから対象オブジェクトへの方位追従 🎥

Camera COMP + Target Geometry → Object CHOP (Compute: Bearing) → Geometry rotate parameter
  1. Object CHOP の Reference Object にカメラ COMP のパスを指定
  2. Target Object に追従させたいオブジェクトのパスを指定
  3. Compute = Measurements に設定し Bearing をオン
  4. 出力 rx, ry, rz をカメラの回転パラメータに Export し自動追従を実現

Example 2: 2 オブジェクト間距離による近接トリガ 📏

Object CHOP (Compute: Measurements, Distance) → Logic CHOP → Trigger CHOP
  1. Object CHOP で Target / Reference を 2 つのキャラクタに設定
  2. Compute = Measurements、Distance をオンにして距離チャンネルを取得
  3. Logic CHOP で「< 閾値」の条件判定を行う
  4. 閾値を下回ったタイミングで Trigger CHOP がイベントを発火する

Example 3: 距離の逆二乗で音量・光量を減衰 🔊

Object CHOP (Compute: Measurements, Inverse Square Distance) → Math CHOP → Audio Volume / Light Intensity
  1. 音源オブジェクトとリスナーを Target / Reference に指定
  2. Compute = Measurements、Inverse Square Distance をオンに設定
  3. 後段の Math CHOP でレンジ変換を行い、音量・光量パラメータへ Export
  4. 距離に応じた物理的な減衰カーブを再現できる

関連オペレータ 🔗

類似機能OP 🔍

  • Constant CHOP — 固定値の Transform を CHOP チャンネル化(Object CHOP の Reference 値の代替に使われることがある)
  • Hold CHOP — 特定フレームの Object CHOP 出力をスナップショットとして保持
  • Math CHOP — Object CHOP の Position / Rotation を四則演算・レンジ変換で整形

組み合わせ推奨OP 🔄

  • Math CHOP — Object CHOP の距離・回転を所望のレンジへスケーリング
  • Logic CHOP — Object CHOP の距離値で接近判定の閾値ロジックを構築
  • Trigger CHOP — Object CHOP の値変化に応じてエンベロープを発火
  • Filter CHOP — Object CHOP の出力にスムージングをかけて追従カクつきを抑制
  • CHOP to TOP — Object CHOP が出力する 4×4 / 3×3 行列を GPU シェーダ uniform に渡す

前処理・後処理CHOP 🎯


Info CHOP情報 📊

Object 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: Rotation チャンネルが 180° 付近でジャンプする
✅ Solution:

  • Smooth Rotation をオンにしてオイラー角の不連続を抑制する
  • Compute = Transform (Quaternion) に切り替えてクォータニオン表現を使う
  • 後段の Filter CHOP でカットオフを下げて視覚的なジッタを抑える

❌ Problem: Target / Reference のパスが解決できずチャンネルが 0 になる
✅ Solution:

  • Target Object / Reference Object に指定した文字列が実在 OP の絶対パスになっているか確認
  • DAT Table 方式の場合、1 列目 Target・2 列目 Reference でヘッダ行が含まれていないか確認
  • 親 COMP 内の相対パスを指定したい場合は、式評価が有効な書式(op('parent').path 等)を使う

❌ Problem: Bearing 値が想定と違う向きを返す
✅ Solution:

  • Bearing Reference を確認し、対象シーンの前方軸(X / Y / Z)と一致させる
  • 任意ベクトルが必要な場合は Bearing Reference = Bearing Vector を選択し bearingx/y/z を設定
  • Reference / Target の親階層の Transform が想定どおりか確認

❌ Problem: Inverse Square Distance が極端に大きな値を出す
✅ Solution:

  • 2 オブジェクトがほぼ同一座標にあると距離が 0 に近づき逆二乗値が発散する
  • 後段の Math CHOP や Limit CHOP で上限クランプを設ける
  • 距離が小さい領域では距離自体(Distance)に切り替えるロジックを Logic CHOP で構築する

参考資料 📚

その他 🔗

公式リソース 📖

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