
概要 📖 – 近接点を線でつなぐ
Proximity POPは、入力点群の近接する点同士を距離条件にもとづいて線分でつなぎ、ネットワーク状のジオメトリを出力する POPです。最大・最小距離と 1 点あたりの線数で接続のされ方を制御でき、線の方向や長さを属性として書き出せます。空間ハッシュによる近接検索で大規模な点群でも実用的な速度を保ちます。
主な用途 🎯
- 距離しきい値内にある近接点同士を線分でつなぎ、点群を網状のジオメトリに変換
- パーティクル群の近接関係を可視化し、つながりのネットワーク表現を生成
- 点ごとの接続本数を制限して、適度な密度の構造的ラインアートを作成
- 線の方向ベクトルや長さを属性として出力し、下流のシェーディングや制御に活用
- 2 つの入力間で近接点を線でつなぎ、点群間の対応関係を表現
データフロー 🔄
入力: 位置属性付きポイント群
↓
空間ハッシュで近接候補を抽出
↓
距離条件と本数上限で線を生成
↓
出力: 近接点をつないだ線分プリミティブ (方向・長さ属性付き)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Proximity Page 📋
接続距離の範囲 .maxdist 📏
Maximum Distance .maxdist 📏
– Maximum Distance (最大距離) — 現在の点から線をつなぐ候補点までの最大距離
– この距離より遠い点は接続対象から外れます。値が大きいほど候補が増え計算量も増加
Minimum Distance .mindist 📐
– Minimum Distance (最小距離) — 線をつなぐ候補点までの最小距離
– この距離より近い点は接続から除外されます。点が密集しすぎた部分の過剰な線を抑えるのに有効
点ごとの線数 .maxlinesperpoint 🔢
Max Lines per Point .maxlinesperpoint 🔢
– Max Lines per Point (点あたり最大線数) — 最初の入力の各点から伸ばす線の最大本数
– 接続密度を制御するしきい値。少なく設定すると最も近い点を優先してつなぎます
候補点の選び方 .uniformdist 🎲
Uniform Distribution .uniformdist 🎲
– Uniform Distribution (均一分布) — 近接点の中から偏りなく選ぶよう分布を均一化するトグル
– オフだと先に見つかった点が優先されます。オンにすると周囲に均等に線が広がる傾向になります
候補保持の上限 .maxtempneighbors 🗃️
Max Temp Neighbors .maxtempneighbors 🗃️
– Max Temp Neighbors (一時近接候補上限) — 線数上限まで絞り込む前に内部で保持する候補点数
– 内部処理用のバッファ。点あたり最大線数より十分大きい値にすると最適な近接点を取りこぼしにくくなります
重複線の扱い .duplines ♻️
重複した近接線をどう処理するかを決めるメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Do Nothing | .donothing |
重複した線をそのまま残します (両方向の線が必要な場合) |
| Avoid | .avoid |
生成段階で重複線が作られないように回避します |
| Delete | .delete |
生成後に重複した線を削除します |
ハッシュ設定 .numhashbuckets 🪣
Num Hash Buckets .numhashbuckets 🪣
– Num Hash Buckets (ハッシュバケット数) — 位置にもとづき点を振り分ける空間ハッシュのバケット数
– 目安は入力点数に近い値。少なすぎると 1 バケットの探索コストが増え、多すぎるとオーバーヘッドが上回ります
Output Page 📤
出力形式 .output 📦
近接情報を線として出力するか、点プリミティブとして出力するかを決めるメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Lines (Shared Points) | .lines |
近接点をつなぐ線分プリミティブを出力 (点は共有) |
| Point Prims | .points |
線ではなく属性付きの点プリミティブとして出力 |
線の方向属性 .linedir 🧭
Line Direction .linedir 🧭
– Line Direction (線方向属性) — 各線の方向ベクトルを属性として追加するトグル
– 子パラメータ Line Direction Attrib Name (linedirname) で方向属性の名前を指定します
線の長さ属性 .linelength 📐
Line Length .linelength 📐
– Line Length (線長属性) — 各線の長さを属性として追加するトグル
– 子パラメータ Line Length Attrib Name (linelengthname) で長さ属性の名前を指定します
端点属性とオプション .endptattrs 🏷️
End Point Attributes .endptattrs 🏷️
– End Point Attributes (端点属性出力) — 2 番目の入力から端点側の属性を出力するトグル
– 2 入力構成で、接続先の点が持つ属性を線の端点に引き継ぎたいときに有効化します
Remove Unused Points .remunusedpoints 🗑️
– Remove Unused Points (未使用点の削除) — プリミティブに参照されない点を削除するトグル
– 線につながらなかった孤立点を出力から除き、ジオメトリを軽量化します
Copy Topology Info Back to CPU .cpureadback 🔁
– Copy Topology Info Back to CPU (トポロジー情報を CPU へ複製) — GPU 上の点数とトポロジー情報を CPU 側へコピーするトグル
– CPU 側で点数や接続情報を参照する処理 (Python / DAT 連携等) が必要なときに有効化します
線の起点 .origin 🎯
線の起点を 1 番目の入力点と 2 番目の入力点のどちらにするかを決めるメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| First Input Points | .first |
1 番目の入力の点を線の起点とします |
| Second Input Points | .second |
2 番目の入力の点を線の起点とします |
Common Page 🔧
Bypass .bypass 🚫
POP の処理をスキップして入力をパススルーする設定:
- オン: 最初の入力 (input1) をそのまま出力にパススルー、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 → Proximity POP (Maximum Distance, Max Lines per Point) → Render TOP
格子状に配置した点群に対し Proximity POP で近接点同士を線でつなぎ、ネットワーク状のワイヤーフレームを生成する基本フローです。最大距離と点あたりの線数を調整することで、つながりの密度を直感的にコントロールできます。
- Grid POP で規則的な点群を生成
- Proximity POP の Maximum Distance を点間隔のおよそ 1.5 倍に設定
- Max Lines per Point を 3〜4 に設定して適度な接続密度にする
- Duplicate Lines を
deleteにして重なった線を除去 - Render TOP でネットワーク状のラインアートを確認
Example 2: パーティクルの接続表現 ✨
Particle POP → Proximity POP (Output=lines, Line Length=on) → Math POP → Render TOP
動的に動くパーティクル群の近接関係を Proximity POP でリアルタイムに線でつなぎ、群れのつながりを可視化する例です。線の長さ属性を出力して下流で太さや透明度にマッピングすれば、近いほど濃い線という有機的な表現が作れます。
- Particle POP で拡散するパーティクル点群を生成
- Proximity POP の Maximum Distance を群れのスケールに合わせて設定
- Line Length トグルをオンにして線長属性を出力
- Math POP で線長を反転・正規化し、近い線ほど強調されるよう値を作る
- Render TOP でパーティクル間のつながりが動的に変化することを確認
Example 3: 2入力間の対応線 🔗
Line POP (input1) + Grid POP (input2) → Proximity POP (Origin=first, End Point Attributes=on) → Render TOP
2 つの異なる点群を入力し、近接する点同士を線でつないで点群間のつながりを表現する例です。起点を 1 番目の入力に固定したうえで端点属性を出力すると、接続先が持つ色や法線といった属性を線の端へ引き継いだ視覚的な対応マップが得られます。
- Line POP を 1 番目、Grid POP を 2 番目の入力として Proximity POP に接続
- Origin を
firstに設定して 1 番目の入力点を起点にする - End Point Attributes をオンにして接続先の属性を端点へ出力
- Maximum Distance / Max Lines per Point で対応線の密度を調整
- Render TOP で 2 点群を結ぶ対応線を確認
関連オペレータ 🔗
類似機能OP 🔍
- Connectivity POP — 点同士のつながり (連結成分) を解析する近縁の接続系 POP
組み合わせ推奨OP 🔄
- Particle POP — 動的な点群を供給し、近接接続のネットワークを刻々と更新する代表的な上流
- Line POP — Proximity が出力する線分プリミティブを下流で分割・再サンプルする後段
- Attribute POP — 線方向・線長などの出力属性を整えたり追加属性を扱う前後段
- Math POP — 線長属性を正規化・反転して太さや透明度の制御値に変換する後段
前処理・後処理POP 🎯
Info POP情報 📊
Proximity 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: 出力ジオメトリのポイント属性数num_vertex_attribs: 出力ジオメトリの頂点属性数num_prim_attribs: 出力ジオメトリのプリミティブ属性数 (線方向・線長の追加でカウント増加)gpu_memory_used: この POP が使用している GPU メモリ量 (生成する線の本数に比例)
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 線がまったく生成されない / 出力が空になる
✅ Solution:
- Maximum Distance が小さすぎないか確認 (入力点群のスケールに対し十分大きい値か)
- Minimum Distance が大きすぎて全候補が除外されていないか確認
- Info CHOP の
num_primsで線が実際に生成されているかをチェック
❌ Problem: 線が多すぎて画面が真っ白になる
✅ Solution:
- Max Lines per Point を下げて 1 点あたりの接続本数を制限
- Maximum Distance を小さくして接続候補の範囲を狭める
- Duplicate Lines を
deleteまたはavoidにして重複線を除去
❌ Problem: パフォーマンスが極端に遅い / フレームレート低下
✅ Solution:
- Num Hash Buckets を入力点数に近い値に調整 (デフォルトでは過剰または不足の可能性)
- Max Temp Neighbors を必要最小限に下げて内部候補バッファを削減
- 前段で Sort POP 等を使い点数自体を間引く
❌ Problem: 同じ点同士に線が二重に引かれる
✅ Solution:
- Duplicate Lines を
avoidにして生成段階で重複を防ぐ - すでに生成済みなら
deleteで後処理として削除 - Uniform Distribution をオンにして候補点の偏りを減らし重複の発生を抑える
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Proximity POP
- POP 概要 (Points, Vertices and Primitives in POPs)
- TouchDesigner公式ドキュメント – Attribute (属性の基礎)

