
概要 📖 – オブジェクト間の相対位置・姿勢・距離を計算
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 によるチャンネル整形
↓
出力: 相対値チャンネル群
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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
- Object CHOP の Reference Object にカメラ COMP のパスを指定
- Target Object に追従させたいオブジェクトのパスを指定
- Compute = Measurements に設定し Bearing をオン
- 出力 rx, ry, rz をカメラの回転パラメータに Export し自動追従を実現
Example 2: 2 オブジェクト間距離による近接トリガ 📏
Object CHOP (Compute: Measurements, Distance) → Logic CHOP → Trigger CHOP
- Object CHOP で Target / Reference を 2 つのキャラクタに設定
- Compute = Measurements、Distance をオンにして距離チャンネルを取得
- Logic CHOP で「< 閾値」の条件判定を行う
- 閾値を下回ったタイミングで Trigger CHOP がイベントを発火する
Example 3: 距離の逆二乗で音量・光量を減衰 🔊
Object CHOP (Compute: Measurements, Inverse Square Distance) → Math CHOP → Audio Volume / Light Intensity
- 音源オブジェクトとリスナーを Target / Reference に指定
- Compute = Measurements、Inverse Square Distance をオンに設定
- 後段の Math CHOP でレンジ変換を行い、音量・光量パラメータへ Export
- 距離に応じた物理的な減衰カーブを再現できる
関連オペレータ 🔗
類似機能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、無効時は0export_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 で構築する
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

