
概要 📖 – 条件で点群をグループ化
Group POPは、入力ジオメトリのポイントまたはプリミティブを、インデックス範囲・パターン構文・境界ボリュームで選択し、名前付きグループとして登録する POPです。Thin / Pattern / Bounding の 3 系統を And / Or / Xor / Nand / Nor で複合的に結合でき、Edit Page では既存グループの変換 (Convert) / 名称変更 (Rename) / 削除 (Delete) も可能で、下流 POP でグループ名を参照することで部分処理を構成できます。
主な用途 🎯
- ポイント / プリミティブを条件指定で名前付きグループに登録
- Thin (インデックス範囲 / ステップ / ランダム) ・ Pattern (Pattern Expansion 構文) ・ Bounding (Box / Sphere) の 3 系統を And / Or / Xor / Nand / Nor で複合結合
- Debug Color (debugcolor) で各グループに色属性を付与してグループ範囲を視覚確認
- Edit Page で既存グループの Convert (属性クラス変換) / Rename (名称変更) / Delete (削除) を一括操作
- 下流 POP (Delete POP / Attribute POP 等) のグループ参照パラメータでグループ名を指定し、部分処理を分岐
データフロー 🔄
入力: ポイント / プリミティブ属性付きジオメトリ
↓
Group POP (Create で名前指定 → Thin / Pattern / Bounding で選択 → Edit で既存グループを変換 / 名称変更 / 削除)
↓
出力: 選択要素が名前付きグループに登録されたジオメトリ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Create Page 📋
グループ名指定 .grname 🏷️
Group Name .grname 🏷️
– 作成するグループの名称 (例: halfA / front / top_layer)
– 下流 POP のグループ参照パラメータで本パラメータの文字列を指定すると、そのグループに属する要素のみが処理対象になる
Entity .entity 🧩
グループ化対象とする属性クラスを選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Points | .point |
ポイント単位でグループ化を判定 (ポイントクラウドのサブセット定義) |
| Primitives | .primitive |
プリミティブ単位でグループ化を判定 (三角形・四角形・線分単位のサブセット定義) |
Debug Color .debugcolor 🎨
Debug Color .debugcolor 🎨
– グループ判別用の色属性 (Cd) を追加してグループに含まれる要素を視覚化
– 下流の Render TOP でグループ範囲を確認しながら Thin / Pattern / Bounding の設定を詰めるデバッグ用途
Attribute Page 📋
属性条件ブロックの先頭 .attr 📌
Attribute .attr 📌
– 属性条件ブロックの Sequential Parameter Blocks 先頭
– Attribute 0 / Attribute 1… を + ボタンで追加し、複数の属性条件を And / Or / Xor / Nand / Nor で結合できる
属性条件の結合方式 .attr0combine 🔀
現在の属性条件ブロックを直上のブロックとどう結合するかを選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| And | .and |
両ブロックの選択 (積集合) を採用 |
| Or | .or |
いずれかブロックで選択された要素 (和集合) を採用 |
| Exclusive Or | .xor |
片方のブロックでのみ選択された要素 (対称差) を採用 |
| Not And | .nand |
And の否定 (両方で選択されていないものを採用) |
| Not Or | .nor |
Or の否定 (どちらでも選択されていないものを採用) |
判定属性 📍
Attribute .attr0inattr 📍
– 条件判定に使用する属性の名前
– 例: P (位置) / Cd (色) / uv (UV 座標) など任意の属性名を指定
比較関数 .attr0func 🧮
属性値と Value の比較に使う関数を選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| < | .lt |
属性値が Value 未満なら選択 |
| <= | .lte |
属性値が Value 以下なら選択 |
| > | .gt |
属性値が Value より大きいなら選択 |
| >= | .gte |
属性値が Value 以上なら選択 |
| == | .eq |
属性値が Value と等しいなら選択 |
| != | .ne |
属性値が Value と等しくないなら選択 |
比較値 🔢
Value .attr0value 🔢
– 比較対象の値 (Function で選択した比較関数の右辺)
– attr0inattr で指定した属性の値とこの値を比較し、Function 条件を満たす要素を選択
属性ブロック反転 🔄
Invert .attr0invert 🔄
– 現在の属性条件ブロックの選択結果をブロック単位で反転
– 「条件に合致しないものを選択」したいときにオン
Thin Page 📋
間引き選択の有効化 🟢
Enabled .thinenabled 🟢
– インデックス範囲 / ステップ / ランダムによる選択を有効化
– オフのときは Thin Page の他パラメータは無視される
インデックス範囲 📐
Thin Out Range .thinoutrange 📐
– インデックス範囲ベースのポイント フィルタを有効化
– 連続した index 区間をまとめてグループに入れたいときに使用
Thin Range Start .thinrangestart 🎯
– 範囲ベース フィルタの開始インデックス
– 0 で先頭から、任意値で途中区間からの選択が可能
Thin Range Length .thinrangelength 📏
– 範囲ベース フィルタで対象とするインデックス長
– thinrangestart から本パラメータ分のポイントが選択対象
ステップ間引き 🪜
Thin Step .thinstep 🪜
– N 個ごとに 1 個を選択する等間隔間引き
– 値 2 で 1 つおき、10 で 10 個に 1 個を選択
ランダム選択 🎲
Thin Random .thinrandom 🎲
– 0〜1 の比率でランダムに選択する確率
– 0.3 なら全体の約 30 % をランダムに選択対象とする
Thin Random Seed .thinrandomseed 🌱
– ランダム選択の乱数シード
– 同じシードで同じ選択結果を再現可能、変えるとパターンが変わる
ブロック選択反転 🔄
Invert .thininvert 🔄
– Thin Page 内の条件で得られた選択結果をブロック単位で反転
– Pattern / Bounding と組み合わせる際の論理結合に有効
Pattern Page 📋
パターン ブロックの先頭 .pattern 🧱
Pattern .pattern 🧱
– インデックス マッチ パターンの Sequential Parameter Blocks 先頭
– Pattern 0 / Pattern 1 / Pattern 2… を + ボタンで追加し、複数パターンを And / Or / Xor / Nand / Nor で結合
パターン ブロックの結合方式 .pattern0combine 🔀
現在のパターン ブロックを直上のブロックとどう結合するかを選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| And | .and |
両ブロックの選択 (積集合) を採用 |
| Or | .or |
いずれかブロックで選択された要素 (和集合) を採用 |
| Exclusive Or | .xor |
片方のブロックでのみ選択された要素 (対称差) を採用 |
| Not And | .nand |
And の否定 (両方で選択されていないものを採用) |
| Not Or | .nor |
Or の否定 (どちらでも選択されていないものを採用) |
パターン式 .pattern0pattern 🔡
インデックスマッチ用 Pattern Expansion 構文の代表例 (詳細は公式 wiki の Pattern Expansion 参照)
| 項目 | 内部名 | 説明 |
|---|---|---|
| * | .* |
すべてのインデックス |
| *:4 | .*:4 |
全範囲を 4 個ごとに選択 (ステップ 4 のサンプリング) |
| 0-50 | .0-50 |
0 から 50 までのインデックス範囲 |
| 0-50:2 | .0-50:2 |
0〜50 を 2 飛びで選択 (0, 2, 4, …, 50) |
パターン ブロック反転 🔄
Invert .pattern0invert 🔄
– 現在のパターン ブロックの選択結果をブロック単位で反転
– 0-50 指定 + Invert オンで 0-50 以外 を選択する用途
Group Page 📋
入力グループ ブロックの先頭 .group 🧷
Group .group 🧷
– 入力グループ参照ブロックの Sequential Parameter Blocks 先頭
– 上流の Group POP で既に作成済みのグループを参照する場合に使用。Group 0 / Group 1… を + ボタンで追加し、複数の入力グループを And / Or / Xor / Nand / Nor で結合できる
入力グループ ブロックの結合方式 .group0combine 🔀
現在の入力グループ ブロックを直上のブロックとどう結合するかを選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| And | .and |
両ブロックで参照されたグループ メンバの積集合を採用 |
| Or | .or |
いずれかのブロックで参照されたメンバ (和集合) を採用 |
| Exclusive Or | .xor |
片方のブロックでのみ参照されたメンバ (対称差) を採用 |
| Not And | .nand |
And の否定 (両グループに共通しないメンバ) を採用 |
| Not Or | .nor |
Or の否定 (どちらのグループにも属さないメンバ) を採用 |
参照するグループ名 .group0name 🏷️
Group .group0name 🏷️
– 参照対象とする既存グループの名前
– 上流 Group POP の grname で登録済みのグループ名を指定すると、そのメンバ要素のみを本ブロックの選択集合として扱う
入力グループ ブロック反転 🔄
Invert .group0invert 🔄
– 現在の入力グループ ブロックの選択結果をブロック単位で反転
– 「指定グループに含まれないメンバ」を選択したいときにオン
Bounding Page 📋
バウンディング ブロックの先頭 .bound 📦
Bound .bound 📦
– バウンディング ボリューム ブロックの Sequential Parameter Blocks 先頭
– Bound 0 / Bound 1… を追加して複数領域を And / Or 等で結合できる
バウンディング ブロックの結合方式 .bound0combine 🔀
現在のバウンディング ブロックを直上のブロックとどう結合するかを選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| And | .and |
両領域の積集合内のポイントを選択 |
| Or | .or |
いずれかの領域に含まれるポイントを選択 |
| Exclusive Or | .xor |
片方の領域のみに含まれるポイントを選択 |
| Not And | .nand |
両領域の積集合に含まれないポイントを選択 |
| Not Or | .nor |
どちらの領域にも含まれないポイントを選択 |
判定属性 📍
Attribute .bound0inattr 📍
– バウンディング判定に使用する位置属性の名前
– 通常はポイント位置 P。別属性 (例: uv) を使って属性空間内の領域判定も可能
バウンディング タイプ .bound0type 🔷
バウンディング ボリュームの形状を選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Bounding Box | .boundingbox |
軸並行直方体 (AABB) を境界として使用 |
| Bounding Sphere | .boundingsphere |
球体を境界として使用 (中心からの半径で判定) |
ボリュームの変換 📐
Translate .bound0translate ↔️
– バウンディング ボリュームを 3 軸方向に平行移動 (bound0translatex / bound0translatey / bound0translatez)
– シーン内の任意位置にボリュームを配置するための座標
Rotate .bound0rotate 🔁
– バウンディング ボリュームの 3 軸回転 (bound0rotatex / bound0rotatey / bound0rotatez)
– Bounding Box では向きの調整に有効 (Sphere では回転は形状に影響しない)
Scale .bound0scale 📏
– バウンディング ボリュームの 3 軸スケール (bound0scalex / bound0scaley / bound0scalez)
– Box の幅・高さ・奥行きや Sphere の半径方向のスケーリングを制御
バウンディング ブロック反転 🔄
Invert .bound0invert 🔄
– 現在のバウンディング ブロックの選択結果をブロック単位で反転
– ボリューム内ではなくボリューム外をグループ対象にしたい場合にオン
Edit Page 📋
グループの属性クラス変換 .cnvttype 🔀
既存グループを別の属性クラスへ変換する操作タイプを選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Primitive to Point Group | .topoint |
プリミティブ グループを「そのプリミティブを構成するポイント群」のポイント グループに変換 (降格) |
| Point to Primitive Group | .toprim |
ポイント グループを「そのポイントを含むプリミティブ群」のプリミティブ グループに変換 (昇格) |
変換対象と新名称 🏷️
Convert Group .cnvtgroup 🎯
– 変換対象とする既存グループの名前
– Create Page / 上流 Group POP で作成済みのグループ名を指定
Convert Name .cnvtname 🏷️
– 変換結果として新しく作られるグループの名前
– 下流 POP からはこの新しい名前で参照する
Preserve Original .preserve 💾
– 変換時に元の属性クラス グループも保持するか
– オフだと変換元のグループは削除され、変換結果のみが残る
グループ名の変更 .oldname 🔄
Old Group Name .oldname 🔡
– リネーム対象とする既存グループの旧名
– 該当グループが見つからない場合は何も起こらない
New Group Name .newname 🆕
– リネーム後の新しいグループ名
– 下流 POP のグループ参照を新しい名前に合わせて更新する必要がある
グループの削除 .deletename 🗑️
Delete Group .deletename 🗑️
– 削除する既存グループの名前 (スペース区切りで複数指定可)
– グループ自体を削除するだけで、グループに属していたポイント / プリミティブはジオメトリ上に残る
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: 領域内を着色グループ化 📦
Grid POP → Group POP (Bounding Box, grname=front) → Attribute POP (group=front, Cd=red) → Render TOP
Grid POP の高密度ポイント配列に対し、Bounding Box で定義した直方体領域内のポイントだけを front という名前のグループとして登録し、下流 Attribute POP でそのグループに対してのみ色属性 Cd を赤に設定する基本フロー。
- Grid POP を配置し、十分な密度のポイント配列を生成
- Group POP を後段に接続し、Create Page の
grnameをfrontに設定 - Entity を
point、Debug Color を一時的にオンにしてグループ範囲を視覚確認 - Bounding Page で
bound0typeをBounding Boxに設定、bound0translate/bound0scaleで領域を調整 - Attribute POP のグループ参照に
frontを指定し、対象ポイントのみに色属性を適用
Example 2: 先頭群を抽出削除 🎲
Particle POP → Group POP (Pattern: 0-99, grname=head) → Delete POP (group ref=head) → Render TOP
Particle POP の出力から、Pattern Expansion 構文 0-99 で先頭 100 個のインデックスを head グループに登録し、Delete POP で「head グループだけ削除」「head グループだけ残す」を Operation 切替で比較する応用フロー。
- Particle POP で時系列パーティクル ポイントを生成
- Group POP の Create Page で
grnameをheadに設定 - Pattern Page で
pattern0patternを0-99に設定 (先頭 100 個のインデックスを選択) - Delete POP を後段に接続し、グループ参照パラメータに
headを指定 - Delete POP の Operation を
delete/keepで切り替えてグループ単位の削除・保持を比較
Example 3: ランダム半数を色分け 🎨
Noise POP → Group POP (Thin Random 0.5, debugcolor=on, grname=halfA) → Group POP (thininvert=on, grname=halfB) → Render TOP
Noise POP で散布したポイントに対し、1 段目の Group POP で thinrandom=0.5 によりおよそ半分のポイントを halfA グループに登録し、Debug Color で可視化。2 段目の Group POP で同じ条件 + thininvert 反転を使い残り半分を halfB に登録することで、2 つの相補的なグループを 1 シーン内で確認できる。
- Noise POP で広範囲にポイントを散布
- 1 段目の Group POP の Create Page で
grnameをhalfA、debugcolorをオンに設定 - Thin Page で
thinenabledをオン、thinrandomを0.5に設定 - 2 段目の Group POP を直列に接続し、
grnameをhalfB、同じthinrandom値でthininvertをオン - Render TOP で 2 グループが Debug Color によって異なる色で可視化されていることを確認
関連オペレータ 🔗
類似機能OP 🔍
- Delete POP — 同じ Thin / Pattern / Bounding 選択機構を使うが、選択結果を「グループに登録」する代わりに「削除」する POP
組み合わせ推奨OP 🔄
- Grid POP — グループ化対象となる高密度ポイント配列の典型的な前段入力
- Noise POP — 広範囲に散在するポイント生成元、Bounding Box でのグループ化と相性が良い
- Particle POP — 時系列パーティクル ポイントを Pattern Expansion でインデックス指定グループ化
- Attribute POP — 登録したグループに対してのみ属性 (Cd / normal 等) を設定・更新する典型的な後段
- Delete POP — 登録したグループを参照してグループ単位での削除・保持を切替可能
- POP to SOP — グループ情報を保持したまま SOP ワークフローへ受け渡す出力経路
前処理・後処理POP 🎯
- 前処理: Grid POP、Noise POP、Particle POP、Attribute POP
- 後処理: Attribute POP、Delete POP、Transform POP、POP to SOP
Info POP情報 📊
Group 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 汎用情報 📊
num_points: 出力ジオメトリのポイント総数num_prims: 出力ジオメトリのプリミティブ総数num_point_attribs: 出力ジオメトリのポイント属性数 (Debug Color オンでCdが追加される)num_vertex_attribs: 出力ジオメトリの頂点属性数num_prim_attribs: 出力ジオメトリのプリミティブ属性数gpu_memory_used: この POP が使用している GPU メモリ量
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: グループにポイントが入らない / グループが空になる
✅ Solution:
- Thin Page を使う場合は
thinenabledがオンになっているか確認 - Pattern Page / Bounding Page を使う場合は対応するブロックがパラメータエディタで追加されているか確認 (Sequential Parameter Blocks の + ボタン)
- Entity が
point/primitiveのどちらか意図した側になっているか確認 - Debug Color を一時的にオンにしてグループ範囲を視覚確認
❌ Problem: 下流 POP からグループ名を参照できない
✅ Solution:
- Group Name (
grname) が空でなく、下流 POP のグループ参照パラメータで完全に同じ文字列を指定しているか確認 - Edit Page で Convert / Rename した場合、下流の参照名を新しい名前 (
cnvtname/newname) に更新 - 上流の POP to CHOP や Info CHOP でグループに含まれるポイント数を確認し、グループが実体を持っているか検証
❌ Problem: Bounding Box / Sphere の位置が意図したエリアと違う
✅ Solution:
bound0translate/bound0scaleが判定対象の座標系と一致しているか確認 (シーン座標系 vs ローカル座標系)- 判定に使う属性が
bound0inattrで正しく指定されているか確認 (通常は位置属性P) bound0typeを Sphere ↔ Box で切り替えて、形状側の問題か位置側の問題かを切り分け
❌ Problem: Edit Page で Convert / Rename / Delete しても下流で反映されない
✅ Solution:
- Convert 時の
preserve設定を確認 (オフだと元グループが消えてしまい、元の名前を下流で参照していると失敗する) - Rename 後は下流 POP のグループ参照パラメータを新しい名前 (
newname) に更新 - Delete Group で削除した名前を下流が参照していないか確認 (削除済グループの参照は空集合として扱われる)
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Group POP
- POP 概要 (Points, Vertices and Primitives in POPs)
- Pattern Expansion (Pattern Page で使う構文)
- Delete POP (関連: 同じ選択機構で削除を行う代替手段)

