
概要 📖 – TouchDesigner 間のチャンネルデータ受信
Touch In CHOPは、ネットワーク経由で別 TouchDesigner プロセスからチャンネルデータを受信する CHOPです。TCP ストリーミング / UDP メッセージング / マルチキャストに対応し、複数 PC・複数プロセス構成での分散レンダリングや分散制御の入力経路として機能します。
主な用途 🎯
- 他 TouchDesigner プロセス (Touch Out CHOP) からのチャンネルデータ受信
- 複数 PC・複数プロセス構成での分散レンダリング・分散制御の入力経路
- TCP/IP ストリーミングによる順序保証付きの安定したチャンネル転送
- UDP メッセージング / マルチキャストによる低レイテンシの片方向ブロードキャスト受信
- Synced Ports による複数チャンネル束のフレーム同期受信
データフロー 🔄
入力: ネットワークパケット (TCP / UDP / Multi-Cast)
↓
Protocol 判定 (Streaming / Messaging / Multi-Cast)
↓
Address / Network Port 受信
↓
Queue Target / Queue Variance / Maximum Queue
↓
Queue Adjust Time (繰返し/破棄でキュー長調整)
↓
Recover Outside Range 判定
↓
出力: チャンネルデータ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Touch In Page 📡
Protocol .protocol 🌐
データ転送に使用するネットワークプロトコルを選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| Streaming (TCP/IP) | .streaming |
TCP/IP で順序保証付きストリーミング受信 (パケット欠落なし、再送あり) |
| Messaging (UDP) | .msging |
UDP メッセージングで受信 (低レイテンシ、欠落の可能性あり) |
| Multi-Cast Messaging (UDP) | .multicastmsging |
UDP マルチキャストで受信 (同一グループの複数受信側に同時配信) |
Address .address 🏷️
接続先サーバの IP / ホスト名:
- Address: サーバ PC の IP アドレス (例:
100.123.45.78) またはネットワーク名。同一 PC 内ではlocalhostを指定
Network Port .port 🔌
受信ポート番号:
- Network Port: 送信側 Touch Out CHOP と同じポート番号 (例:
10001) を指定。送受信で一致していないと接続できない
Active .active 🟢
ネットワーク受信の有効化:
- オン: パイプ / サーバから情報を受信し続ける。Streaming モードではオンで接続を開始
- オフ: 受信を停止。サーバ送信データは破棄、パイプ送信データはオンに戻すまで蓄積される。Streaming モードではオフで接続を切断
Queue Target .queuetarget 🎯
キューの目標長:
- Queue Target: 受信キューがこの長さに維持されるよう自動調整される。目標長を高めるとレイテンシ増、低めるとアンダーラン (欠落) リスク増
Queue Target Unit .queuetargetunit 📐
Queue Target の単位
| 項目 | 内部名 | 説明 |
|---|---|---|
| Samples | .samples |
サンプル数で指定 |
| Frames | .frames |
フレーム数で指定 |
| Seconds | .seconds |
秒で指定 |
Queue Variance .queuevariance 📊
キュー長許容範囲:
- Queue Variance: キュー長がターゲット ± この値の範囲内であればキュー長の調整を行わない
Queue Variance Unit .queuevarianceunit 📐
Queue Variance の単位
| 項目 | 内部名 | 説明 |
|---|---|---|
| Samples | .samples |
サンプル数で指定 |
| Frames | .frames |
フレーム数で指定 |
| Seconds | .seconds |
秒で指定 |
Maximum Queue .maxqueue 📦
キューの最大長:
- Maximum Queue: キューが満杯になったら以降の受信サンプルは drop される。送信頻度が一時的に高い場合の上限として機能
Max Queue Unit .maxqueueunit 📐
Maximum Queue の単位
| 項目 | 内部名 | 説明 |
|---|---|---|
| Samples | .samples |
サンプル数で指定 |
| Frames | .frames |
フレーム数で指定 |
| Seconds | .seconds |
秒で指定 |
Queue Adjust Time .adjusttime 🕒
キュー長調整の頻度:
- Queue Adjust Time: 値=1 / 単位=Seconds なら 1 秒に 1 回サンプルを複製または破棄してキュー長を Queue Target に近づける
Adjust Unit .adjusttimeunit 📐
Queue Adjust Time の単位
| 項目 | 内部名 | 説明 |
|---|---|---|
| Samples | .samples |
サンプル数で指定 |
| Frames | .frames |
フレーム数で指定 |
| Seconds | .seconds |
秒で指定 |
Recover Outside Range .recover 🛟
範囲外時の復帰挙動:
- オン: 範囲外を検出したら新規データ配信停止または大量破棄を行い、キュー長を min/max ターゲットの中央に戻す
- オフ: 1 フレーム単位の複製・破棄を続けてゆっくりターゲット長へ近づける (急激な調整なし)
Use Synced Ports .syncports 🔗
複数 Touch Out CHOP のデータを単一のグローバルパイプで送るかどうか
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
ポート番号ごとに独立したパイプを使用 (通常運用) |
| On | .on |
Transfer Port Type ごとに単一グローバルパイプ (内部 10500) を使用しフレーム同期を保証。Network Port は受信側 Touch In への振り分けに使用 |
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: 2 PC 構成の分散レンダリング (TCP ストリーミング) 🖥️
PC-A (制御用) Touch Out CHOP → LAN (TCP) → PC-B (描画用) Touch In CHOP → 描画パラメータ Export
- PC-A (制御用) で Touch Out CHOP を設置し、送信先 Address を PC-B の IP、Network Port を
10001に設定 - PC-B (描画用) で Touch In CHOP の Protocol を
Streaming (TCP/IP)、Address を PC-A、Network Port を10001に一致させる - 両 CHOP の Active をオンにして TCP 接続を確立
- PC-B 側で受信チャンネルを描画パラメータに Export し、PC-A 側の操作で複数台のディスプレイを同期駆動
Example 2: 低レイテンシ UDP メッセージング (片方向ブロードキャスト) ⚡
Sender Touch Out CHOP (UDP) → LAN → Touch In CHOP (Messaging) → リアルタイム制御
- 送信側で Protocol を
Messaging (UDP)に切替え、再送なし片方向送信に設定 - 受信側 Touch In CHOP の Protocol も
Messaging (UDP)、ポート番号を一致させる - Queue Target を小さめ (例: 1〜2 frames) にしてレイテンシを最小化
- イベント信号やトリガー等、欠落しても致命的でない低レイテンシ用途で運用
Example 3: Multi-Cast による複数受信側への同時配信 📻
Sender (Multi-Cast UDP) → LAN マルチキャストグループ → 複数 Touch In CHOP → 各 PC で同期動作
- 送信側で Protocol を
Multi-Cast Messaging (UDP)に設定し、マルチキャストグループアドレスを指定 - 受信側 Touch In CHOP すべてで Protocol を
Multi-Cast Messaging (UDP)、同じグループアドレス・ポートを設定 - Active をオンにして全受信側でグループに join、1 つの送信で同時に配信受信
- 後段に Null CHOP を挟んで安定した参照点を用意し、複数 PC のショー同期を構築
Example 4: Synced Ports でフレーム同期した複数チャンネル束受信 🔗
Sender (Synced Ports On) → 内部 10500 グローバルパイプ → 受信側 Touch In CHOP (Synced Ports On) → フレーム同期出力
- 送信側 Touch Out CHOP で Use Synced Ports を
Onに設定し、複数チャンネル束を Transfer Port Type ごとに束ねる - 受信側 Touch In CHOP も同様に Use Synced Ports を
On、Network Port は分岐振り分け用に設定 - 送受信ともに同フレームのデータが揃ったタイミングで CHOP に展開され、サンプル精度のフレーム同期を実現
- 後段で Filter CHOP を挟みノイズを平滑化、複数チャンネル束の整合性が必要な分散制御に応用
関連オペレータ 🔗
類似機能OP 🔍
- Touch Out CHOP — Touch In の対となる送信側 CHOP、チャンネル値を TCP / UDP / Multi-Cast でネットワーク送信
- Pipe In CHOP — ネットワーク経由のチャンネル受信 (TCP のみ)、Touch In は TCP/UDP/Multi-Cast に対応
- OSC In CHOP — OSC プロトコル受信、Touch In は TouchDesigner 専用の独自プロトコル
組み合わせ推奨OP 🔄
- Null CHOP — 受信チャンネルの安定した参照点として配置
- Filter CHOP — ネットワーク経由で揺らぐ受信値をスムージング
- Math CHOP — 受信値のスケーリング・オフセット・正規化
- Select CHOP — 受信した複数チャンネルから必要なものだけ抽出
- Trail CHOP — 受信信号の時系列履歴を可視化
前処理・後処理CHOP 🎯
- 前処理: Constant CHOP、Null CHOP
- 後処理: Null CHOP、Filter CHOP、Math CHOP、Lag CHOP
Info CHOP情報 📊
Touch In 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:
- 送信側 Touch Out CHOP の Address / Network Port が受信側と一致しているか確認
- 両側の Active がオンになっているか確認 (Streaming モードでは Active オンで接続開始)
- ファイアウォール / セキュリティソフトが TCP/UDP ポートをブロックしていないか確認
- Protocol が送受信側で揃っているか確認 (Streaming / Messaging / Multi-Cast を一致させる)
❌ Problem: 受信値が遅延する / レイテンシが大きい
✅ Solution:
- Queue Target を小さく設定してキュー長を短縮 (引き換えにアンダーランリスク増)
- Protocol を
Streaming (TCP/IP)からMessaging (UDP)に切替えて再送オーバーヘッドを排除 - Queue Adjust Time を短くしてキュー長調整を頻繁に行いターゲット長に追従させる
❌ Problem: 受信値が頻繁に欠落 / ノイズが乗る
✅ Solution:
- Maximum Queue を増やして送信バーストに対するバッファを大きくする
- Recover Outside Range をオンにして範囲外時に強制復帰させる
- 後段に Filter CHOP を挟みノイズをスムージング
- 信頼性重視なら Protocol を
Streaming (TCP/IP)に変更し、再送付き順序保証で受信
❌ Problem: 複数チャンネル束のフレーム同期が崩れる
✅ Solution:
- 送受信両側で Use Synced Ports を
Onに設定しグローバルパイプを使用 - Transfer Port Type を送受信で揃え、同フレームのデータが束で展開されるようにする
- 後段に Null CHOP を挟んで参照点を固定し、束全体の整合性を維持
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Touch In CHOP
- Network Protocols (TCP / UDP / Multi-Cast)
- Touch In/Out Synced Ports

