
概要 📖 – ZED ステレオカメラのトラッキングデータ取得
ZED CHOPは、ZED ステレオカメラから取得したカメラトランスフォーム・平面検出・ボディトラッキング情報をチャンネル化する CHOPです。ZED TOP と組み合わせて、空間位置・人物スケルトンを TouchDesigner 内のチャンネルとして扱えるようにします。
主な用途 🎯
- ZED ステレオカメラの位置・回転トラッキング情報の取得(カメラトランスフォーム)
- 平面検出による任意 UV 座標点の 3D 位置・法線・サイズ取得
- ボディトラッキング(18 ジョイント / 34 ジョイント)による人物スケルトン追跡
- ジョイントごとの 3D 絶対座標または相対座標 + 回転の取得
- 2D UV 座標とバウンディングボックスによる画面内ジョイント位置検出
データフロー 🔄
入力: ZED TOP(カメラ設定の primary TOP)
↓
ZED CHOP(Active 有効化)
↓
カメラトランスフォーム / 平面検出 / ボディトラッキングを各 enable
↓
出力: カメラ位置・回転 / Plane Position / Body Joints チャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
ZED Page 📋
基本設定 🎛️
Active .active ✅
– オンにすると ZED カメラからのデータ取得を開始
– オフでチャンネル出力が停止しリソースを解放
ZED TOP .zedtop 🎥
– カメラを設定している primary ZED TOP へのパス
– この TOP の設定(解像度・FPS 等)が CHOP の入力源を決定
カメラトランスフォーム 🎯
Camera Transform .cameratransform ✅
– オンでカメラ自身の位置と回転を出力に追加
– 出力チャンネル: tx, ty, tz(メートル単位の位置)+ rx, ry, rz(回転)
Reset Camera Transform .resetcameratransform 🔄
– 現在のカメラ位置をゼロにリセット
– 現在地を新しい原点として扱い直す
平面検出 📐
Plane Orientation .planeorientation ✅
– オンで指定 UV 座標点の平面情報を取得
– 平面の位置・回転・法線・サイズが出力される
Get Plane .getplane 📥
– 連続的に平面情報を取得するトグル
– 取得し続けるとカメラ移動に追従して平面位置が更新される
Pulse .getplanepulse ⚡
– パルスで瞬間的に 1 回だけ平面情報をキャプチャ
– 連続取得が不要な「スナップショット」用途に使用
Plane Point U .planepointu 📏
– 平面取得対象となる画像内 U 座標(0〜1 正規化)
– 0 が左端、1 が右端
Plane Point V .planepointv 📏
– 平面取得対象となる画像内 V 座標(0〜1 正規化)
– 0 が下端、1 が上端
Plane Position .planeposition 📍
– オンで平面中心の tx, ty, tz 位置チャンネルを出力
– 単位はメートル
Plane Rotation .planerotation 🔃
– オンで平面の rx, ry, rz 回転チャンネルを出力
– 平面の向きを姿勢角として取得
Plane Normal .planenormal 📐
– オンで平面法線の nx, ny, nz チャンネルを出力
– 平面が向いている方向ベクトル
Plane Size .planesize 📏
– 検出された平面のバウンディング矩形のサイズ
– 平面の大きさを推定する指標
Plane Reference Frame .planereferenceframe 🌐
平面座標を出力する基準フレームを切り替えるメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| World | .world |
平面位置出力をカメラの初期位置を基準とする世界座標で取得 |
| Camera | .camera |
平面位置出力をカメラの直前位置を基準とする相対座標で取得 |
Body Tracking .bodytracking 🧍
画面内の人物スケルトンを追跡する AI モードの選択メニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
ボディトラッキング無効 |
| Skeleton – 18 Joints | .skeleton18 |
18 ジョイントスケルトンモデルで追跡 |
| Skeleton – 34 Joints | .skeleton34 |
34 ジョイントスケルトンモデルで追跡(親ジョイント相対の位置・回転、root ジョイントが index 0) |
※ 注意: 各モードは GPU 上で AI モデルの初回トレーニングが必要です。数分かかりますが、GPU を変更しない限り 1 回のみで済みます。Joint Mode が無効化されるモードでは、出力は Absolute 固定です。
ボディトラッキング詳細 🦴
Max Bodies .maxbodies 👥
– 同時に追跡する人物の最大数
– 多すぎるとパフォーマンスに影響
Body 3D .body3d 🧊
– オンで各ジョイントの 3D 位置を出力
– Joint Mode が Relative の場合は回転も合わせて出力
Body 2D .body2d 🖼️
– 各ジョイントの画像内 2D UV 座標(正規化済)を出力
– 画面内のジョイント位置をスクリーン座標として扱いたいとき
Aspect Correct UVs .aspectcorrectuv 🔲
– アスペクト比で UV 座標を補正
– 2:1 等の非正方アスペクトでオルソ描画や Fraction Aspect 単位を使うときに有効
Bounding Boxes .boundingboxes 🟦
– ジョイントごとのバウンディングボックスを出力
– 頭部のバウンディングボックスは Body 3D が有効なときのみ取得可能
Joint Mode .jointmode 🔗
ジョイント値を絶対座標で出すか親ジョイント相対で出すかのメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Absolute Position | .absolute |
各ジョイントの空間内 XYZ 絶対位置をメートル単位で出力 |
| Relative, with Orientation | .relative |
3D スケルトン位置と回転を階層的に親ジョイント相対で出力 |
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: カメラ位置でシーン視点を制御 🎥
ZED TOP → ZED CHOP (Camera Transform) → Camera COMP transform
- ZED TOP でカメラを設定し ZED CHOP の ZED TOP パラメータに参照
- Active と Camera Transform をオン
- 出力の tx, ty, tz, rx, ry, rz を Camera COMP の transform パラメータに Export
- 実カメラの動きが 3D シーンの視点として反映される
Example 2: ボディトラッキングでアバター駆動 🕴️
ZED TOP → ZED CHOP (Body Tracking: Skeleton 34, Joint Mode: Relative) → Select CHOP → Bone COMP
- Body Tracking を Skeleton – 34 Joints に設定(初回は AI モデルの GPU トレーニングが走る)
- Body 3D をオン、Joint Mode を Relative, with Orientation に設定
- Max Bodies を 1 に絞り込み、Select CHOP で特定ジョイントの rx, ry, rz を抽出
- Bone COMP の回転パラメータに Export して人体スケルトンでアバターを動かす
Example 3: 平面検出による AR マーカー配置 📐
ZED TOP → ZED CHOP (Plane Orientation, Pulse) → Geometry COMP transform
- Plane Point U / Plane Point V で平面取得点を画面中央(0.5, 0.5)に設定
- Plane Orientation をオン、Plane Position / Plane Rotation / Plane Normal を出力
- Pulse を任意のタイミングで叩き、検出した平面に Geometry COMP を配置
- 実空間の床や壁を検出して 3D オブジェクトを AR 配置する
Example 4: 2D UV ジョイント座標で画面内インタラクション 🖼️
ZED TOP → ZED CHOP (Body 2D, Aspect Correct UVs) → CHOP to TOP → Composite
- Body Tracking を Skeleton – 18 Joints、Body 2D をオン
- Aspect Correct UVs をオンで非正方アスペクトの歪みを補正
- ジョイントの UV 座標を CHOP to TOP で TOP に変換
- 画面上の手・頭の位置に UI 要素やパーティクルを追従させる
関連オペレータ 🔗
類似機能OP 🔍
- Kinect CHOP — Kinect 系センサーから取得した骨格・関節情報のチャンネル化
- OpenVR CHOP — HMD・コントローラーの位置回転トラッキング情報の取得
組み合わせ推奨OP 🔄
- ZED TOP — primary TOP としてカメラ解像度・FPS を設定する前段必須 OP
- Select CHOP — 特定ジョイントのチャンネルだけ抽出
- Filter CHOP — ジョイント位置のノイズ・ジッターを平滑化
- Math CHOP — 座標の単位変換・ノーマライズ・スケーリング
- Trigger CHOP — ジョイント位置や閾値を起点にイベント発火
前処理・後処理CHOP 🎯
Info CHOP情報 📊
ZED 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: チャンネルが出力されない
✅ Solution:
Activeがオンになっているか確認ZED TOPパラメータに有効な ZED TOP のパスが指定されているか確認- Camera Transform / Plane Orientation / Body Tracking のうち少なくとも 1 つを有効にしないと出力チャンネルは生成されない
❌ Problem: ボディトラッキングが反応しない・遅い
✅ Solution:
- 初回実行時は GPU 上で AI モデルのトレーニングに数分かかる(その間は無反応)
Max Bodiesを必要最小数に絞ってパフォーマンスを確保- GPU を変更した場合はモデルの再トレーニングが必要
❌ Problem: 平面検出の座標が想定と異なる
✅ Solution:
Plane Reference FrameがWorld/Cameraのどちらか確認(出力の基準が変わる)Plane Point U/Plane Point Vが 0〜1 の正規化座標で指定されているか確認- Pulse を 1 回叩いた瞬間の値しか欲しくない場合は Get Plane をオフにしてパルス運用に切り替え
❌ Problem: ジョイント位置にノイズが多い
✅ Solution:
- 後段に Filter CHOP を入れて時間方向のスムージング
- Lag CHOP で滑らかさと応答性のバランスを取る
Joint Modeを Absolute から Relative に切り替えると親ジョイント基準で安定する場合がある
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group


