
概要 📖 – 複数 POP 入力から属性を選別・統合
Attribute Combine POPは、複数の POP 入力から名前やパターンマッチングで属性を選別し、Rename と衝突解決ルールを適用して 1 つの出力に統合する POPです。最初の入力のすべての属性が出力に渡され、追加の入力からは選択した属性のみが Attribute Class に従って統合されます。
主な用途 🎯
- 複数 POP 入力からポイント・頂点・プリミティブ属性を選別して 1 つの出力に統合
- パターンマッチング (
*や属性名指定) による属性の抽出と Rename - 属性名衝突時の振る舞い (Auto-Rename / Keep First / Keep Last / Replace) 制御
- 入力ジオメトリ間で要素数が異なる場合の長さ不一致処理 (Ignore / Warning / Error)
- シーケンシャル入力ブロックで多数の POP を柔軟にマージするスキーマ管理
データフロー 🔄
入力: 複数 POP (それぞれ独立した属性セット)
↓
Attribute Class でクラス選択 + In Attributes でパターン選別 + Duplicate Attributes で衝突解決
↓
出力: 選別・統合された属性を持つジオメトリ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Inputs Page 📋
Attribute Class .attrclass 🎛️
統合対象とする属性クラスを選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Point | .point |
ポイント属性 (P / N / Cd 等) を統合対象にする |
| Vertex | .vertex |
頂点属性 (UV / 頂点ノーマル 等) を統合対象にする |
| Primitive | .primitive |
プリミティブ属性 (面の属性) を統合対象にする |
Length Mismatch .lengthmismatchnotif ⚠️
入力 POP 間で要素数が異なる場合の通知方法を決定するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Ignore | .ignore |
長さ不一致をユーザーに通知せず処理を続行 |
| Warning | .warning |
ノードに Warning を表示して処理を続行 |
| Error | .error |
ノードに Error を表示して処理を停止 |
Length Mismatch Action .lengthmismatchaction 🛠️
長さ不一致時、入力範囲外をサンプリングする際に使用する属性値の選択
Length Mismatch Action .lengthmismatchaction 🛠️
– 短い入力に対し、範囲外サンプル位置で使用する値を指定するメニューパラメータ
– 公式 docs の解説では「最後のポイント値を保持」「0 で埋める」「1 で埋める」「何もしない」のいずれかを選択できると記載される
Duplicate Attributes .duplicateattrs 🔁
属性名が複数入力で衝突した場合の解決ルールを決定するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Auto-Rename | .autorename |
衝突した属性に連番を付加して新しい属性名として保持 |
| Keep First | .keepfirst |
最初に出現した属性値を採用し、後続の衝突値は破棄 |
| Keep Last | .keeplast |
最後に出現した属性値で上書きし、先行する衝突値は破棄 |
| Only Replace Attribs of First Input | .replaceattribs |
最初の入力に存在する属性のみを後続入力の値で置換、新規属性は追加しない |
Sequential Input Blocks .input 🧩
In .input 🧩
– 入力 POP を 1 ブロック単位で管理するシーケンシャルパラメータブロックの起点
– ブロック数を増減することで複数 POP を順序付きで束ねる
In POP(s) .input0pop 🔌
– 現在のシーケンスブロックに対応する入力 POP のパスを指定
– ワイヤー接続またはパターンマッチング (例 geo*) で複数 POP を 1 ブロックにまとめて指定可能
In Attributes .input0attrs 🔤
– 現在のシーケンスブロックから取り出す属性名のパターン (デフォルト * で全属性)
– P N や Cd* のようにスペース区切り・ワイルドカードで複数属性を指定可能
Rename to .input0renameto 🏷️
– In Attributes で取り出した属性を出力時にリネームするパターン
– 衝突回避や名前空間整理のために属性名を書き換える用途で使用
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: 色情報と位置情報を別 POP から合成 🎨
SOP to POP (P / N) → Attribute Combine POP (input0=geo, input1=color_src, In Attributes=Cd) → Render TOP
形状ジオメトリを持つ POP と、別経路で生成した色属性 Cd だけを持つ POP を Attribute Combine POP に入れて、最初の入力からは全属性を引き継ぎつつ 2 番目の入力からは Cd だけを抽出して 1 つのジオメトリに統合する典型フロー。
- 形状を生成する POP (例:
geo1) を 1 番目のシーケンスブロックに接続 - Cd を持つ別 POP (例:
color_src) を 2 番目のシーケンスブロックに接続 - Attribute Class を
pointに設定して全入力をポイント属性として扱う - 2 番目のブロックの In Attributes を
Cdに設定し、Cd のみ取り込む - 出力を Render TOP に渡してシェーダで色属性を参照
Example 2: 属性名衝突を Auto-Rename で全件保持 🔁
Noise POP (Cd) + Constant POP (Cd) → Attribute Combine POP (Duplicate Attributes=autorename) → Lookup Attribute POP
複数の POP がそれぞれ同名属性 Cd を持つ場合に Duplicate Attributes を Auto-Rename にして、衝突した Cd を連番付きの新しい属性名として全件保持し、下流の Lookup Attribute POP で個別に参照できる状態に整えるパターン。
- Cd を出力する 2 つの POP を Attribute Combine POP の input0 と input1 にそれぞれ接続
- Attribute Class を
pointに設定 - Duplicate Attributes を
autorenameに切替 - 出力で Cd と Cd2 (または類似のリネーム属性) の両方が存在することを確認
- 下流の Lookup Attribute POP で個別属性として参照
Example 3: 長さ不一致を Warning にして安全に統合 ⚠️
Box POP (n points) + Particle POP (m points, m≠n) → Attribute Combine POP (Length Mismatch=warning) → Math POP
ポイント数の異なる 2 つの POP をマージする際に Length Mismatch を Warning に設定し、処理を停止させず Warning 表示で運用継続させながら、Length Mismatch Action で範囲外サンプル位置の値補完方針を明示する運用フロー。
- 異なるポイント数の 2 POP を Attribute Combine POP の sequence ブロックに接続
- Length Mismatch を
warningに設定 - Length Mismatch Action で範囲外サンプル時の値補完方針を選択
- ノードに Warning が出ても処理は継続し、出力ジオメトリを下流へ流す
- 下流の Math POP で統合された属性を後段処理
関連オペレータ 🔗
類似機能OP 🔍
- Math Combine POP — 同じシーケンシャル入力アーキテクチャを持つ POP で、属性選別ではなく数値演算で複数入力を統合
- Math Mix POP — シーケンシャル入力ブロック構造を共有し、入力間の Blend / Mix を主目的とする
- Blend POP — 複数 POP 入力をブレンド比率で混合する。Attribute Combine と同じ multi-input アーキテクチャ
- Merge POP — 複数 POP 入力を連結 (concatenate) して 1 つの出力にまとめる。属性選別はしない
- Switch POP — シーケンシャル入力から 1 つを選択して出力。Attribute Combine と同じ multi-input シーケンス管理
組み合わせ推奨OP 🔄
- Attribute POP — 前段で属性スキーマを整えてから Attribute Combine で統合
- Lookup Attribute POP — 統合後の属性を参照テーブルとして他 POP の属性に流し込む
- Math POP — 統合後の属性に正規化・スケーリング・オフセットを後段で適用
前処理・後処理POP 🎯
Info POP情報 📊
Attribute Combine 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: 出力ジオメトリのポイント属性数 (Attribute Combine で統合された結果)num_vertex_attribs: 出力ジオメトリの頂点属性数num_prim_attribs: 出力ジオメトリのプリミティブ属性数num_prims: 出力ジオメトリのプリミティブ数gpu_memory_used: この POP が使用している GPU メモリ量
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 期待した属性が出力に現れない
✅ Solution:
- Attribute Class が統合したい属性クラス (point / vertex / primitive) と一致しているか確認
- In Attributes のパターンが対象属性にマッチしているか確認 (デフォルト
*は全属性) - Common Page の Delete Input Attributes パターンで出力属性が破棄されていないか確認
❌ Problem: 属性名衝突で値が想定外になる
✅ Solution:
- Duplicate Attributes の設定を確認 (Auto-Rename / Keep First / Keep Last / Only Replace Attribs of First Input)
- シーケンシャル入力ブロックの順序を確認し、優先したい入力を上位に配置
- In ブロック内の Rename to で衝突属性を明示的に別名に書き換える
❌ Problem: Length Mismatch で処理が停止する
✅ Solution:
- Length Mismatch を
warningまたはignoreに変更して処理を続行 - Length Mismatch Action で範囲外サンプル位置の値補完方針を明示的に選択
- 前段で Convert POP 等を使って入力 POP の要素数を揃える
❌ Problem: パフォーマンスが重い / GPU メモリを圧迫
✅ Solution:
- Common Page の Delete Input Attributes で不要属性を破棄してメモリ・帯域を削減
- In Attributes のパターンを
*から具体属性名に絞り込んで取得属性を最小化 - Free Extra GPU Memory パルスで未使用 GPU メモリを解放
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Attribute Combine POP
- POP 概要 (Points, Vertices and Primitives in POPs)
- 属性 (Attribute) の基礎
- Attribute POP (属性スキーマ操作)

