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

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

CPlusPlus TOP の C++ プラグイン機構を示す図

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

概要 📖 – C++ プラグインによる TOP 拡張

CPlusPlus TOPは、C++ で記述したプラグイン (DLL) をロードして独自の GPU 処理や外部 SDK 統合をフレーム単位で実行する TOPです。Custom Operators API を用いて Pixel Format / Anti-Alias / 出力バッファ数まで制御し、テンプレート TOP では実現できない処理を C++ ネイティブで組み込めます。

主な用途 🎯

  • C++ で記述したカスタム TOP プラグイン (DLL) のロードと実行
  • 独自の GPU シェーダ処理 (テンプレ TOP では実現できないアルゴリズムの実装)
  • 外部 SDK (カメラ・キャプチャデバイス・GPU SDK 等) との統合
  • マルチカラーバッファ出力 (1 つのプラグインから複数 RGBA バッファを同時出力)
  • 独自のフレームバッファ設定 (Anti-Alias / Depth Buffer / Stencil Buffer のカスタム制御)

データフロー 🔄

入力: 上流 TOP の画像 (任意)

C++ プラグイン (DLL) の execute コールバック

出力: フレームバッファ (Pixel Format / Anti-Alias 設定に従う)

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Load Page 📋

プラグインロード .plugin_load 🔌

ロードする C++ プラグイン (DLL) のパスと再初期化制御

Plugin Path .plugin 📂
– ロードする C++ プラグイン (DLL) ファイルのパス
– 絶対パスまたは TouchDesigner プロジェクトからの相対パスで指定

Re-Init Class .reinit 🔁
– オンにするとプラグインが生成したクラスインスタンスを破棄し、新しいインスタンスを生成
– プラグイン内部状態をリセットしたいときに使用

Re-Init Class (Pulse) .reinitpulse
– パルス入力で即座にクラスインスタンスを再初期化
reinit パラメータと違い、トグル維持せず 1 フレームだけ発火する

Unload Plugin .unloadplugin 📤
– 値が 1 を超えるとクラスインスタンスを破棄しプラグイン DLL 自体をアンロード
– DLL ファイルのロックを解放したいときに使用

Anti-Alias .antialias 🪞

プラグイン用フレームバッファのアンチエイリアスレベル

項目 内部名 説明
1x .aa1 アンチエイリアスなし (1 サンプル / ピクセル)
2x .aa2 2 サンプル / ピクセル
4x .aa4 4 サンプル / ピクセル
8x .aa8 8 サンプル / ピクセル
16x .aa16 16 サンプル / ピクセル
32x .aa32 32 サンプル / ピクセル (最高品質、最も VRAM 消費)

バッファ設定 .buffer_settings 🧰

Depth / Stencil / マルチカラーバッファのフレームバッファ構成

Depth Buffer .depthbuffer 📐
– 作成するフレームバッファに付与する深度バッファのピクセルフォーマットを指定
– 不要な場合は None を選択

Stencil Buffer .stencilbuffer 🪧
– ステンシルバッファを付与する場合にオン
– マスク処理などステンシル機能が必要なシェーダで使用

# of Color Buffers .numcolorbufs 🎨
– 1 つのプラグインから同時出力するカラーバッファ (RGBA) の本数
– 2 本以上に設定した場合、シェーダ側で gl_FragData[i] に書込む必要あり


実践アイデア 💡

Example 1: 独自シェーダエフェクトプラグイン 🎨

Movie File In TOP → CPlusPlus TOP (custom_effect.dll) → Out TOP

GLSL TOP では届かない高度な GPU 処理 (独自フィルタ・カスタム合成など) を C++ プラグインで実装し、上流の映像ソースに適用してから下流に流す基本構成。

  1. Visual Studio で TouchDesigner Custom Operators SDK をベースにプラグイン DLL をビルド
  2. CPlusPlus TOP の Plugin Path にビルド済 DLL を指定
  3. Re-Init Class でロード、上流 TOP を入力に接続
  4. ソースを変更したら DLL を差し替えて Re-Init Class (Pulse) で再ロード

Example 2: 外部 SDK によるカメラキャプチャ統合 📷

External Camera SDK → CPlusPlus TOP (capture_plugin.dll) → 下流 TOP チェーン

テンプレ Video Device In TOP では対応していない産業用カメラや独自プロトコルのキャプチャデバイスの SDK を C++ プラグインで包み、フレームを TOP として下流に供給するパターン。

  • ベンダー SDK のサンプルを参考にキャプチャループを実装
  • execute コールバック内で取得したフレームを OpenGL テクスチャに転送
  • Pixel Format をデバイス特性に合わせて選択 (8-bit / 16-bit float 等)

Example 3: マルチカラーバッファ出力 (G-Buffer 風レンダリング) 🖼️

CPlusPlus TOP (gbuffer.dll, # of Color Buffers=3) → Select TOP × 3 → 下流合成

1 回のプラグイン実行で Albedo / Normal / Depth など複数の RGBA バッファを同時出力し、後段の Select TOP でそれぞれを取り出してデファード合成に使うフロー。

  1. # of Color Buffers を 3 に設定
  2. シェーダ内で gl_FragData[0] / gl_FragData[1] / gl_FragData[2] に各成分を書込む
  3. 下流で Select TOP の Output Index を 0 / 1 / 2 にして個別取り出し

関連オペレータ 🔗

類似機能OP 🔍

  • GLSL TOP — GPU シェーダを GLSL で直接記述する代替手段
  • Script TOP — Python でピクセル処理を実装する代替手段 (低速)

組み合わせ推奨OP 🔄

  • GLSL TOP — 前段で標準的なシェーダ処理、後段で CPlusPlus TOP に独自処理を委譲
  • Select TOP — マルチカラーバッファ出力時に個別バッファを取り出す
  • Movie File In TOP — プラグインへの入力ソースとして映像ファイルを供給
  • Info CHOP — プラグイン出力 TOP の解像度・チャンネル情報を取得

前処理・後処理TOP 🎯


Info CHOP情報 📊

CPlusPlus TOP は Info CHOP による詳細情報取得に対応しています。

TOP固有情報 🖼️

  • resx: TOP の出力解像度 X (ピクセル単位)
  • resy: TOP の出力解像度 Y (ピクセル単位)
  • aspectx: アスペクト比 X
  • aspecty: アスペクト比 Y
  • depth: 3D テクスチャ / テクスチャ配列の深度 (2D テクスチャでは 1)
  • gpu_memory_used: TOP が消費している GPU メモリ量 (MB 単位)

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

TOP 共通情報 📊

  • resx: 出力フレームバッファの横解像度 (ピクセル)
  • resy: 出力フレームバッファの縦解像度 (ピクセル)
  • aspectx: 出力アスペクト比 X 成分
  • aspecty: 出力アスペクト比 Y 成分
  • depth: ピクセルフォーマットのビット深度情報
  • num_color_channels: 出力カラーバッファの本数 (numcolorbufs 設定に対応)

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: プラグインがロードされない
✅ Solution:

  • Plugin Path のパスが正しく解決されているか確認 (絶対パス推奨)
  • プラグイン DLL のビット数 (x64) が TouchDesigner と一致しているか確認
  • TouchDesigner Custom Operators SDK のバージョンが現行 build と互換か確認

❌ Problem: プラグイン書き換え後も古い挙動のまま
✅ Solution:

  • Re-Init Class をオン → オフでクラスインスタンスを再生成
  • DLL 自体を入れ替えた場合は Unload Plugin で完全アンロードしてから再ロード
  • 同じプラグインを別の CPlusPlus TOP もロードしている場合は全インスタンスでアンロードする

❌ Problem: マルチカラーバッファ出力が空 (黒) になる
✅ Solution:

  • # of Color Buffers が 2 以上のとき、シェーダ内で gl_FragColor ではなく gl_FragData[i] に書き込んでいるか確認
  • 下流の Select TOP の Output Index がバッファ番号と一致しているか確認
  • Anti-Alias 設定や Pixel Format が想定どおりか確認

❌ Problem: Depth / Stencil バッファが効かない
✅ Solution:

  • Depth BufferNone 以外になっているか確認
  • Stencil テストを使う場合は Stencil Buffer をオンに設定
  • シェーダ側で深度書込・ステンシル書込が正しく発行されているか確認

参考資料 📚

その他 🔗

公式リソース 📖

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