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

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

OptiTrack In CHOP のモーションキャプチャデータ受信機能を示す図

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

概要 📖 – OptiTrack モーションキャプチャサーバーからのリアルタイムデータ受信

OptiTrack In CHOPは、OptiTrack Motive サーバーから NatNet 経由でモーションキャプチャデータを受信しチャンネルとして出力する CHOPです。Multicast/Unicast の両モードに対応し、リジッドボディ・スケルトン・マーカー等のトラッキング情報を低遅延でリアルタイム取得できます。

主な用途 🎯

  • OptiTrack Motive サーバーからのリアルタイムモーションキャプチャデータの取得
  • リジッドボディ・スケルトン・マーカーの位置/姿勢を CHOP チャンネルとして受信
  • 舞台演出・VR/AR・バーチャルプロダクションでのトラッキング連動演出
  • NatNet プロトコル経由でのマルチキャスト/ユニキャスト通信による多クライアント分配
  • 外部トラッカーデータと TouchDesigner ジオメトリ/カメラの同期制御

データフロー 🔄

入力: OptiTrack Motive サーバー (NatNet プロトコル)

Connection Type 選択 (multicast/unicast)

Network/Local Address + Command/Data Port 設定

Rate でクエリ頻度指定

出力: リジッドボディ/スケルトン/マーカーの位置・姿勢チャンネル

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

OptiTrack In Page 📋

Connection Type .connectiontype 🌐

OptiTrack サーバーとの接続モードを選択するメニューパラメータ

項目 内部名 説明
Multicast .mutlicast マルチキャスト通信。サーバーがマルチキャストアドレスをネゴシエートし複数クライアントに分配可能
Unicast .unicast ユニキャスト通信。1 対 1 の専用接続で確実にデータを受信

※ 注意: Connection Type はサーバー側 (Motive) の設定と一致させる必要があります。サーバー側が Multicast 配信なのにクライアントを Unicast にすると接続できません。

引用元: 公式 docs

ネットワーク・通信設定 🔌

Active .active 🟢
– オンの間 CHOP はサーバーから情報を受信し続ける
– オフ時は受信を停止し更新が行われない (一時停止用途)

Network Address .netaddress 📡
– サーバーコンピュータの IP アドレスまたはコンピュータ名 (例: 100.123.45.78 / ホスト名)
– 同一マシン上なら localhost を指定可
– Multicast モードでもサーバーのアドレスを指定 (マルチキャストアドレスではない、サーバーが自動でネゴシエート)

Local Address .localaddress 🌐
– 複数の NIC を持つマシンで、通信に使用するローカル IP アドレスを指定
– 例: WIFI 経由なら 192.168.0.100 / 192.168.0.*、Ethernet 経由なら 24.100.200.50
– 単一ネットワーク接続のマシンでは空欄で問題ない

Command Port .commandport 🎚️
– サーバーのコマンドネットワークポート
– Motive 側の設定値と一致させる

Data Port .dataport 📨
– サーバーのデータポート
– トラッキングデータが流れるポート、Motive 側の設定値と一致させる

Rate .rate 📐
– データをクエリする頻度 (samples/sec)
– サーバー側のキャプチャレート (一般的に 120/240Hz) に合わせる

Reset .resetpulse 🔄
– このノードのデータをリセットするパルスパラメータ
– サーバー再起動後や接続トラブル時に手動で初期化する用途


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: リジッドボディトラッキングで 3D オブジェクトを駆動 🎯

OptiTrack Motive サーバー → OptiTrack In CHOP → Select CHOP → Geometry COMP (Transform)
  1. Motive 側でリジッドボディを定義し NatNet ストリーミングを有効化
  2. OptiTrack In CHOP の Network Address にサーバーの IP、Command/Data Port を Motive 設定値に合わせる
  3. Active をオンにして受信開始、Connection Type をサーバー側設定と一致させる
  4. Select CHOP で目的のリジッドボディの位置 (tx/ty/tz) と姿勢 (rx/ry/rz) を抽出
  5. Geometry COMP の Transform パラメータに Export して 3D オブジェクトを実物体に追従させる

Example 2: スケルトンキャプチャでバーチャルアバターを駆動 🕺

OptiTrack Motive (Skeleton) → OptiTrack In CHOP → Filter CHOP → Bone COMP / Geometry COMP
  1. Motive 側でアクターをキャリブレーションしスケルトンを定義
  2. OptiTrack In CHOP でスケルトンの全関節データを受信
  3. Filter CHOP の Gaussian や Boxcar でジッターを平滑化
  4. 後段でリグの各ボーン回転に Export しキャラクターをリアルタイム駆動

Example 3: Multicastで複数TDへ分配 📡

OptiTrack Motive (Multicast) → OptiTrack In CHOP (Client A/B/C) → 各演出系
  1. Motive 側のストリーミング設定を Multicast に変更
  2. 各クライアント TD の OptiTrack In CHOP で Connection Type を「Multicast」に設定
  3. Network Address は全クライアント共通でサーバーの IP を指定 (マルチキャストアドレスは自動ネゴシエート)
  4. 複数 PC で同じトラッキングデータを共有しマルチプロジェクション/分散レンダリングに活用

Example 4: マーカークラウドを点群として可視化 ✨

OptiTrack In CHOP (Markers) → CHOP to SOP → Particle System / Instancing
  1. OptiTrack In CHOP でラベル無しマーカーを含む全マーカー位置を受信
  2. CHOP to SOP でマーカーの xyz チャンネルを点群に変換
  3. Instancing で各マーカー位置にジオメトリを配置しビジュアライズ
  4. 舞台/インスタレーションでパフォーマーの動きを点群表現として演出

関連オペレータ 🔗

類似機能OP 🔍

  • Kinect CHOP — Kinect センサー経由のボディトラッキングデータ受信
  • OSC In CHOP — OSC プロトコル経由の汎用トラッキング/コントロールデータ受信

組み合わせ推奨OP 🔄

  • Select CHOP — 受信した多数のチャンネルから特定のリジッドボディ/関節のみを抽出
  • Filter CHOP — トラッキングデータのジッター/ノイズを平滑化
  • Math CHOP — 座標系変換 (スケール/オフセット) や単位換算
  • Lag CHOP — トラッキングロスト時の値補間とスムーズな遷移
  • Trail CHOP — 受信したトラッキングデータを時系列バッファとして可視化

前処理・後処理CHOP 🎯


Info CHOP情報 📊

OptiTrack In 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 がオンになっているか確認
  • Network Address にサーバー (Motive) の正しい IP アドレスまたはホスト名が設定されているか確認 (同一マシンなら localhost)
  • Connection Type が Motive 側のストリーミング設定 (Multicast/Unicast) と一致しているか確認
  • Command Port / Data Port が Motive のストリーミング設定と一致しているか確認
  • ファイアウォール/セキュリティソフトが NatNet 通信ポートをブロックしていないか確認

❌ Problem: 受信できるがデータがカクつく/更新が遅い
✅ Solution:

  • Rate を Motive 側のキャプチャレート (120/240Hz 等) に合わせて引き上げる
  • 後段にFilter CHOPの Gaussian や Boxcar を入れて時間方向のジッター除去
  • Lag CHOPでロスト時の値補間を追加し急峻な変化を回避
  • ネットワーク経路を有線 Ethernet にし、可能なら Motive サーバーと専用 LAN セグメントで接続

❌ Problem: 複数の NIC を持つマシンで意図しない経路で通信される
✅ Solution:

  • Local Address に通信に使用する NIC の IP アドレスを明示的に指定 (例: WIFI なら 192.168.0.100、Ethernet なら 24.100.200.50)
  • 192.168.0.* のようなワイルドカードで NIC を範囲指定することも可能
  • OS のルーティングテーブルを確認し OptiTrack サブネットへの経路が正しい NIC に向いているか確認

❌ Problem: リジッドボディ/スケルトンの ID が変わってチャンネル名が不安定
✅ Solution:

  • Motive 側でリジッドボディ/スケルトンに固定 ID と一意の名前を設定して保存
  • 後段でSelect CHOPを使い名前ベース (ワイルドカード可) で必要なチャンネルを抽出
  • Rename from / Rename to (Common Page) で受信側でチャンネル名を正規化

参考資料 📚

その他 🔗

公式リソース 📖

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