
概要 📖 – 画像を共有メモリへ送信
Shared Mem Out TOPは、入力されたテクスチャを OS の共有メモリブロックに書き出し、同一マシン内の別プロセスや外部アプリケーションがリアルタイムに読取可能にする TOPです。受信側で Shared Mem In TOP を同じ Shared Mem Name で設定するとテクスチャを共有でき、Commercial / Pro エディションで利用可能です。Download Type の Next Frame (Fast) を選ぶと GPU → CPU ダウンロードのストールを抑えてパフォーマンスが向上します。
主な用途 🎯
- 別プロセスの TouchDesigner へテクスチャを共有メモリ経由で送信
- 外部アプリケーション (C++ / Unity / Python 等) へリアルタイムにテクスチャを引き渡す同一マシン IPC
- 重い描画プロセスと軽い制御プロセスを分離してフレームレートを安定化
- Shared Mem In TOP とペアで構築する低遅延テクスチャ共有 (NDI より低レイテンシ)
- Download Type の Next Frame (Fast) 切替で GPU → CPU ダウンロード負荷を軽減
データフロー 🔄
入力: テクスチャ (上流 TOP)
↓
Active によるクック制御
↓
GPU から CPU へのダウンロード (Download Type 設定)
↓
Shared Mem Name で識別される共有メモリブロックへ書込み
↓
出力: OS 共有メモリ (Shared Mem In TOP / 外部アプリから読取可能)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
SharedMemOut Page 📋
Active .active 🟢
共有メモリ書込みの有効化:
- Active:
active(有効) — オンの場合、毎フレーム入力テクスチャをクックして共有メモリブロックへ書き込みます。オフの場合は cook が停止し、外部プロセスから読まれる値は最後に書き込まれた状態のまま残ります
Shared Mem Name .name 🏷️
共有メモリブロックの識別名:
- Shared Mem Name:
name(共有メモリ名) — 書込み先の共有メモリブロックの識別名。受信側の Shared Mem In TOP や外部アプリケーションで同じ名前を指定することで接続されます (大文字小文字も区別)
Shared Mem Type .memtype 🗂️
ローカル共有メモリとグローバル共有メモリの切替
| 項目 | 内部名 | 説明 |
|---|---|---|
| Local | .local |
指定名ごとに固有の共有メモリセグメントを使用。TouchDesigner 以外のアプリケーション (C++ / Unity / Python 等) とテクスチャを共有する場合は必ずこのモードを使う |
| Global | .global |
全ノードが共通の共有メモリセグメントを読み書きするモード。詳細は公式 docs の Global Shared Memory ページを参照 |
Download Type .downloadtype ⚡
GPU から CPU へのテクスチャダウンロード方式の選択 (パフォーマンスに直結)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Immediate (Slow) | .immediate |
現フレームでクック完了と同時に GPU → CPU ダウンロードを実行。GPU パイプラインがストールするためフレームレートが落ちやすい (デバッグ時や即時値が必要な場面向け) |
| Next frame (Fast) | .nextframe |
ダウンロードを次フレームに遅延させ GPU パイプラインのストールを回避。1 フレームのレイテンシが発生するがパフォーマンスは大幅に向上 (リアルタイム用途で推奨) |
Common Page 🔧
Output Resolution .outputresolution 🖼️
出力解像度の決定方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| Use Input | .useinput |
入力 TOP の解像度をそのまま継承 |
| Eighth | .eighth |
入力解像度の 1/8 |
| Quarter | .quarter |
入力解像度の 1/4 |
| Half | .half |
入力解像度の 1/2 |
| 2X | .2x |
入力解像度の 2 倍 |
| 4X | .4x |
入力解像度の 4 倍 |
| 8X | .8x |
入力解像度の 8 倍 |
| Fit Resolution | .fit |
指定解像度に縦横比を保持して収める |
| Limit Resolution | .limit |
指定解像度を上限としてクランプ |
| Custom Resolution | .custom |
Resolution パラメータで任意指定 |
Resolution .resolution 📐
カスタム解像度の幅・高さ指定:
- Resolution W: 出力幅 (ピクセル単位)。
Output ResolutionがCustom Resolution/Fit Resolution/Limit Resolutionの時に有効 - Resolution H: 出力高 (ピクセル単位)。同上
Resolution Menu .resmenu 📋
よく使う解像度プリセットのドロップダウン:
- Resolution Menu: NTSC / PAL / HDTV 720 / HDTV 1080 / 4K UHD 等のプリセットから選択すると
Resolution W/Resolution Hが自動セットされる
Use Global Res Multiplier .resmult 🔢
プロジェクト全体の解像度倍率の適用:
- Use Global Res Multiplier: Project Settings の Global Resolution Multiplier をこの TOP に適用するかどうか
Output Aspect .outputaspect 📏
出力アスペクト比の決定方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| Use Input | .useinput |
入力 TOP のアスペクトを継承 |
| Resolution | .resolution |
解像度から自動導出 (推奨デフォルト) |
| Custom Aspect | .custom |
Aspect1 / Aspect2 で手動指定 |
Aspect .aspect 📐
カスタムアスペクト比の指定:
- Aspect1: 横方向アスペクト値
- Aspect2: 縦方向アスペクト値
Input Smoothness .inputfiltertype 🎚️
入力テクスチャのサンプリング方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| Nearest Pixel | .nearest |
最近傍ピクセルサンプリング (ピクセルアート向け) |
| Interpolate Pixels | .linear |
バイリニア補間 (滑らか、デフォルト) |
| Mipmap Pixels | .mipmap |
ミップマップ補間 (縮小時のモアレ抑制) |
Fill Viewer .fillmode 🖥️
ビューア内でのテクスチャの収め方
| 項目 | 内部名 | 説明 |
|---|---|---|
| Use Input | .useinput |
入力 TOP の Fill Viewer 設定を継承 |
| Fill | .fill |
ビューアいっぱいに引き伸ばす (アスペクト無視) |
| Fit Horizontal | .width |
横幅に合わせて収める |
| Fit Vertical | .height |
縦幅に合わせて収める |
| Fit Best | .best |
アスペクト保持で内側に収まる最大サイズ |
| Fit Outside | .outside |
アスペクト保持で外側まで覆う最小サイズ |
| Native Resolution | .nativeres |
テクスチャのネイティブ解像度のまま等倍表示 |
Viewer Smoothness .filtertype 🎛️
ビューア表示時のサンプリング方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| Nearest Pixel | .nearest |
最近傍ピクセルサンプリング |
| Interpolate Pixels | .linear |
バイリニア補間 (滑らか、デフォルト) |
| Mipmap Pixels | .mipmap |
ミップマップ補間 (縮小ビュー時のモアレ抑制) |
Passes .npasses 🔁
オペレータの反復実行回数:
- Passes: TOP の処理を何パス繰り返すかの整数値。前回パスの結果が次回パスの入力になる
Channel Mask .chanmask 🎨
処理対象のチャンネルマスク (R/G/B/A 個別トグル):
- Channel Mask:
R/G/B/A各チャンネルのオン/オフトグル
Pixel Format .format 🎨
出力テクスチャのピクセルフォーマット (ビット深度・チャンネル構成)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Use Input | .useinput |
入力 TOP のフォーマットを継承 |
| 8-bit fixed (RGBA) | .rgba8fixed |
標準 8 ビット固定小数 RGBA (デフォルト、軽量) |
| sRGB 8-bit fixed (RGBA) | .srgba8fixed |
sRGB ガンマ補正済 8 ビット RGBA |
| 16-bit float (RGBA) | .rgba16float |
16 ビット浮動小数 RGBA (HDR・中間処理向け) |
| 32-bit float (RGBA) | .rgba32float |
32 ビット浮動小数 RGBA (最高精度、メモリ大) |
| 10-bit RGB with 2-bit Alpha | .rgb10a2fixed |
10-10-10-2 ビット固定小数 (バンディング抑制) |
| 16-bit fixed (RGBA) | .rgba16fixed |
16 ビット固定小数 RGBA |
| 11-bit float (RGB) | .rgb11float |
11-11-10 ビット浮動小数 RGB (HDR 軽量) |
| 16-bit float (RGB) | .rgb16float |
16 ビット浮動小数 RGB |
| 32-bit float (RGB) | .rgb32float |
32 ビット浮動小数 RGB |
| 8-bit fixed (Mono) | .mono8fixed |
8 ビット固定小数モノクロ |
| 16-bit fixed (Mono) | .mono16fixed |
16 ビット固定小数モノクロ |
| 16-bit float (Mono) | .mono16float |
16 ビット浮動小数モノクロ |
| 32-bit float (Mono) | .mono32float |
32 ビット浮動小数モノクロ |
| 8-bit fixed (RG) | .rg8fixed |
8 ビット固定小数 R+G 2 チャンネル |
| 16-bit fixed (RG) | .rg16fixed |
16 ビット固定小数 R+G |
| 16-bit float (RG) | .rg16float |
16 ビット浮動小数 R+G |
| 32-bit float (RG) | .rg32float |
32 ビット浮動小数 R+G |
| 8-bit fixed (A) | .a8fixed |
8 ビット固定小数アルファ単体 |
| 16-bit fixed (A) | .a16fixed |
16 ビット固定小数アルファ単体 |
| 16-bit float (A) | .a16float |
16 ビット浮動小数アルファ単体 |
| 32-bit float (A) | .a32float |
32 ビット浮動小数アルファ単体 |
| 8-bit fixed (Mono+Alpha) | .monoalpha8fixed |
8 ビット固定小数モノクロ+アルファ |
| 16-bit fixed (Mono+Alpha) | .monoalpha16fixed |
16 ビット固定小数モノクロ+アルファ |
| 16-bit float (Mono+Alpha) | .monoalpha16float |
16 ビット浮動小数モノクロ+アルファ |
| 32-bit float (Mono+Alpha) | .monoalpha32float |
32 ビット浮動小数モノクロ+アルファ |
実践アイデア 💡
Example 1: Python へ画像送信 🐍
Movie File In TOP → Composite TOP → Shared Mem Out TOP (Local, name='td_to_python', Download Type=Next Frame) → 外部 Python プロセス (NumPy で読取)
TouchDesigner で生成・合成したテクスチャを外部 Python スクリプトへリアルタイムに引き渡す構成。Shared Mem Out TOP の Shared Mem Type を Local に設定し、外部 Python 側で同名の共有メモリブロックを mmap などで開いて NumPy 配列として読み取る。NDI や TCP/UDP 経由よりも低レイテンシで生のピクセルデータを共有できる。
- Movie File In TOP や Composite TOP 等で送信したいテクスチャを構成
- Shared Mem Out TOP を接続し、Shared Mem Name を
td_to_pythonに設定 - Shared Mem Type を Local に設定 (外部アプリ連携の必須条件)
- Download Type を Next Frame (Fast) に設定して GPU パイプラインのストールを回避
- 外部 Python 側で同名の共有メモリを開き、ヘッダ情報 (幅・高さ・ピクセルフォーマット) を取得してから NumPy 配列としてピクセルを読み取る
Example 2: 重い描画を別プロセスへ ⚡
Process A (機械学習推論 / 重い Render TOP) → Shared Mem Out TOP (Shared Mem Name=ml_result) → Process B (UI 制御専念) → Shared Mem In TOP → 表示
CPU / GPU 負荷の高い処理 (機械学習推論・複雑な GLSL TOP 等) を 1 つのプロセスに隔離し、もう 1 つのプロセスを UI 制御・出力専念にすることで UI のフレームレートを安定させる構成。Shared Mem Out TOP で計算結果のテクスチャを共有メモリへ書込み、UI プロセスがそれを受信して表示する。
- 計算プロセスで Render TOP や GLSL TOP / Script TOP 等の重い処理を実行
- 結果テクスチャの直後に Shared Mem Out TOP を配置し Shared Mem Name を
ml_result等に設定 - Download Type を Next Frame (Fast) に設定して計算側 GPU の足を引っ張らないようにする
- UI プロセス側で Shared Mem In TOP を配置し同じ名前を指定
- UI プロセス側で受信したテクスチャを Container COMP や Composite TOP 等で表示
Example 3: Unity へ映像配信 🎮
Render TOP → Shared Mem Out TOP (Local, name='td_to_unity') → 共有メモリ → Unity / Unreal 側プラグイン → Texture2D / RenderTexture に反映
TouchDesigner でレンダリングした映像を Unity / Unreal Engine 等のゲームエンジン側にテクスチャとして取り込む構成。Shared Mem Type を Local に設定し、Unity 側では Spout / Syphon ラッパや専用ネイティブプラグインで同名の共有メモリブロックを Texture2D として読み込む。NDI より低レイテンシかつ非圧縮で高品質な映像を渡せる。
- TouchDesigner 側で Render TOP / Composite TOP 等から最終映像を構築
- Shared Mem Out TOP を接続し Shared Mem Name を
td_to_unity等に設定 - Shared Mem Type = Local + Download Type = Next Frame (Fast) を設定
- Unity / Unreal 側で対応する共有メモリ読み込みプラグイン (Spout 互換等) を導入し同じ名前で開く
- 受信したテクスチャを Material の MainTex や RenderTexture に割り当てて 3D シーンに反映
関連オペレータ 🔗
類似機能OP 🔍
- Shared Mem In TOP — 対となる受信側 TOP、同じ Shared Mem Name で接続
- NDI Out TOP — ネットワーク経由でテクスチャを送信、別マシン宛にも到達可能 (高レイテンシ・圧縮あり)
- DirectX Out TOP — DirectX 共有テクスチャ経由で別アプリへ送信 (Windows のみ、低レイテンシ)
- Touch Out TOP — TouchDesigner 間限定のテクスチャ送信、Touch In TOP とペア
- Video Stream Out TOP — RTSP / SRT 等のストリーミングプロトコルで映像送信、別マシン向け
組み合わせ推奨OP 🔄
- Shared Mem In TOP — 受信側 TOP として常にペアで使用
- Render TOP — 3D シーンのレンダリング結果を共有メモリ経由で別プロセスへ転送
- Composite TOP — 複数 TOP を合成してから単一テクスチャとして送信
- Movie File In TOP — 動画ファイルを共有メモリ経由で別プロセスへ渡す
- Cache TOP — 送信前にフレームをキャッシュし安定したレートで配信
- Null TOP — 上流 TOP の出力固定点として Shared Mem Out の直前に配置
前処理・後処理TOP 🎯
- 前処理: Render TOP、Composite TOP、Movie File In TOP、Video Device In TOP
- 後処理: Shared Mem In TOP、Null TOP、Cache TOP
Info情報 📊
Shared Mem Out TOP は Info CHOP / Info DAT による詳細情報取得に対応しています。
TOP固有情報 🖼️
resx: TOP の出力解像度 X (ピクセル単位)resy: TOP の出力解像度 Y (ピクセル単位)aspectx: アスペクト比 Xaspecty: アスペクト比 Ydepth: 3D テクスチャ / テクスチャ配列の深度 (2D テクスチャでは 1)gpu_memory_used: TOP が消費している GPU メモリ量 (MB 単位)
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数cooked_this_frame: 現在のフレームでクックされた場合は1
TOP 共通情報 🖼️
resx: 出力テクスチャの幅 (ピクセル単位)resy: 出力テクスチャの高さ (ピクセル単位)aspectx: テクスチャの横方向アスペクト値aspecty: テクスチャの縦方向アスペクト値depth: テクスチャの奥行 (3D テクスチャ時)
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 受信側 Shared Mem In TOP やアプリでテクスチャが取得できない
✅ Solution:
- 送信側と受信側で Shared Mem Name が完全一致しているか確認 (大文字小文字も区別)
- 送信側の Active パラメータがオンになっているか確認 (オフだと cook が止まり書込みも停止)
- 送信側と受信側のプロセスが同じマシン上で動作しているか確認 (共有メモリは同一マシン内 IPC 専用、LAN 跨ぎは不可)
- TouchDesigner のエディションが Commercial / Pro かを確認 (Non-Commercial では Shared Mem TOP は利用不可)
❌ Problem: フレームレートが落ちる / 描画が重くなる
✅ Solution:
- Download Type が Immediate (Slow) になっていないか確認し、リアルタイム用途では Next Frame (Fast) に切り替え
- テクスチャ解像度を必要最小限に抑える (Common Page の
Output Resolutionを Half や Quarter に下げて検証) - Pixel Format を 32-bit float から 8-bit fixed (RGBA) に下げて GPU → CPU ダウンロード負荷を削減
- 前段に Cache TOP を入れてフレームを安定化し、必要なフレームだけクック対象にする
❌ Problem: 外部アプリ (C++ / Unity / Python) から接続できない
✅ Solution:
- Shared Mem Type が Local になっているか確認 (Global は TouchDesigner 内部限定の用途)
- 外部側で共有メモリヘッダの読み取り順序が公式 docs の仕様 (幅・高さ・ピクセルフォーマット) と一致しているか確認
- Windows のセキュリティポリシーで Global 名前空間にアクセス権がない場合があるため、Local 名前空間を使用
- 公式 docs の Shared Memory ページに掲載されている C++ / Python サンプルコードと一致した API 呼び出しになっているか確認
❌ Problem: 送信側プロセスを再起動するとリンクが切れる
✅ Solution:
- 受信側 Shared Mem In TOP の Active を一度オフ → オンでリンクを再確立
- 送信側プロセスが先に起動するように起動順を決める (送信側がメモリブロックを作成し、受信側がそこへアタッチする想定)
- 起動順を制御できない場合は受信側で定期的に再アタッチを試行する仕組みを用意
❌ Problem: マシン跨ぎ (LAN 経由) でテクスチャを送りたい
✅ Solution:
- Shared Mem Out TOP は同一マシン内 IPC 専用のため LAN 経由には使えない
- ネットワーク経由でテクスチャを送るには NDI Out TOP や Touch Out TOP / Video Stream Out TOP を使用
- 低レイテンシ・非圧縮が必要なら NDI HX ではなく NDI Full 規格や Touch Out TOP を選択
参考資料 📚
その他 🔗
- TouchDesigner Wiki — Category:TOPs
- TouchDesigner Wiki — Pixel Formats 解説
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Shared Mem Out TOP
- TouchDesigner公式ドキュメント – Shared Mem In TOP
- TouchDesigner公式ドキュメント – Shared Memory

