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

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

ZED CHOP のステレオカメラ・ボディトラッキング機能を示す図

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

概要 📖 – 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 チャンネル

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 固定です。

引用元: 公式 docs

ボディトラッキング詳細 🦴

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
  1. ZED TOP でカメラを設定し ZED CHOP の ZED TOP パラメータに参照
  2. Active と Camera Transform をオン
  3. 出力の tx, ty, tz, rx, ry, rz を Camera COMP の transform パラメータに Export
  4. 実カメラの動きが 3D シーンの視点として反映される

Example 2: ボディトラッキングでアバター駆動 🕴️

ZED TOP → ZED CHOP (Body Tracking: Skeleton 34, Joint Mode: Relative) → Select CHOP → Bone COMP
  1. Body Tracking を Skeleton – 34 Joints に設定(初回は AI モデルの GPU トレーニングが走る)
  2. Body 3D をオン、Joint Mode を Relative, with Orientation に設定
  3. Max Bodies を 1 に絞り込み、Select CHOP で特定ジョイントの rx, ry, rz を抽出
  4. Bone COMP の回転パラメータに Export して人体スケルトンでアバターを動かす

Example 3: 平面検出による AR マーカー配置 📐

ZED TOP → ZED CHOP (Plane Orientation, Pulse) → Geometry COMP transform
  1. Plane Point U / Plane Point V で平面取得点を画面中央(0.5, 0.5)に設定
  2. Plane Orientation をオン、Plane Position / Plane Rotation / Plane Normal を出力
  3. Pulse を任意のタイミングで叩き、検出した平面に Geometry COMP を配置
  4. 実空間の床や壁を検出して 3D オブジェクトを AR 配置する

Example 4: 2D UV ジョイント座標で画面内インタラクション 🖼️

ZED TOP → ZED CHOP (Body 2D, Aspect Correct UVs) → CHOP to TOP → Composite
  1. Body Tracking を Skeleton – 18 Joints、Body 2D をオン
  2. Aspect Correct UVs をオンで非正方アスペクトの歪みを補正
  3. ジョイントの UV 座標を CHOP to TOP で TOP に変換
  4. 画面上の手・頭の位置に 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、無効時は0
  • export_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 FrameWorld / Camera のどちらか確認(出力の基準が変わる)
  • Plane Point U / Plane Point V が 0〜1 の正規化座標で指定されているか確認
  • Pulse を 1 回叩いた瞬間の値しか欲しくない場合は Get Plane をオフにしてパルス運用に切り替え

❌ Problem: ジョイント位置にノイズが多い
✅ Solution:

  • 後段に Filter CHOP を入れて時間方向のスムージング
  • Lag CHOP で滑らかさと応答性のバランスを取る
  • Joint Mode を Absolute から Relative に切り替えると親ジョイント基準で安定する場合がある

参考資料 📚

その他 🔗

公式リソース 📖

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