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

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

Delete POP のポイント・プリミティブ削除機能を示す図

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

概要 📖 – ポイント・プリミティブを条件指定で削除する間引き処理

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 等で結合し選択)

出力: 選択ポイント (またはプリミティブ) が削除 / 保持されたジオメトリ

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 個を残す疎な分布を生成する。

  1. Grid POP を配置し、十分な密度のポイント配列を生成
  2. Delete POP を後段に接続
  3. Thin Page の thinenabled をオンにする
  4. thinstep4 に設定し 4 個ごとに 1 個を選択
  5. 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 に反転することで「選択範囲のみ残す」挙動になる。

  1. Noise POP 等で広い範囲にポイントを生成
  2. Delete POP の Operation を Delete Non-Selected に変更
  3. Bounding Page で bound0typeBounding Box に設定
  4. bound0translate / bound0scale で対象エリアの位置とサイズを調整
  5. 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 にしてサンプリング結果を残す応用フロー。

  1. Particle POP で時系列パーティクル ポイントを生成
  2. Delete POP の Pattern Page で pattern0pattern0-99 に設定 (先頭 100 個を選択)
  3. Thin Page の thinenabled をオンにし、thinrandom0.5 に設定 (約 50 % をランダム選択)
  4. Pattern と Thin の選択結果を Or で結合 (どちらかで選ばれたものを保持)
  5. 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 (deletekeep) は独立して動作するため、両方オンにすると二重反転で元に戻る
  • 「選択範囲のみ残す」用途なら 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 パルスで未使用メモリを解放してメモリ消費の上振れを抑制

参考資料 📚

その他 🔗

公式リソース 📖

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