
概要 📖 – 共有メモリから画像を受信
Shared Mem In TOPは、OS の共有メモリブロックからテクスチャを読み取り、同一マシン内の別プロセスや外部アプリケーションが書き込んだ画像をリアルタイムに受信する TOPです。送信側で Shared Mem Out TOP を同じ Shared Mem Name で設定するとテクスチャを共有でき、Commercial / Pro エディションで利用可能です。Shared Mem Type を Local にすると TouchDesigner 以外のアプリケーション (C++ / Unity / Python 等) との連携が可能になります。
主な用途 🎯
- 別プロセスの TouchDesigner が書き出したテクスチャを共有メモリ経由で受信
- 外部アプリケーション (C++ / Unity / Python 等) が書き込んだテクスチャを同一マシン IPC で受信
- Shared Mem Out TOP とペアで構築する低遅延テクスチャ共有 (NDI より低レイテンシ)
- 重い描画プロセスと軽い制御プロセスを分離し、制御側で結果テクスチャを受け取る
- Shared Mem Type の Local 指定で TouchDesigner 以外のアプリとテクスチャを共有
データフロー 🔄
入力: OS 共有メモリ (Shared Mem Out TOP / 外部アプリが書込み)
↓
Shared Mem Name で識別される共有メモリブロックを読取
↓
Shared Mem Type (Local / Global) でセグメントを選択
↓
出力: テクスチャ (下流 TOP へ供給)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
SharedMemIn Page 📋
Shared Mem Name .name 🏷️
読取元となる共有メモリブロックの識別名:
- Shared Mem Name:
name(共有メモリ名) — 読取元の共有メモリブロックの識別名。送信側の Shared Mem Out TOP や外部アプリケーションで設定した名前と完全に一致させることで接続されます (大文字小文字も区別)
Shared Mem Type .memtype 🗂️
ローカル共有メモリとグローバル共有メモリの切替
| 項目 | 内部名 | 説明 |
|---|---|---|
| Local | .local |
指定名ごとに固有の共有メモリセグメントを使用。TouchDesigner 以外のアプリケーション (C++ / Unity / Python 等) とテクスチャを共有する場合は必ずこのモードを使う |
| Global | .global |
全ノードが共通の共有メモリセグメントを読み取るモード。詳細は公式 docs の Global Shared Memory ページを参照 |
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 📐
カスタム解像度の幅・高さ指定 (Output Resolution = Custom 等の時のみ有効):
- 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 📐
カスタムアスペクト比の指定 (Output Aspect = Custom Aspect の時のみ有効):
- Aspect1: 横方向アスペクト値 (
Output Aspect= Custom Aspect の時のみ有効) - 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各チャンネルのオン/オフトグル。オフのチャンネルは TOP の処理を受けず入力値がそのまま通過
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 から画像受信 🐍
外部 Python プロセス (NumPy で共有メモリへ書込み) → 共有メモリ → Shared Mem In TOP (Local, name='python_to_td') → Composite TOP → 表示
外部 Python スクリプトが生成・処理した画像を TouchDesigner 側でリアルタイムに受信する構成。Python 側で mmap などにより共有メモリブロックへ画像を書き込み、Shared Mem In TOP の Shared Mem Type を Local + 同じ Shared Mem Name に設定して受信する。NDI や TCP/UDP 経由よりも低レイテンシで生のピクセルデータを取り込める。
- 外部 Python 側で共有メモリブロックを作成し、ヘッダ情報 (幅・高さ・ピクセルフォーマット) とピクセルデータを書き込む
- TouchDesigner で Shared Mem In TOP を配置し、Shared Mem Name を
python_to_tdに設定 - Shared Mem Type を Local に設定 (外部アプリ連携の必須条件)
- 受信したテクスチャを Composite TOP や Null TOP に接続して表示・後処理
Example 2: 重い処理の結果を受信 ⚡
Process A (機械学習推論 / 重い Render TOP) → Shared Mem Out TOP (name=ml_result) → 共有メモリ → Process B (UI 制御専念) → Shared Mem In TOP → 表示
CPU / GPU 負荷の高い処理 (機械学習推論・複雑な GLSL TOP 等) を 1 つのプロセスに隔離し、もう 1 つの UI 制御プロセス側で結果テクスチャを受け取って表示する構成。Shared Mem In TOP が計算プロセスから書き込まれたテクスチャを共有メモリ経由で受信することで、UI 側のフレームレートを安定させる。
- 計算プロセス側で Render TOP / GLSL TOP / Script TOP 等の重い処理を実行し、Shared Mem Out TOP で書き出す
- UI プロセス側で Shared Mem In TOP を配置し Shared Mem Name を
ml_result等に揃える - Shared Mem Type を送信側と同じモード (通常 Local) に設定
- 受信したテクスチャを Container COMP や Composite TOP 等で表示
Example 3: Unity から映像受信 🎮
Unity / Unreal 側プラグイン (RenderTexture を共有メモリへ書込み) → 共有メモリ → Shared Mem In TOP (Local, name='unity_to_td') → Composite TOP
Unity / Unreal Engine 等のゲームエンジンでレンダリングした映像を TouchDesigner 側へテクスチャとして取り込む構成。エンジン側で Spout / Syphon ラッパや専用ネイティブプラグインを用いて共有メモリブロックへ書き込み、Shared Mem In TOP の Shared Mem Type を Local + 同名指定で受信する。NDI より低レイテンシかつ非圧縮で高品質な映像を取り込める。
- Unity / Unreal 側で対応する共有メモリ書込みプラグイン (Spout 互換等) を導入し、RenderTexture を共有メモリへ書き出す
- TouchDesigner で Shared Mem In TOP を配置し Shared Mem Name を
unity_to_td等に揃える - Shared Mem Type = Local を設定 (外部アプリ連携の必須条件)
- 受信したテクスチャを Composite TOP や Render TOP のテクスチャ入力として 3D シーンや合成に反映
関連オペレータ 🔗
類似機能OP 🔍
- Shared Mem Out TOP — 対となる送信側 TOP、同じ Shared Mem Name で接続
- NDI In TOP — ネットワーク経由でテクスチャを受信、別マシンからも到達可能 (高レイテンシ・圧縮あり)
- DirectX In TOP — DirectX 共有テクスチャ経由で別アプリから受信 (Windows のみ、低レイテンシ)
- Touch In TOP — TouchDesigner 間限定のテクスチャ受信、Touch Out TOP とペア
- Video Stream In TOP — RTSP / SRT 等のストリーミングプロトコルで映像受信、別マシンから
組み合わせ推奨OP 🔄
- Shared Mem Out TOP — 送信側 TOP として常にペアで使用
- Composite TOP — 受信したテクスチャを他の映像と重ねて合成
- Null TOP — 受信直後の出力固定点として配置し下流の参照を安定化
- Cache TOP — 受信フレームをキャッシュして欠落フレーム時の表示を安定化
- Render TOP — 受信テクスチャを 3D マテリアルのテクスチャ入力として利用
前処理・後処理TOP 🎯
- 前処理: Shared Mem Out TOP
- 後処理: Null TOP、Composite TOP、Cache TOP
Info情報 📊
Shared Mem In 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: 送信側からのテクスチャが受信できない
✅ Solution:
- 送信側と受信側で Shared Mem Name が完全一致しているか確認 (大文字小文字も区別)
- 送信側 Shared Mem Out TOP の Active がオンになっており書込みが行われているか確認
- 送信側と受信側のプロセスが同じマシン上で動作しているか確認 (共有メモリは同一マシン内 IPC 専用、LAN 跨ぎは不可)
- TouchDesigner のエディションが Commercial / Pro かを確認 (Non-Commercial では Shared Mem TOP は利用不可)
❌ Problem: 受信した画像が乱れる / 想定と色や解像度が違う
✅ Solution:
- 送信側と受信側の Shared Mem Type が同じモード (通常 Local) に揃っているか確認
- 送信側が書き込んだピクセルフォーマットと受信側で期待するフォーマットが一致しているか確認
- 外部アプリが書き込む場合は共有メモリヘッダ (幅・高さ・ピクセルフォーマット) の書込み順序が公式 docs の仕様と一致しているか確認
- 受信直後に Null TOP を挟んで出力を固定し、下流での解釈ズレを切り分け
❌ Problem: 外部アプリ (C++ / Unity / Python) から書き込んだ画像を受け取れない
✅ Solution:
- Shared Mem Type が Local になっているか確認 (Global は TouchDesigner 内部限定の用途)
- 外部側で書き込む共有メモリ名と Shared Mem In TOP の Shared Mem Name が完全一致しているか確認
- Windows のセキュリティポリシーで Global 名前空間にアクセス権がない場合があるため、Local 名前空間を使用
- 公式 docs の Shared Memory ページに掲載されている C++ / Python サンプルコードと一致した API 呼び出しになっているか確認
❌ Problem: 送信側プロセスを再起動するとリンクが切れる
✅ Solution:
- 受信側 Shared Mem In TOP の Active を一度オフ → オンでリンクを再確立
- 送信側プロセスが先に起動するように起動順を決める (送信側がメモリブロックを作成し、受信側がそこへアタッチする想定)
- 起動順を制御できない場合は受信側で定期的に再アタッチを試行する仕組みを用意
❌ Problem: マシン跨ぎ (LAN 経由) でテクスチャを受信したい
✅ Solution:
- Shared Mem In TOP は同一マシン内 IPC 専用のため LAN 経由には使えない
- ネットワーク経由でテクスチャを受信するには NDI In TOP や Touch In TOP / Video Stream In TOP を使用
- 低レイテンシ・非圧縮が必要なら NDI HX ではなく NDI Full 規格や Touch In TOP を選択
参考資料 📚
その他 🔗
- TouchDesigner Wiki — Category:TOPs
- TouchDesigner Wiki — Pixel Formats 解説
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Shared Mem In TOP
- TouchDesigner公式ドキュメント – Shared Mem Out TOP
- TouchDesigner公式ドキュメント – Shared Memory

