
概要 📖 – ジオメトリ属性の統計解析と集約
Analyze POPは、入力ジオメトリのポイント・頂点・プリミティブ属性を統計解析し、平均・最小・最大・要素数等を集約して新しい属性として出力する POPです。出力は解析結果の属性を持つジオメトリで、下流の Math POP や Lookup Attribute POP で基準値として参照できます。
主な用途 🎯
- ポイント属性 (P / N / Cd 等) の最大値・最小値・平均値の取得
- 頂点属性・プリミティブ属性の統計的解析
- ジオメトリ全体の要素数 (Num Points / Vertices / Primitives) の取得
- 属性ベクトルの長さ (Length) や RMS Power の計算
- 下流オペレータでの正規化・スケーリングに使う基準値の抽出
データフロー 🔄
入力: ジオメトリ (属性付き複数要素)
↓
属性クラス選択 + 解析関数適用
↓
出力: 集約された属性値を持つ単一要素ジオメトリ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Analyze Page 📋
Attributes Class .attrclass 🎛️
解析対象とする属性クラスを選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Point | .point |
ポイント属性 (P / N / Cd 等) を解析対象にする |
| Vertex | .vertex |
頂点属性 (UV / 頂点ノーマル 等) を解析対象にする |
| Primitive | .primitive |
プリミティブ属性 (面の属性) を解析対象にする |
Group 設定 🎯
Group .group 🎯
– 入力にグループが存在する場合、指定したグループ名に属する要素のみを解析対象に絞り込む
– 空欄の場合は全要素が対象
Number of Elements in Group .numgroupelements 🔢
– 選択グループに属する要素数を新しい属性として出力
– 群分けされたジオメトリの要素数を後段で参照したい場合に使用
Input Attributes .inputattrs 🔤
Input Attributes .inputattrs 🔤
– 解析対象とする入力属性名のパターン (デフォルト * で全属性)
– P や Cd N のように複数属性をスペース区切りで指定可能
Append Attrib Names to Output .appendattrname 🏷️
– 出力属性名に解析元の入力属性名を付加 (例: max_P) して可読性を上げる
– 複数属性を同時解析する際の名前衝突回避に有効
Combine Components .combine 🔀
解析前に属性ベクトルの成分を 1 つの値に集約する方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
成分集約を行わず、各成分を独立に解析 |
| Add | .add |
全成分の加算結果を解析対象にする |
| Subtract | .sub |
成分間の減算結果を解析対象にする |
| Multiply | .mul |
全成分の積を解析対象にする |
| Divide | .div |
成分間の除算結果を解析対象にする |
| Average | .avg |
全成分の平均を取って解析 |
| Minimum | .min |
全成分の最小値を抽出して解析 |
| Maximum | .max |
全成分の最大値を抽出して解析 |
| Length | .len |
ベクトルとしての長さ (ノルム) を計算して解析 |
解析関数 Toggle 群 🎚️
Average .avg 📊
– 全要素の属性値を平均化した結果を出力
Centroid .centroid 🎯
– 属性の最小値と最大値の中点 (バウンディングボックスの中心相当) を出力
Minimum .min ⬇️
– 入力属性の最小値を出力
Maximum .max ⬆️
– 入力属性の最大値を出力
Size .size 📏
– 最大値から最小値を引いたサイズ (bounding extent) を出力
– バウンディングボックスの寸法取得に有用
Index of Minimum .minindex 🔻
– 最小値を持つ要素のインデックスを出力
Index of Maximum .maxindex 🔺
– 最大値を持つ要素のインデックスを出力
Sum .sum ➕
– 全要素の属性値もしくは成分の合計を出力
RMS Power .rmspower ⚡
– 属性値の二乗平均平方根 (RMS) を計算
– ベクトル属性のエネルギー指標として使用
ジオメトリ要素数 🔢
Num Points, Vertices, Primitives .numpointsvertsprims 🔢
– ポイント数・頂点数・プリミティブ数を属性として出力
Num Prims/Verts per Type .numprimsbatch 📦
– プリミティブタイプ別の数 (例: triangle / quad / polyline) と各タイプの頂点数を属性として出力
Dimension .dimension 📐
– この POP の次元サイズ (寸法) を属性として出力
P Attribute Values .pattrvals 📍
P (ポイント位置) 属性に解析結果を書き込む際の値の選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| Don’t Create P Attribute | .none |
P 属性を生成しない |
| Input Attribute Average | .avg |
入力属性の平均値を P として書き込む |
| Input Attribute Centroid | .centroid |
入力属性の Centroid (最小最大の中点) を P として書き込む |
| Input Attribute Minimum | .min |
入力属性の最小値を P として書き込む |
| Input Attribute Maximum | .max |
入力属性の最大値を P として書き込む |
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: バウンディングボックス中心の取得 📦
SOP to POP → Analyze POP (Attributes Class=point, Centroid=on, P Attribute Values=centroid) → Transform POP
入力ジオメトリのポイント位置属性 P を Analyze POP の Centroid モードで集約し、バウンディングボックスの中心座標を持つ単一ポイントを生成して下流の Transform POP で原点合わせに使う基本フロー。
- 入力 POP のポイント属性 P を Analyze POP に渡す
- Attributes Class を
point、Input Attributes をPに設定 - Centroid トグルをオン、P Attribute Values を
centroidに設定 - 出力の P 属性が入力ジオメトリの中心座標を持つ
- 下流 Transform POP で出力 P を反転させて Translate に渡し、原点に整列
Example 2: 属性の正規化基準値抽出 📊
入力 POP → Analyze POP (Maximum / Minimum) → Math POP (Normalize) → Shader
ソース POP のスカラ属性 (例: 速度・距離) を Analyze POP で最大値と最小値を取得し、後段の Math POP で 0–1 正規化してシェーダに渡すことで、入力レンジに依存しないビジュアル制御を実現する用途。
- 入力 POP に正規化したいスカラ属性を持たせる
- Analyze POP の Maximum / Minimum トグルを両方オンにして属性レンジを取得
- 下流 Math POP に Analyze POP の出力を参照させて min/max を取り出す
- Math POP で
(x - min) / (max - min)を計算し正規化 - 正規化された属性を Render TOP / GLSL POP のシェーダ入力として使用
Example 3: ジオメトリ要素数のロギング 🔢
POP チェーン → Analyze POP (Num Points, Vertices, Primitives) → POP to CHOP → DAT
動的に要素数が変化する POP チェーン (Particle POP や Generator 系) の末端に Analyze POP を置いて Num Points / Vertices / Primitives 属性を取得し、後段で CHOP / DAT に流して時系列ログとして記録する運用フロー。
- 可変要素数の POP チェーン末尾に Analyze POP を接続
- Num Points, Vertices, Primitives トグルをオンに設定
- 出力属性を POP to CHOP に渡してチャンネル化
- CHOP 値を DAT に書き出して時系列ログとして保存
- ログから処理負荷とジオメトリ規模の相関を解析
関連オペレータ 🔗
類似機能OP 🔍
- Analyze CHOP — CHOP family の同名解析オペレータ。チャンネル時系列の統計解析が対象
- Attribute POP — 属性自体の作成・編集・変換 (解析ではないが Analyze の前後で頻用)
組み合わせ推奨OP 🔄
- Math POP — Analyze 結果を基準値として後段で正規化・スケーリング
- Lookup Attribute POP — Analyze 出力属性を参照テーブルとして他 POP の属性に流し込む
- POP to CHOP — Analyze 結果属性を CHOP チャンネルに変換して時系列で扱う
- Transform POP — Centroid 出力でジオメトリを原点合わせ・整列
前処理・後処理POP 🎯
Info POP情報 📊
Analyze 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: エラー数
POP 汎用情報 (Info CHOP 経由) 📊
num_points: 出力ジオメトリのポイント数num_point_attribs: 出力ジオメトリのポイント属性数num_vertex_attribs: 出力ジオメトリの頂点属性数num_prim_attribs: 出力ジオメトリのプリミティブ属性数num_prims: 出力ジオメトリのプリミティブ数gpu_memory_used: この POP が使用している GPU メモリ量
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 解析結果が期待値と異なる
✅ Solution:
- Attributes Class が解析したい属性クラス (point / vertex / primitive) と一致しているか確認
- Input Attributes パターンが対象属性にマッチしているか確認 (デフォルト
*は全属性) - Combine Components が
off以外になっている場合、成分集約が意図通りか再確認
❌ Problem: 出力属性が見つからない / 下流で読めない
✅ Solution:
- Append Attrib Names to Output をオンにして出力属性名に元属性名を付加し可読性を上げる
- Common Page の Delete Input Attributes パターンで出力属性が破棄されていないか確認
- P Attribute Values が
none以外の場合、P 属性が上書きされている可能性を確認
❌ Problem: Group 指定で要素が解析されない
✅ Solution:
- Group 名が入力ジオメトリに存在するか上流 POP の出力で確認
- Number of Elements in Group をオンにして対象要素数を可視化
- Group が空の場合は全要素対象になるため、意図せず全件解析になっていないか再点検
❌ Problem: パフォーマンスが重い
✅ Solution:
- Common Page の Delete Input Attributes で不要属性を破棄してメモリ・帯域を削減
- 前段で Group POP を使って解析対象要素を絞り込む
- Free Extra GPU Memory パルスで未使用 GPU メモリを解放
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Analyze POP
- POP 概要 (Points, Vertices and Primitives in POPs)
- 属性 (Attribute) の基礎
- Attribute POP (属性スキーマ操作)

