
概要 📖 – 近傍点を検出し属性集計
Neighbor POPは、入力点群の各点について近傍点を検出し、近傍インデックス配列・距離・属性平均などを出力する POPです。近傍判定は距離しきい値またはエッジ接続から選択でき、出力は個別の近傍インデックス配列・属性平均・距離重み付き平均から選べます。空間ハッシュによる高速化で大規模点群でも実用速度を維持します。
主な用途 🎯
- 各点の近傍点インデックス配列を生成し、点群同士のローカル関係を属性化
- 近傍点の色・速度・法線などの属性を平均化してスムージング処理
- パーティクル群の局所密度推定 (近傍点数 = 密度の代理値)
- 群集挙動 (Boids) の整列・凝集ベクトルなど近傍参照の事前計算
- 距離重み付き平均で近傍属性を補間し、点群の滑らかな field 化
データフロー 🔄
入力: 位置属性付きポイント群
↓
空間ハッシュで近傍候補抽出
↓
距離 or エッジ接続で近傍判定
↓
出力: 近傍インデックス配列・距離・平均属性を付与した点群
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Neighbor Page 📋
近傍検出方式 .nebrtype 🧭
近傍点を判定する基準を選ぶメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| By Distance | .distance |
距離しきい値以下に存在する点を近傍として判定 (点群一般向け) |
| Connected | .connected |
プリミティブのエッジで接続された点のみを近傍として判定 (メッシュトポロジー向け) |
近傍距離しきい値 .maxdistance 📏
Max Neighbors Distance .maxdistance 📏
– Max Neighbors Distance (近傍最大距離) — この距離以下にある点を近傍として扱うしきい値
– By Distance モードでのみ有効。値が大きいほど近傍候補が増えハッシュ計算量も増加
近傍集合の分布 .distribution 🎲
返される近傍集合の選び方を決めるメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Default | .default |
距離しきい値内の近傍を Max Neighbors の上限まで返す既定方式 |
| Unique | .unique |
ペアの重複を避けるよう近傍集合を返す (双方向ペアの片側のみ) |
| Closest | .closest |
距離が近い順に Max Neighbors 個まで近傍を返す |
ハッシュ設定 .hash 🗂️
Num Hash Buckets .numhashbuckets 🪣
– Num Hash Buckets (ハッシュバケット数) — 位置に基づき点をソートするバケット数
– 目安は入力点数に近い値。少なすぎると 1 バケットの探索コストが増え、多すぎるとオーバーヘッドが上回る
Output Hash Attrib .outputhash 🔍
– Output Hash Attrib (ハッシュ属性出力) — 空間ハッシュ値を属性として出力するトグル
– デバッグ用途。ハッシュの偏りを可視化してパフォーマンスを最適化したいときに有効化
出力モード .nebroutput 📤
近傍情報の出力形式を決めるメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Neighbors | .nebr |
近傍ごとのインデックスや属性を配列として個別に出力 (詳細解析向け) |
| Average | .avg |
近傍属性の単純平均のみを出力 (スムージング・密度推定向け) |
| Inverse Distance Weighted Average | .weightedavg |
距離の逆数で重み付けた平均を出力 (近い点ほど寄与が大きい補間) |
配列サイズ上限 .maxneighbors 🔢
Max Neighbors .maxneighbors 🔢
– Max Neighbors (近傍数上限) — 出力配列の固定サイズを決める近傍数の上限
– 各点で実際に検出された近傍数がこの値を超えるとそれ以降は切り捨て
近傍属性の出力 .nebr_attribs 🏷️
Neighbors .nebrs 📋
– Neighbors (近傍配列) — 近傍点のインデックス配列を属性として出力するトグル
– 子パラメータ Neighbor Attr Name (nebrattrname) で属性名を指定可能
Num Neighbors .numnebrs 🔢
– Num Neighbors (近傍数属性) — 各点ごとに実際に検出された近傍点数を属性として出力するトグル
– 子パラメータ Num Neighbors Attr Name (numnbrsattrname) で属性名を指定。局所密度として利用可能
Add Distance Attribute .dodist 📐
– Add Distance Attribute (距離属性追加) — クエリ点から近傍点までの距離を属性として出力するトグル
– 距離に応じた減衰処理やシェーディング重み計算に利用
平均化設定 .averaging 📊
Max Neighbors for Average .maxnebrsavg 🔢
– Max Neighbors for Average (平均化対象上限) — 平均計算に含める近傍点数の上限
– Output が Average / Inverse Distance Weighted Average のときに有効
Include Query Point .incquerypt 🎯
– Include Query Point (クエリ点を含める) — 平均計算にクエリ点 (自身) を含めるトグル
– オンにすると自己も平均に寄与し、自己ループ的なスムージング (例: 緩い色平滑化) になる
属性名と型変換 .naming 🔤
Add Prefix .addprefix 🔤
– Add Prefix (接頭辞付与) — 出力する近傍属性名に Nebr 接頭辞を付けるトグル
– 元属性と区別したいときに有効。例: 元属性 Cd に対し NebrCd として出力
Cast Integers to Floats .castintstofloats 🔢
– Cast Integers to Floats (整数→浮動小数キャスト) — 平均化時に整数属性を浮動小数として扱うトグル
– オフだと整数で平均 (端数切り捨て)、オンで連続値として補間できる
近傍属性パターン .nebrptattrs 🧩
Neighbor Point Attributes .nebrptattrs 🧩
– Neighbor Point Attributes (近傍点属性パターン) — 近傍点の属性のうち配列出力する対象をパターンで指定
– 既定 * は全属性を対象。P Cd v のように空白区切りで限定して帯域を節約可能
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 Nebr*) を指定。指定外の属性は破棄される - 用途: 下流で不要な属性を切り落として分岐ブランチを軽量化、メモリ・帯域を節約
実践アイデア 💡
Example 1: 局所密度の可視化 💠
Particle POP → Neighbor POP (Output=avg, Num Neighbors=on) → Lookup Attribute POP → Render TOP
パーティクル群の各点について Neighbor POP で近傍点数を属性化し、その値を色や半径にマッピングして局所密度を可視化する流れ。密集している点ほど近傍数が多くなり、ヒートマップ的に表現できます。
- Particle POP で動的に拡散するパーティクル点群を生成
- Neighbor POP の Neighbors Type を
distance、Max Neighbors Distance を点群スケールに合わせて設定 - Num Neighbors トグルをオンにして近傍数属性
numnebrsを出力 - 下流の Math POP / Lookup Attribute POP で近傍数を色 (Cd) や半径属性に反映
- Render TOP で密度の高い領域が強調表示されることを確認
Example 2: 属性のスムージング 🌊
Noise POP (色属性付与) → Neighbor POP (Output=weightedavg, Add Prefix=on) → Render TOP
Noise POP で各点にランダムな色属性を与え、Neighbor POP の距離重み付き平均で近傍の色を補間して点群全体を滑らかにスムージングする例。近接点ほど寄与が大きく自然なグラデーションが生成されます。
- Noise POP で点群に色属性
Cdを付与 - Neighbor POP の Output を
weightedavgに設定 - Add Prefix をオンにして元の
Cdと区別されたNebrCd属性を生成 - Max Neighbors for Average を 8〜16 に設定して平均化対象を制限
- Render TOP で滑らかなグラデーション点群を確認
Example 3: Boidsの整列計算 🐦
Particle POP (速度属性 v) → Neighbor POP (Output=avg, Neighbor Point Attributes=v) → Force Radial POP → Particle POP (フィードバック)
群集シミュレーションで各個体の進行方向を近傍個体の平均速度に揃える「整列ルール」を Neighbor POP で実装する例。Neighbor Point Attributes パターンで速度属性 v のみに絞り、帯域を節約しながら近傍速度の平均ベクトルを得ます。
- Particle POP で各個体に位置 P と速度 v を持たせる
- Neighbor POP の Output を
avg、Neighbor Point Attributes をvに限定 - Max Neighbors Distance を視野半径として設定
- 出力の
Nebrvを Force Radial POP や Math POP に渡し整列力として加算 - Feedback POP 経由でフレーム間に伝播して群集挙動として可視化
関連オペレータ 🔗
類似機能OP 🔍
- TODO
組み合わせ推奨OP 🔄
- Lookup Attribute POP — Neighbor が出力する近傍インデックス配列を使って近傍点の任意属性を引き出す典型的な後段
- Attribute POP — Neighbor で生成する元属性 (N / Cd / v 等) を事前に整える上流処理
- Particle POP — 群集挙動や局所密度推定で Neighbor と組合せる代表的な動的点群ソース
- Force Radial POP — 近傍平均ベクトルを群集シミュレーションの力として適用する下流
前処理・後処理POP 🎯
- 前処理: Grid POP、Particle POP、Noise POP、Attribute POP
- 後処理: Lookup Attribute POP、Attribute POP、Force Radial POP
Info POP情報 📊
Neighbor 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: 出力ジオメトリのプリミティブ数 (Neighbor は通常変化なし)num_point_attribs: 出力ジオメトリのポイント属性数 (近傍属性追加でカウント増加)num_vertex_attribs: 出力ジオメトリの頂点属性数num_prim_attribs: 出力ジオメトリのプリミティブ属性数gpu_memory_used: この POP が使用している GPU メモリ量 (近傍配列サイズに比例)
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 近傍が見つからず出力属性が空または 0 件になる
✅ Solution:
- Max Neighbors Distance が小さすぎないか確認 (入力点群のスケールに対し十分大きい値か)
- Neighbors Type が
connectedの場合、入力がメッシュ接続を持つジオメトリかを確認 (純粋な点群では機能しない) - Info CHOP の
num_point_attribsで近傍属性が実際に追加されているかチェック
❌ Problem: パフォーマンスが極端に遅い / フレームレート低下
✅ Solution:
- Num Hash Buckets を入力点数に近い値に調整 (デフォルトでは過剰または不足の可能性)
- Max Neighbors を必要最小限に下げて近傍配列サイズを削減
- Neighbor Point Attributes パターンを
*からvなど特定属性のみに絞り帯域を節約
❌ Problem: 平均化結果がジャンプして滑らかでない
✅ Solution:
- Output を
weightedavgに切り替え、距離重みで近接点の寄与を強める - Max Neighbors for Average を増やして平均化対象を拡大
- Cast Integers to Floats をオンにして整数属性も浮動小数として連続補間
❌ Problem: 近傍配列の順序が安定せず下流処理が乱れる
✅ Solution:
- Distribution を
closestに変更して距離順に固定 - 前段で Sort POP 等を使い入力点順を固定化
- Num Hash Buckets の値を入力点数依存で変動させないよう固定値で運用
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Neighbor POP
- POP 概要 (Points, Vertices and Primitives in POPs)
- TouchDesigner公式ドキュメント – Attribute (属性の基礎)

