
概要 📖 – プロセス間でトランスフォームを共有するシェアードメモリ送信
Shared Mem Out COMPは、TouchDesigner のプロセス間で COMP のトランスフォームデータを共有メモリブロック経由で送信する COMPです。受信側で Shared Mem In COMP を同じ Shared Mem Name で設定するとデータが取り出せます。Educational / Commercial / Pro エディションで利用可能で、低遅延な同一マシン内 IPC に向きます。
主な用途 🎯
- 別プロセスの TouchDesigner へトランスフォームデータを共有メモリ経由で送信
- マルチプロセス分散レンダリングでカメラ・オブジェクト位置を送信側プロセスから配信
- 送信側プロセスと受信側プロセスを Shared Mem In COMP とペアで構築する低遅延 IPC
- Shared Mem Name による名前付きメモリブロックで複数チャネルを並行送信
- Active パラメータで送信のオン / オフを動的に切替
データフロー 🔄
送信側プロセス: 親 COMP のトランスフォーム
↓
Shared Mem Out COMP (Active=オン, Shared Mem Name=指定)
↓
共有メモリブロック (OS 上)
↓
受信側プロセス: Shared Mem In COMP (同名指定) でリード
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Setup Page 📁
Active .active 🔌
共有メモリ書込みのオン / オフ:
- Active:
active— オンの場合、毎フレーム共有メモリブロックへ書込みを行う。オフの場合は cook 停止で書込みも停止
Shared Mem Name .name 🏷️
共有メモリブロックの識別名:
- Shared Mem Name:
name— 書込み先の共有メモリブロック名。受信側の Shared Mem In COMP でも同じ名前を指定することでデータを受け取れる
Common Page 🔧
Parent Shortcut .parentshortcut 🔗
コンポーネント内部からこの COMP へのパスとして使えるショートカット名:
- Parent Shortcut: コンポーネント内部の任意の場所からこの COMP を参照する際のショートカット名 (
parent.<name>形式で利用可能)
Global OP Shortcut .opshortcut 🌐
プロジェクト全体からこの COMP を参照するグローバル名:
- Global OP Shortcut: プロジェクト内のあらゆる場所からこの COMP へのパスとして使えるグローバル名 (
op.<name>形式で利用可能)
Internal OP .iop 📎
Internal OP シーケンス (コンポーネント内部 OP への名前付き参照):
- Shortcut:
iop0shortcut— コンポーネント内部の OP に対するショートカット名 - OP:
iop0op— このコンポーネント内部の対象 OP へのパス
Node View .nodeview 👁️
ノードビューア (Network エディタ上のサムネイル) に表示する内容を決定
| 項目 | 内部名 | 説明 |
|---|---|---|
| Default Viewer | .default |
コンポーネントタイプ標準のビューアを表示 |
| Operator Viewer | .opviewer |
指定した任意 OP のノードビューアを表示 |
Operator Viewer .opviewer 🖼️
Operator Viewer モード時に表示する対象 OP:
- Operator Viewer パス: Node View が
opviewerモードのとき、そのビューア内容として表示する OP のパス
Cloning .cloning 🧬
マスター COMP の内容を複製する Cloning 設定:
- Enable Cloning:
enablecloning— Clone Master の内容を継続的に複製するかを切替 - Enable Cloning Pulse:
enablecloningpulse— その瞬間だけ Clone Master の内容を瞬時に複製 - Clone Master:
clone— 複製元となるマスターコンポーネントへのパス
Load on Demand .loadondemand ⏳
必要時のみメモリにロードする遅延ロード設定:
- Load on Demand: オンの場合、このコンポーネントは実際に必要となるまでメモリにロードされない (起動時間・メモリ消費の最適化)
External .tox .externaltox 💾
外部 .tox ファイルとの連携設定:
- Enable External .tox:
enableexternaltox— 起動時に外部 .tox ファイルからロード - Enable External .tox Pulse:
enableexternaltoxpulse— 外部 .tox ファイルから即時リロード - External .tox Path:
externaltox— ディスク上の .tox ファイルへのパス - Reload Custom Parameters:
reloadcustom— コンポーネントのカスタムパラメータ値を再読み込み - Reload Built-In Parameters:
reloadbuiltin— コンポーネントの組み込みパラメータ値を再読み込み - Save Backup of External:
savebackup— .toe ファイル内に外部 .tox のバックアップコピーを保存 - Sub-Component to Load:
subcompname— .tox 内部の特定 COMP のみを取り出してロード
Relative File Path Behavior .relpath 📁
このコンポーネント内部での相対ファイルパスの解決基準
| 項目 | 内部名 | 説明 |
|---|---|---|
| Use Parent’s Behavior | .inherit |
親コンポーネントの設定を継承 |
| Relative to Project File (.toe) | .project |
.toe プロジェクトファイルからの相対パスとして解決 |
| Relative to External COMP File (.tox) | .externaltox |
外部 .tox ファイルからの相対パスとして解決 |
Parameter Color Space .parmcolorspace 🎨
このコンポーネント内の色パラメータをどの色空間として解釈するか
| 項目 | 内部名 | 説明 |
|---|---|---|
| sRGB | .srgb |
標準的な sRGB ガンマ空間 |
| sRGB – Linear | .srgblinear |
sRGB プライマリでガンマ線形 (1.0) |
| Rec.601 (NTSC) | .rec601ntsc |
Rec.601 NTSC 規格の色空間 |
| Rec.709 | .rec709 |
HDTV 用 Rec.709 色空間 |
| Rec.2020 | .rec2020 |
UHDTV / HDR 向け Rec.2020 広色域 |
| DCI-P3 | .dcip3 |
デジタルシネマ DCI-P3 色空間 |
| DCI-P3 (D60) | .dcip3d60 |
D60 白点 DCI-P3 |
| Display-P3 (D65) | .displayp3d65 |
D65 白点 Display-P3 (Apple ディスプレイ等) |
| ACES2065-1 | .aces2065-1 |
ACES アーカイブ用色空間 (AP0 プライマリ) |
| ACEScg | .acescg |
ACES CG 作業用色空間 (AP1 プライマリ) |
| Passthrough | .passthrough |
色変換を行わず値をそのまま扱う |
Parameter Reference White .parmreferencewhite ⚪
色パラメータの基準白色の扱い
| 項目 | 内部名 | 説明 |
|---|---|---|
| Default For Color Space | .default |
選択した色空間のデフォルト基準白を使用 |
| Use Parent Panel | .useparent |
親パネルの基準白設定を継承 |
| Standard (SDR) | .sdr |
標準ダイナミックレンジ (SDR) 基準白 |
| High (HDR) | .hdr |
ハイダイナミックレンジ (HDR) 基準白 |
| UI | .ui |
UI 表示用の基準白 |
実践アイデア 💡
Example 1: 送信プロセスから受信プロセスへトランスフォーム共有 🔁
送信側 .toe: 親 COMP → Shared Mem Out COMP (Shared Mem Name=cam_xform) → 共有メモリ → 受信側 .toe: Shared Mem In COMP (Shared Mem Name=cam_xform) → Camera COMP の Translate/Rotate
1 台のマシンで 2 つの TouchDesigner プロセスを起動し、送信側で計算したカメラのトランスフォームを受信側プロセスのレンダリングカメラに反映する基本構成。Shared Mem Out COMP と Shared Mem In COMP を同じ Shared Mem Name で繋ぐだけで OS の共有メモリ経由の低遅延 IPC が成立する。
- 送信側プロジェクトでカメラ制御ロジックを Base COMP にまとめ、その配下に Shared Mem Out COMP を配置
- Shared Mem Out COMP の Shared Mem Name パラメータに識別名 (例:
cam_xform) を入力し Active をオン - 受信側プロジェクトを別プロセスとして起動し、Shared Mem In COMP を配置
- 受信側 Shared Mem In COMP の Shared Mem Name に送信側と同じ
cam_xformを入力 - 受信側で取得したトランスフォームを Camera COMP の Translate / Rotate に Export
Example 2: 重い処理プロセスと描画プロセスの分離 ⚡
Process A (機械学習推論 / 物理シミュレーション) → Shared Mem Out COMP (Shared Mem Name=sim_state) → Process B (レンダリング専念) → Shared Mem In COMP → Geometry COMP に反映
CPU 負荷の高い計算 (機械学習推論・物理シミュレーション等) を 1 つのプロセスに隔離し、もう 1 つのプロセスをレンダリング専念にすることで描画フレームレートを安定させる構成。Shared Mem Out COMP で計算結果のトランスフォームを共有メモリへ書込み、描画プロセスがそれを受信して 3D オブジェクトに反映する。
- 計算プロセスで Bullet Solver COMP / Actor COMP 等を Base COMP に格納し負荷を局所化
- 計算結果を反映したい COMP の配下に Shared Mem Out COMP を配置し Shared Mem Name を
sim_state等に設定 - 描画プロセス側で Shared Mem In COMP を配置し同じ名前を指定
- 描画プロセス側の Geometry COMP の Translate / Rotate に受信したトランスフォームを Export
- 計算プロセスがブロックされても描画プロセスは前回値で継続するため、フレームレート不安定を抑制
Example 3: マルチディスプレイ展示で複数プロセスを同期 🖥️
マスタープロセス (シーン制御) → Shared Mem Out COMP (Shared Mem Name=master_xform) → 共有メモリ → 4 つの描画プロセス → 各 Shared Mem In COMP → 各ディスプレイへ Window COMP
4 面マルチディスプレイのインスタレーションで、マスタープロセス 1 個 + 描画プロセス 4 個という構成を取り、シーン全体のトランスフォームを Shared Mem Out COMP で配信、各描画プロセスが同じ Shared Mem Name で受信して同期描画する構成。同一マシン内のプロセス間で完結するため通信遅延が小さく、Window COMP の Multi-GPU 構成と相性が良い。
- マスタープロセスでシーン全体の制御 COMP を構築し、配下に Shared Mem Out COMP を配置
- Shared Mem Out COMP の Shared Mem Name を
master_xform等に設定 - 描画プロセス 4 個を別 .toe ファイルとして起動し、それぞれ Shared Mem In COMP で
master_xformを受信 - 各描画プロセスは自分の担当ディスプレイの視錐台を持ち、受信したトランスフォームをカメラに適用
- 各描画プロセスの Window COMP で対応する物理ディスプレイへ出力
関連オペレータ 🔗
類似機能OP 🔍
- Shared Mem In COMP — 本 COMP のペアとなる受信側 COMP。同じ Shared Mem Name を指定して共有メモリからトランスフォームを読み取る
組み合わせ推奨OP 🔄
- Shared Mem In COMP — 受信側 COMP として常にペアで使用
- Shared Mem In CHOP — CHOP データを別プロセスから受信する別ファミリの IPC OP
- Shared Mem In TOP — テクスチャデータをプロセス間共有する別ファミリの IPC OP (Commercial / Pro のみ)
- Touch In CHOP — TCP/UDP 経由のネットワーク IPC。マシン跨ぎが必要な場合の代替
前処理・後処理COMP 🎯
Info COMP情報 📊
Shared Mem Out COMP は Info CHOP / Info DAT による詳細情報取得に対応しています。
COMP 固有情報 📦
num_children: コンポーネント内部の子 OP の総数num_dats: 内部 DAT の数num_chops: 内部 CHOP の数num_tops: 内部 TOP の数num_sops: 内部 SOP の数
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数cook_abs_frame: 絶対時間基準でのクックフレーム番号cook_start_time: オペレータがクックを開始した時刻cook_end_time: クックが完了した時刻cooked_this_frame: 現在のフレームでクックされた場合は1
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 受信側 Shared Mem In COMP でデータが取得できない
✅ Solution:
- 送信側と受信側で Shared Mem Name が完全一致しているか確認 (大文字小文字も区別)
- 送信側の Active パラメータがオンになっているか確認 (オフだと cook が止まり書込みも停止)
- 送信側と受信側のプロセスが同じマシン上で動作しているか確認 (共有メモリは OS プロセス間でのみ機能、マシン跨ぎは不可)
❌ Problem: Educational / Commercial / Pro エディションかどうか分からない
✅ Solution:
- 起動時のスプラッシュ画面または
Help → Aboutでエディションを確認 - Shared Mem Out COMP は Educational / Commercial / Pro で使用可能、Non-Commercial では利用不可
- テクスチャを共有する Shared Mem In TOP は Commercial / Pro のみで制限が厳しい点に注意
❌ Problem: 送信側プロセスを再起動するとリンクが切れる
✅ Solution:
- 受信側 Shared Mem In COMP の Active を一度オフ → オンでリンクを再確立
- 送信側プロセスが先に起動するように起動順を決める (送信側がメモリブロックを作成し、受信側がそこへアタッチする想定)
- 起動順を制御できない場合は、受信側で定期的に Shared Mem In COMP を pulse して再アタッチを試行
❌ Problem: マシン跨ぎ (LAN 経由) でデータを送りたい
✅ Solution:
- Shared Mem Out COMP は同一マシン内 IPC 専用のため、LAN 経由には使えない
- ネットワーク経由の伝送には Touch Out CHOP / OSC Out CHOP / TCP/IP DAT を使用
- テクスチャをネットワーク跨ぎで送るには NDI Out TOP や Touch Out TOP を検討
参考資料 📚
その他 🔗
- TouchDesigner Wiki — COMP 概要
- TouchDesigner Wiki — Category:COMPs
- TouchDesigner Wiki — Category:Components
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Shared Mem Out COMP
- TouchDesigner公式ドキュメント – Shared Mem In COMP
- TouchDesigner公式ドキュメント – Shared Memory

