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

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

GLSL Advanced POP の高度な GPU コンピュートシェーダ機能を示す図

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

概要 📖 – シェーダで形を細かく作る

GLSL Advanced POPは、Compute Shader による GPU 並列演算と、ポイント / プリミティブ / 頂点ごとに分離した出力属性 + トポロジ情報の細粒度制御を提供する上級版の GLSL POPです。通常版の GLSL POP に対し、出力するポイント・プリミティブ・頂点の最大数を個別に確保した上で、Compute Shader 内で動的にトポロジを生成・更新する高度な GPU 演算ワークフローを実現します。

主な用途 🎯

  • GPU 並列演算でのポイント / 頂点 / プリミティブ属性処理を独自 Compute Shader として実装 (Point Output Attributes / Prim Output Attributes / Vert Output Attributes の 3 系統を分離して指定)
  • 出力トポロジの完全制御 (Max Triangles / Max Quads / Max Line Strips / Max Lines / Max Point Prims 等の最大数を個別に確保)
  • Line Strip / Triangle / Quad の動的生成を Compute Shader 内で行い、Topology Info から構造を再構築
  • Multi-pass シェーダパイプラインの構築 (Passes + Copy Previous Pass Output to Input で前パス出力を次パス入力に渡す反復ソルバ)
  • GLSL Select 経由で参照できる追加出力 (Extra Outputs Page で副次的な属性バッファを宣言し、下流の別 POP から個別に拾い出す)

データフロー 🔄

入力: 入力 POP (connected + In POPs 参照)

Compute Shader DAT (ユーザ定義の GLSL カーネル)

GPU 並列ディスパッチ (Work Group Size × Dispatch Size)

出力: 確保した Point/Prim/Vert Output Attributes + Topology Info による構造再構築

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Main Page 📋

Compute Shader 指定 📜

Compute Shader .computedat 📜
– 実行する Compute Shader を保持する DAT への参照
– Text DAT / GLSL DAT 等を Drag & Drop するか、パスを直接入力
– 指定 DAT の内容がそのまま GLSL カーネルとしてコンパイル・ディスパッチされる

Shader Dispatch Mode .shaderdispatchmode 🚦
– Compute Shader をディスパッチする方式を選択するメニュー
– 標準ディスパッチ / インダイレクトディスパッチ等、ディスパッチ起動方法を切替

スレッド数 / ディスパッチサイズ 🧵

Number of Threads .numthreadsmode 🔢
– カスタム Compute Shader ディスパッチ時のスレッド数の決定方式を選択するメニュー
– 入力 POP の要素数から自動算出するか、手動で Number of ElementsDispatch Size を指定するかを切替

Number of Elements .numelems 📐
– 手動でスレッドが処理する要素数を指定する整数パラメータ
Number of Threads モードによって有効 / 無効が切り替わる

POP .numelemspop 🔗
– 要素数を属性経由で決定する場合に参照する POP のパス
– その POP の属性クラスから要素数を抽出してスレッド数に反映

Num Elements Attrib .numelemsclass 🏷️
POP 参照と組み合わせて、要素数を取得する属性クラスを指定するメニュー
– 点 / 頂点 / プリミティブのうちどれをスレッド数源とするかを選択

Work Group Size .workgroupsize 📦
– 手動スレッド数モード時の Compute Shader の Work Group サイズを 3 次元 (x, y, z) で指定
– シェーダ内の layout(local_size_x=..., local_size_y=..., local_size_z=...) 宣言と整合させる必要がある

Dispatch Size .dispatchsize 🚀
– 各次元で起動するスレッドグループ数を 3 次元 (x, y, z) で指定
– 総スレッド数 = Dispatch Size × Work Group Size となるよう計算

Number of Threads per Batch Mode .numthreadsbatchmode 🧮
– プリミティブごとに割り当てるスレッド数の決定方式を選択するメニュー
– バッチ単位での並列粒度を制御する高度な指定

出力属性 (Point / Prim / Vert を分離指定) 📤

Point Output Attributes .ptoutputattrs 📍
– シェーダが書き込み可能として確保するポイント属性名のリスト (例: P v life)
GLSL POP の単一 Output Attributes と異なり、ポイント単位の属性のみを明示的に指定する

Prim Output Attributes .primoutputattrs 🔺
– シェーダが書き込み可能として確保するプリミティブ属性名のリスト
– 三角形 / 四角形 / ライン等のプリミティブ単位のメタ属性を出力する用途

Vert Output Attributes .vertoutputattrs 📐
– シェーダが書き込み可能として確保する頂点属性名のリスト
uv / Cd 等プリミティブを構成する各頂点単位の属性を出力する用途

Output Access .outputaccess 🔒
– 出力属性バッファに対してシェーダから読み出しのみを許可するか、読み書き両方を許可するかを切替
– 読み書き両方にすると 1 ディスパッチ内で前回値も参照可能になり、in-place 更新が書ける

Initialize Output Attributes .initoutputattrs 🧹
– 既存属性は入力属性の値をコピー、新規属性はデフォルト値で初期化
– メイン Compute Shader ディスパッチの直前に別の初期化用 Compute Shader ディスパッチが走る

Copy Previous Pass Output to Input .prevpassoutput ♻️
– 前パスの出力を次パスの入力としてコピーする多段シェーダパイプライン用フラグ
Passes > 1 の場合にパス間で属性値を受け渡す際に有効化

Passes .npasses 🔄
– 同じ Compute Shader を何回連続でディスパッチするかを指定する整数
– 反復ソルバや multi-iteration smoothing 等に使用

入力 POP / 補助機能 🔌

Input .input 📥
– POP の入力を管理する Sequential Parameter Block の起点
– 接続線で繋がれた入力 POP 群を本ブロックの各エントリで参照

In POPs .input0pops
– 接続線で繋がれた POP に加えて、追加の入力 POP をパス参照で指定するパラメータ
– シェーダ内から名前付きの追加入力として参照可能

TDSimplexNoise() .simplexnoise 🌊
– シェーダ内で呼び出せる Simplex Noise 関数の実装を選択するメニュー
– TouchDesigner 提供のヘルパー TDSimplexNoise() の実装バリエーション (Performance / Quality) を切替


Output Page 🎬

レンダリング有効化 🎬

Render .render 🎬
– 出力 POP をビューアでレンダリングするかどうかのフラグ
– 中間状態や非レンダー可能な状態のときはオフにすることでビューア側のクラッシュ / 誤表示を回避

ポイント数の制御 📍

Max Points .maxpointsmode 🔝
– 出力ポイント数の最大値を入力 POP から取得するか、パラメータで手動指定するかを切替するメニュー
– 手動モードでは Max Points 整数値で確保するバッファサイズを指定

Point Count Info .pointcountinfo ℹ️
– ポイント数情報の取得源を選択するメニュー (入力 POP / 属性 / Max パラメータ)
– 動的に変化するポイント数を CPU から GPU へ伝えるための経路を制御

Point Count .pointcountmode 🔢
– 出力ポイント数の決定方式を選択するメニュー (入力連動 / ゼロ / 手動設定)
– シェーダが動的にポイントを増減させる構成で使用

Point Count POP .pointcountpop 🔗
– ポイント数を保持する POP のパスを指定
– 別 POP の属性経由で動的なポイント数を渡す際に使用

Point Count Attribute .pointcountclass 🏷️
– ポイント数を保持する属性のクラス (Point / Vertex / Primitive) を選択するメニュー

プリミティブ数の上限制御 🔺

Max Triangles .maxtrianglesmode 🔺
– 出力する三角形プリミティブの最大数を入力から取得するか手動指定するかを切替するメニュー
– CPU 側でトポロジ情報が把握される場合は実際の三角形数となる

Max Quads .maxquadsmode
– 出力する四角形プリミティブの最大数を入力から取得するか手動指定するかを切替するメニュー

Max Line Strips .maxlinestripsmode 📈
– 出力するライン ストリップの最大数を入力から取得するか手動指定するかを切替するメニュー

Max Line Strip Verts .maxlsvertsmode 📍
– ライン ストリップを構成する頂点の最大数を設定
– CPU 側でトポロジ情報が把握される場合は実際の頂点数となる

Max Lines .maxlinesmode 📏
– 出力する独立ライン プリミティブの最大数を設定

Max Point Prims .maxpointprimsmode
– 出力するポイント プリミティブの最大数を設定

Line Strip 情報の管理 🪢

Line Strip Info Update .lsinfoupdate 🪢
– Line Strip Info バッファの更新方式を選択するメニュー (Auto / Zero / Manual)
– 自動更新 / ゼロクリア / 手動指定でラインストリップ構造を制御

Line Strip Info POP .lsinfopop 🔗
– Line Strip Info バッファに使用する属性を持つ POP のパスを指定

Line Strip Info Attribute .lsinfoclass 🏷️
– Line Strip Info 属性が存在する属性クラスを選択するメニュー

Line Strip Index per Vert POP .lsindexpop 🔗
– 頂点ごとのラインストリップ インデックス属性を持つ POP のパスを指定

Line Strip Index per Vert Attribute .lsindexclass 🏷️
– 頂点ごとのラインストリップ インデックス属性が存在する属性クラスを選択するメニュー

Max Verts per Line Strip .lsmaxvertsoverride 📐
– 1 つのラインストリップに含める頂点数の最大値を手動で上書き指定するパラメータ
– GPU バッファのアロケーション上限を制御

トポロジ初期化と参照 🏗️

Initialize Output Primitives .initoutputprims 🧹
– 出力プリミティブの初期化方式を選択するメニュー (初期化しない / 入力プリミティブをコピー / 頂点を 0 で初期化)
– シェーダがディスパッチされる直前のプリミティブインデックスの初期状態を制御

Topology Info .topoinfo 🗺️
– トポロジ情報の取得源を選択するメニュー (入力 POP / 属性 / Max パラメータ)
– 出力の三角形数 / 四角形数等を CPU から GPU へ伝達する経路を制御

Topology Info POP .topoinfopop 🔗
– トポロジ情報属性を保持する POP のパスを指定

Topology Info Attributes Class .topoinfoclass 🏷️
– トポロジ情報属性が存在する属性クラスを選択するメニュー

個別プリミティブ数の手動設定 🔢

Triangle Count .trianglecountmode 🔺
– 三角形プリミティブの数の決定方式を選択するメニュー
– 手動指定モード時にはパラメータで整数値を設定

Quad Count .quadcountmode
– 四角形プリミティブの数の決定方式を選択するメニュー (入力連動 / ゼロ / 手動設定)

Line Strip Count .linestripcountmode 📈
– ライン ストリップの数の決定方式を選択するメニュー

Line Strip Vert Count .lsvertcountmode 📍
– ライン ストリップ頂点数の決定方式を選択するメニュー

Line Count .linecountmode 📏
– 独立ライン プリミティブの数の決定方式を選択するメニュー

Point Prim Count .pointprimcountmode
– ポイント プリミティブの数の決定方式を選択するメニュー


Extra Outputs Page 📎

GLSL Select 経由で参照できる追加出力 📎

Extra Output .extraout 🆕
– 副次的な POP 出力を宣言する Sequential Parameter Block の起点
– ここで宣言した追加出力は GLSL Select 等で名前指定して取り出せる

Name .extraout0name 🔤
– 追加出力の名前 (下流から名前指定で参照する識別子)

POP .extraout0pop 🔗
– 追加出力のソースとなる POP のパスを指定 (属性形状の参照元)

Point Output Attributes .extraout0ptattrs 📍
– 追加出力のうちポイント単位の属性名リスト
– メインの Point Output Attributes と独立した別バッファとして allocate される

Prim Output Attributes .extraout0primattrs 🔺
– 追加出力のうちプリミティブ単位の属性名リスト

Vert Output Attributes .extraout0vertattrs 📐
– 追加出力のうち頂点単位の属性名リスト

Output Access .extraout0outputaccess 🔒
– 追加出力バッファに対してシェーダから読み出しのみを許可するか、読み書き両方を許可するかを切替

Copy Previous Pass Output to Input .extraout0prevpassoutput ♻️
– 追加出力でも前パスの出力を次パスの入力としてコピーするかを制御

Copy Input Attributes .extraout0copyinputattrs 📥
– 追加出力に確保された属性バッファを、入力属性値で初期化するかどうかのフラグ


Create Attribs Page 🏗️

New Attribute (新規属性の宣言) ✨

New Attribute .attr 🆕
– 新規属性を宣言する Sequential Parameter Block の起点
– 1 エントリごとに以下の Class / Name / Type / Array / Array Size / Value のサブパラメータが並ぶ

New Attribute Class .attr0class 🏷️
– 新規属性の属性クラスを選択するメニュー (Point / Vertex / Primitive)
– 通常版の GLSL POP と異なり、追加属性ごとに属性クラスを個別指定できる

New Attribute Name .attr0name 🔤
– 作成する属性の名前を選択 (事前定義属性 or カスタム名)
P / N / Cd 等の予約属性または任意の新規名

New Attribute Type .attr0type 🏷️
– 属性の型を決定 (float / vec2 / vec3 / vec4 / int 等)
– シェーダ内での読み書き型と整合させる

Array .attr0isarray 📊
– 属性を配列として扱うかどうかのフラグ
– 例: 5 個の vec3 を保持したい場合は配列フラグをオンにしてサイズ 5 を指定

Array Size .attr0arraysize 📏
– 配列属性の要素数を整数で指定
Array フラグがオンの場合のみ有効

Value .attr0value 🔢
– 属性の初期値を指定
Initialize Output Attributes がオンのときに新規属性の初期化に使用される

Matrix Attribute (行列属性の宣言) 🧮

Matrix Attribute .matattr 🆕
– 行列型の新規属性を宣言する Sequential Parameter Block の起点
– 1 エントリごとに以下の Class / Name / Rows / Columns / Array / Array Size / Qualifier が並ぶ

Matrix Attribute Class .matattr0class 🏷️
– 行列属性を作成する属性クラスを選択するメニュー (Point / Vertex / Primitive)

Custom Matrix Name .matattr0name 🔤
– 行列属性のカスタム名を指定
– シェーダ内ではこの名前で mat2 / mat3 / mat4 として参照

Rows .matattr0numrows 📐
– 行列の行数を整数で指定 (2 / 3 / 4)
– GLSL の matNxM 型に対応

Columns .matattr0numcols 📏
– 行列の列数を整数で指定 (2 / 3 / 4)
– GLSL の matNxM 型に対応

Array .matattr0isarray 📊
– 行列属性を配列として扱うかどうかのフラグ

Array Size .matattr0arraysize 📏
– 行列配列の要素数を整数で指定

Qualifier .matattr0qualifier 🔧
– 属性の解釈に関する追加情報を選択するメニュー (None / Transform Matrix)
– 変換行列として扱うことでシェーダ間の意味付けを統一


Colors Page 🎨

色 uniform 宣言 🎨

Pre-Multiply RGB by Alpha .premultcolor ✖️
– シェーダに渡す前に RGB をアルファで pre-multiply するかどうかのフラグ
– 透過合成計算で straight alpha と pre-multiplied alpha を切り替える

Color .color 🆕
– 色 uniform を宣言する Sequential Parameter Block の起点
– 1 エントリごとに以下の Name / RGB / Alpha が並ぶ

Name .color0name 🔤
– 色 uniform の名前を指定 (シェーダ内で uniform vec4 <name> として参照)

RGB .color0rgb 🌈
– 色 uniform の RGB 値を指定するカラーピッカー

Alpha .color0alpha 🌫️
– 色 uniform のアルファ値を 0–1 で指定


Vectors Page ➡️

ベクトル uniform 宣言 ➡️

Vector .vec 🆕
– ベクトル uniform を宣言する Sequential Parameter Block の起点
– 1 エントリごとに以下の Name / Type / Value が並ぶ

Name .vec0name 🔤
– ベクトル uniform の名前を指定 (シェーダ内で uniform vec<N> <name> として参照)

Type .vec0type 🏷️
– ベクトル uniform の型を選択するメニュー
– 以下から成分数と数値表現 (float / double / int / unsigned int) を選択:

  • float / vec2 / vec3 / vec4 (浮動小数点)
  • double / dvec2 / dvec3 / dvec4 (倍精度浮動小数点)
  • int / ivec2 / ivec3 / ivec4 (符号付き整数)
  • uint / uvec2 / uvec3 / uvec4 (符号無し整数)

Value .vec0value 🔢
– ベクトル uniform の各成分値を入力


Samplers Page 🖼️

テクスチャ Sampler 宣言 🖼️

Sampler .sampler 🆕
– シェーダから読み込む Sampler uniform を宣言する Sequential Parameter Block の起点
– 1 エントリごとに以下の Name / TOP / Extend U/V/W / Filter が並ぶ

Name .sampler0name 🔤
– Sampler uniform の名前を指定 (シェーダ内で uniform sampler2D <name> 等として参照)

TOP .sampler0top 🔗
– サンプリング対象とする TOP のパスを指定
– 指定した TOP のテクスチャがシェーダ内で読み出し可能になる

Extend U .sampler0extendu ↔️
– U 方向のテクスチャ座標が [0, 1] 範囲外のときの振る舞いを選択するメニュー
– Hold / Zero / Repeat / Mirror から選択 (端ホールド / ゼロ / 反復 / 鏡像)

Extend V .sampler0extendv ↕️
– V 方向のテクスチャ座標が [0, 1] 範囲外のときの振る舞いを選択するメニュー (U と同オプション)

Extend W .sampler0extendw 🔀
– W 方向 (3D テクスチャ等) のテクスチャ座標が範囲外のときの振る舞いを選択するメニュー

Filter .sampler0filter 🎚️
– TOP 入力画像に適用するピクセルフィルタを選択するメニュー (Nearest Pixel / Interpolate Pixels)


Arrays Page 📚

配列 uniform 宣言 📚

Array .array 🆕
– 配列 uniform を宣言する Sequential Parameter Block の起点
– 1 エントリごとに以下の Name / Type / CHOP / Array Type が並ぶ

Name .array0name 🔤
– 配列 uniform の名前を指定

Type .array0type 🏷️
– 配列の各要素の成分数を選択するメニュー (float / vec2 / vec3 / vec4)

CHOP .array0chop 🔗
– 配列ソースとして使用する CHOP のパスを指定
– CHOP のチャンネルがそのまま配列要素として読み込まれる

Array Type .array0arraytype 📦
– uniform 配列として渡すか、サンプラ経由 (Texture Buffer) で渡すかを切り替えるメニュー
– 巨大配列は uniform より Texture Buffer のほうが GPU 上の取扱いが効率的


Matrices Page 🧮

行列 uniform 宣言 🧮

Matrix .matrix 🆕
– 行列 uniform を宣言する Sequential Parameter Block の起点
– 1 エントリごとに以下の Name / Matrix が並ぶ

Name .matrix0name 🔤
– 行列 uniform の名前を指定 (シェーダ内で uniform mat4 <name> 等として参照)

Matrix .matrix0value 🔢
– シェーダに渡す行列値を保持するオブジェクトへの参照
– Object COMP の Transform 等から行列を取得して uniform として供給可能


Temp Buffers Page 🧰

Temp Buffer 宣言 🧰

Temp Buffer .tempbuffer 🆕
– シェーダに uniform として情報を渡すための一時バッファを宣言する Sequential Parameter Block の起点
– 1 エントリごとに以下の Name / Initial Value が並ぶ

Name .tempbuffer0name 🔤
– 一時バッファの名前を指定

Initial Value .tempbuffer0initval 🔢
– 一時バッファの初期値を指定
– パス間で値を保持・受け渡しする際の初期状態として使用

Specialization Constants 🔒

Constant .const 🆕
– Specialization Constants を宣言する Sequential Parameter Block の起点
– コンパイル時定数としてシェーダに渡すことで最適化が効く

Name .const0name 🔤
– Specialization Constant の名前を指定

Value .const0value 🔢
– Specialization Constant の値を指定
– 変更時はシェーダが再コンパイルされる点に注意


Common Page 🔧

Bypass .bypass 🚫

POP の処理をスキップして入力をパススルーする設定:

  • オン: 最初の入力 (input1) をそのまま出力にパススルー、POP 内部の処理を無効化
  • 用途: デバッグ時に特定 POP の効果を一時的に外して比較する際に使用

Free Extra GPU Memory .freeextragpumem 🧠

蓄積した GPU メモリの解放:

  • Free Extra GPU Memory パルス: 出力ポイント数が増減を繰り返した際に確保されたままの GPU メモリを明示的に解放するパルスパラメータ
  • 用途: 大規模パーティクル系で出力サイズが大きく変動した後、未使用メモリを返却して VRAM を節約

Delete Input Attributes .delinputattrs 🗑️

出力属性の絞り込みパターン:

  • Delete Input Attributes パターン: 出力に残したい属性名のパターン (例: P N Cd) を指定。指定外の属性は破棄される
  • 用途: 下流で不要な属性を切り落として分岐ブランチを軽量化、メモリ・帯域を節約

実践アイデア 💡

Example 1: 動的トポロジ生成 (Compute Shader で三角形を増減) 🔺

In POP → GLSL Advanced POP (Compute Shader = triangulate.glsl, Max Triangles=manual, Triangle Count=set) → Render TOP

GLSL Advanced POP の Max Triangles + Triangle Count を手動指定モードに切替え、Compute Shader 内で動的に三角形プリミティブを生成・更新する例。Topology InfoFrom Attributes にして、シェーダ出力の三角形数を属性経由で CPU に伝える。通常版の GLSL POP では難しい動的トポロジ操作が可能。

  1. 入力 POP を GLSL Advanced POP に接続
  2. Output Page で Max Triangles を手動モードに、想定上限値を設定
  3. Triangle CountSet にして実際の出力数の取得方式を指定
  4. Compute Shader 内で Prim Output Attributes に登録した属性を書き込み三角形構造を生成
  5. 後段の Convert POP / Render TOP で 3D ビューに描画

Example 2: Multi-pass Line Stripソルバで曲線生成 🪢

In POP → GLSL Advanced POP (Compute Shader = strand_solver.glsl, Passes=16, prevpassoutput=on, Max Line Strips=manual) → Out POP

Compute Shader を Passes 回連続実行し、ライン ストリップの頂点位置を反復的に解く構成。Copy Previous Pass Output to Input をオンにして前パスの出力を次パス入力にフィードバックし、髪の毛 / ロープ / 弾性ストランド等の反復ソルバを 1 つの GLSL Advanced POP 内で完結させる。Line Strip Info Update でストリップ構造の更新方式も併せて指定する。

  1. Compute Shader にストランド 1 ステップ分のシミュレーションを記述
  2. Max Line Strips / Max Line Strip Verts を手動指定モードに設定し上限を確保
  3. Passes を反復回数 (例: 16) に設定
  4. Copy Previous Pass Output to Input をオンにしてパス間でストリップ状態をフィードバック
  5. Line Strip Info UpdateAuto にして出力ストリップ構造を毎パス更新
  6. Out POP で結果を取り出し下流に渡す

Example 3: Extra Outputsで副バッファを個別取出 📎

In POP → GLSL Advanced POP (Compute Shader = multi_output.glsl, Extra Output = collision_info) → GLSL Select POP (target=collision_info)

メイン出力 (位置 P) に加えて、Compute Shader 内で副次的に計算した値 (例: 衝突判定結果 / 距離場 / デバッグ情報) を Extra Outputs Page で別バッファとして宣言する例。下流の GLSL Select POP でその名前を指定すると、メイン出力とは独立に副次出力を取り出せる。

  1. Extra Outputs Page で Extra Output Sequential Block を追加
  2. Name に副次出力名 (例: collision_info) を入力
  3. Point Output Attributes 等に書き込み対象属性を登録
  4. Compute Shader 内で名前付きの追加出力に値を書込み
  5. 下流に GLSL Select POP を配置し target に同名を指定して副次バッファを取り出す

関連オペレータ 🔗

類似機能OP 🔍

  • GLSL POP — 同 POP family の通常版。単一の Output Attributes + シンプルな出力制御に絞った簡易版
  • CPlusPlus POP — CPU 側 C++ プラグインで POP を実装する版。GPU 並列処理は GLSL Advanced / CPU 重処理は CPlusPlus という棲み分け
  • GLSL TOP — TOP family の GLSL シェーダ版。ピクセル単位の GPU 並列処理

組み合わせ推奨OP 🔄

  • GLSL Select POPExtra Outputs Page で宣言した副次バッファを名前指定で取り出す相棒 POP
  • Convert POP — GLSL Advanced 出力の点群 / プリミティブを SOP / メッシュへ変換
  • Render TOP — シェーダ出力のジオメトリを 3D ビューに描画
  • Info CHOP — シェーダ出力 POP の num_points / num_prims / cook_time 等で性能をモニタ

前処理・後処理POP 🎯


Info CHOP情報 📊

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

POP固有情報 ✨

  • num_verts: POP に含まれる頂点 (vertex) 数
  • num_points: POP に含まれるポイント数
  • num_prims: POP に含まれるプリミティブ数

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • cook_abs_frame: 最後にクックされた絶対フレーム番号 (アプリケーション起動からの累積)
  • cook_start_time: 最後のクック開始時刻 (ミリ秒)
  • cook_end_time: 最後のクック終了時刻 (ミリ秒)
  • cooked_this_frame: 現フレームでクックされたか (0 / 1)
  • warnings: 警告数
  • errors: エラー数

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

よくある問題と解決策 🔧

❌ Problem: Compute Shader がコンパイルエラーで動かない
✅ Solution:

  • Compute Shader DAT のテキストを確認し、#version 宣言と layout(local_size_x=..., local_size_y=..., local_size_z=...) の有無を確認
  • Info CHOPerrors / warnings を監視し、Compute Shader ノードの右クリックメニューからシェーダログを表示
  • Work Group Size パラメータとシェーダ内 layout 宣言の値が一致しているか確認

❌ Problem: 出力プリミティブ数が想定と違う / トポロジが壊れる
✅ Solution:

  • Output Page の Max Triangles / Max Quads / Max Line Strips 等が手動モード時に十分なバッファを確保しているか確認
  • Topology Info の取得源 (入力 POP / 属性 / Max パラメータ) と実際のシェーダ出力が整合しているか確認
  • Initialize Output Primitives の設定により毎パス初期化されていないか、または逆に初期化漏れになっていないか確認

❌ Problem: Point / Prim / Vert Output Attributes に書き込んでも値が変わらない
✅ Solution:

  • 対象の Output Attributes (3 系統のうち該当する 1 つ) に属性が明示的に登録されているか確認 (未登録だとバッファ自体が allocate されない)
  • Output Access が Write Only になっていないか確認 (前回値を読みたい場合は Read-Write が必要)
  • Initialize Output Attributes 設定によって毎パス値が初期化されていないか確認

❌ Problem: Extra Output が GLSL Select で取り出せない
✅ Solution:

  • Extra Outputs Page の Name と GLSL Select 側の参照名が完全一致しているか確認 (大文字小文字含む)
  • Extra Output の Point/Prim/Vert Output Attributes に属性が登録されているか確認
  • Compute Shader 内で対応する出力バッファに実際に書き込みが行われているかを Info CHOPnum_points 等で検証

❌ Problem: パフォーマンスが期待より低い
✅ Solution:

  • Work Group Size を GPU が効率的に処理できるサイズ (合計 64〜256 程度) に調整
  • Common Page の Delete Input Attributes で下流に不要な属性を切り落として GPU 帯域を節約
  • 頻繁に値が変わらない値は Specialization Constants (Temp Buffers Page) としてシェーダに埋め込むとコンパイル時最適化が効く

参考資料 📚

その他 🔗

公式リソース 📖

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