
概要 📖 – ポイント・プリミティブを条件指定で削除する間引き処理
Delete POPは、入力ジオメトリのポイントまたはプリミティブを、インデックス範囲・パターン構文・境界ボリュームの組み合わせで選択して削除 (または非選択を削除) する POPです。Thin / Pattern / Bounding の 3 系統を And / Or / Xor / Nand / Nor で複合的に結合でき、Operation で削除 / 保持を反転できるため、間引き・領域クリップ・スパースサンプリングを 1 ノードで構成できます。
主な用途 🎯
- インデックス範囲・ステップ・ランダム比率によるポイント / プリミティブの間引き
- Pattern Expansion 構文 (
0-50:2/[1,4,9]等) による任意インデックスパターン削除 - Bounding Box / Bounding Sphere の領域内ポイントを切り出し / 切り抜き
- And / Or / Xor / Nand / Nor 論理結合による複合条件 (パターン + 範囲 + ボックス) フィルタ
- Operation 反転 (Delete Non-Selected) による選択範囲のみ残す clipping 用途
データフロー 🔄
入力: ポイント / プリミティブ属性付きジオメトリ
↓
Delete POP (Thin インデックス / Pattern 構文 / Bounding 領域を And/Or 等で結合し選択)
↓
出力: 選択ポイント (またはプリミティブ) が削除 / 保持されたジオメトリ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Delete Page 📋
Operation .invert 🔁
選択された要素を削除するか、選択されなかった要素を削除するかを反転するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Delete Selected | .delete |
選択された要素 (Thin / Pattern / Bounding で hit したもの) を削除 |
| Delete Non-Selected | .keep |
選択されなかった要素を削除 (= 選択範囲のみ残す、clipping 用途) |
Entity .entity 🧩
削除対象とする属性クラスを選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Primitives | .primitive |
プリミティブ単位で削除を判定 (三角形・四角形・線分単位の間引き) |
| Points | .point |
ポイント単位で削除を判定 (ポイントクラウドの間引き) |
Line Strip 削除挙動 .linestripbehavior 📏
Line Strip Behavior .linestripbehavior 📏
– ライン ストリップ内のポイントが削除された際の挙動を制御
– 削除位置でストリップを分断するか、繋ぎ直すかを決定する
Copy Topology Info Back to CPU .cpureadback 💾
– GPU 上のポイント数 / トポロジ情報を CPU 側に転送するか
– 下流で CHOP / DAT 等から削除後のポイント数を参照したい場合にオン
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 内の条件で得られた選択結果のみをブロック単位で反転
– Operation (Delete 全体反転) とは独立して動作するため、複合条件で柔軟に組み合わせ可能
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 参照)
| 項目 | 内部名 | 説明 |
|---|---|---|
| * | .* |
すべてのインデックス |
| 0-50 | .0-50 |
0 から 50 までのインデックス範囲 |
| 0-50:2 | .0-50:2 |
0〜50 を 2 飛びで選択 (0, 2, 4, …, 50) |
| [*] | .[*] |
全インデックスを別形式で表現 (* と同等) |
| [*:4] | .[*:4] |
全範囲を 4 個ごとに選択 |
| [0-49] | .[0-49] |
0〜49 の範囲を選択 (括弧形式) |
| [0-49:2] | .[0-49:2] |
0〜49 を 2 飛びで選択 (括弧形式) |
| ^[*:4] | .^[*:4] |
^ 前置による否定 (4 個ごと選択の補集合) |
| [*:5:7] | .[*:5:7] |
ステップ 5 / オフセット 7 のような複合指定 |
| [1,4,9] | .[1,4,9] |
個別インデックスをカンマ区切りで指定 |
| 1 4 [7-9] | .1 4 [7-9] |
個別インデックスと範囲をスペース区切りで併用 |
パターン ブロック反転 🔄
Invert .pattern0invert 🔄
– 現在のパターン ブロックの選択結果をブロック単位で反転
– 0-50 指定 + Invert オンで 0-50 以外 を選択する用途
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 🔄
– 現在のバウンディング ブロックの選択結果をブロック単位で反転
– ボリューム内ではなくボリューム外を対象にしたい場合にオン
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 → Delete POP (Thin Page: thinenabled=on, thinstep=4) → Render TOP
Grid POP の高密度ポイント配列を Delete POP の Thin Step でステップ間引きし、ポイントクラウドのプレビュー用に密度を下げる基本フロー。Operation は delete のままで、4 個に 1 個を残す疎な分布を生成する。
- Grid POP を配置し、十分な密度のポイント配列を生成
- Delete POP を後段に接続
- Thin Page の
thinenabledをオンにする thinstepを4に設定し 4 個ごとに 1 個を選択- Operation が
delete(Delete Selected) のままなら選択された 1/4 が消えるので、Operation をkeepに切替えて選択側を残す挙動も比較確認
Example 2: Bounding Boxで領域内だけ残す 📦
Noise POP → Delete POP (Operation=keep, Bounding Page: bound0type=boundingbox, translate/scale 設定) → Render TOP
Noise POP で広範囲に散在するポイントから、Bounding Box で定義した直方体領域に含まれるものだけを残し、シーン内の特定エリアだけにポイントクラウドを限定する clipping 用途。Operation を Delete Non-Selected に反転することで「選択範囲のみ残す」挙動になる。
- Noise POP 等で広い範囲にポイントを生成
- Delete POP の Operation を
Delete Non-Selectedに変更 - Bounding Page で
bound0typeをBounding Boxに設定 bound0translate/bound0scaleで対象エリアの位置とサイズを調整- Render TOP で Box 内のポイントだけが残ったクリッピング結果を確認
Example 3: Pattern + Thin の複合条件で疎なサンプリング 🎲
Particle POP → Delete POP (Pattern: 0-99 / Thin: thinrandom=0.5, combine=or) → Render TOP
Particle POP の出力から、Pattern Expansion で先頭 100 個のインデックスを保持しつつ、それ以外はランダムに約 50 % を残すスパース サンプリング。Pattern Page と Thin Page の選択結果を Or で結合し、Operation を keep にしてサンプリング結果を残す応用フロー。
- Particle POP で時系列パーティクル ポイントを生成
- Delete POP の Pattern Page で
pattern0patternを0-99に設定 (先頭 100 個を選択) - Thin Page の
thinenabledをオンにし、thinrandomを0.5に設定 (約 50 % をランダム選択) - Pattern と Thin の選択結果を Or で結合 (どちらかで選ばれたものを保持)
- Operation を
Delete Non-Selectedに切り替え、選択側のみ残るサンプリング結果を Render TOP で確認
関連オペレータ 🔗
類似機能OP 🔍
- Group POP — ポイント / プリミティブを条件指定で「グループ化」する POP。Delete が選択した要素を削除するのに対し、Group は選択した要素にラベルを付けて下流で参照可能にする
組み合わせ推奨OP 🔄
- Grid POP — 削除対象となる高密度ポイント配列の典型的な前段入力
- Noise POP — 広範囲に散在するポイント生成元、Bounding Box での clipping と相性が良い
- Particle POP — 時系列パーティクル ポイントの間引き・サンプリングの前段入力
- Attribute POP — 削除前に属性を生成し、削除後に法線等を再計算するために併用
- POP to SOP — 間引き後のジオメトリを SOP ワークフローに渡す典型的な後段
前処理・後処理POP 🎯
Info POP情報 📊
Delete 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_prims: 削除後の出力プリミティブ数num_point_attribs: 出力ジオメトリのポイント属性数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のどちらか意図した側になっているか確認
❌ Problem: Bounding Box / Sphere の位置が意図したエリアと違う
✅ Solution:
bound0translate/bound0scaleが判定対象の座標系と一致しているか確認 (シーン座標系 vs ローカル座標系)- 判定に使う属性が
bound0inattrで正しく指定されているか確認 (通常は位置属性P) bound0typeを Sphere ↔ Box で切り替えて、形状側の問題か位置側の問題かを切り分け
❌ Problem: 選択を反転したいのに反転が効かない / 二重反転になる
✅ Solution:
- ブロック単位の Invert (
thininvert/pattern0invert/bound0invert) と Operation (delete↔keep) は独立して動作するため、両方オンにすると二重反転で元に戻る - 「選択範囲のみ残す」用途なら Operation を
Delete Non-Selectedに切り替えるだけで完結する場合が多い - 複合条件で一部だけ反転したいときはブロック側 Invert を使い、全体反転は Operation 側でまとめる
❌ Problem: 削除後にポイント数を CHOP / DAT から参照できない
✅ Solution:
cpureadback(Copy Topology Info Back to CPU) をオンにして GPU 上のトポロジ情報を CPU に転送- 下流で POP to CHOP や Info CHOP を経由してポイント数を取得
- 削除割合を動的に動かす場合は Free Extra GPU Memory パルスで未使用メモリを解放してメモリ消費の上振れを抑制
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Delete POP
- POP 概要 (Points, Vertices and Primitives in POPs)
- Pattern Expansion (Pattern Page で使う構文)
- Group POP (関連: 選択結果をグループ化する代替手段)

