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

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

Facet POP のポイント統合とカスプ処理機能を示す図

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

概要 📖 – ポイント共有・カスプ・統合によるジオメトリ整理

Facet POPは、入力ジオメトリのポイント共有関係を整理し、ユニーク化・カスプ化・統合のいずれかを GPU 上で適用する POPです。Operation で 3 種類の整理モードと無操作を切替え、Consolidate Points では Brute Force / Shared Memory / Spatial Grid / Spatial Grid Per Voxel の 4 種類の統合 Technique を選択できます。

主な用途 🎯

  • 同一座標に重なった重複ポイントを統合してジオメトリのトポロジを整理 (Consolidate Points)
  • 面と面の角度しきい値でエッジを共有/分離させてハードエッジ・ソフトエッジを作り分け (Cusp Polygons)
  • 頂点参照のみで実質的に同一なポイントをユニーク化して属性編集の独立性を確保 (Unique Points)
  • 生成系 POP やインポートメッシュの後段で退化プリミティブと未使用ポイントを掃除してクリーンアップ
  • シェーディング時の法線連続性をしきい値ベースで制御して立体感とフラット表現を切替

データフロー 🔄

入力: ポリゴンジオメトリ (重複ポイント・共有エッジを持つ可能性)

Operation 選択 (none / unique / cusp / conspoints) + Technique 設定

出力: ポイント共有関係が整理されたジオメトリ

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Facet Page 📋

Group .group 🏷️

処理対象とする入力グループの絞り込み:

  • Group パターン: 入力にグループが存在する場合、ここで指定したグループ名にマッチするポイント・プリミティブのみが Facet 処理の対象となる
  • 空欄時の挙動: 未指定時は入力ジオメトリ全体に対して処理を適用

Operation .operation 🎛️

Facet POP が実行する整理操作の種類を決定するメニューパラメータ

項目 内部名 説明
No Operation .none 整理操作を実行せず入力をそのままパススルー (Remove Degenerate / Remove Unused Points のみ適用したい場合に使用)
Unique Points .unique プリミティブ間で共有されているポイントを各プリミティブごとに独立した新規ポイントとして複製し、頂点参照をユニーク化
Cusp Polygons .cusp 隣接面の法線角度が Angle しきい値を超えるエッジ上のポイントを分離してハードエッジを生成 (シェーディング不連続化)
Consolidate Points .conspoints Distance しきい値以内に存在する近接ポイントを 1 点に統合してジオメトリのトポロジを整理

カスプ / 統合のしきい値 📐

Angle .angle 📐
– 隣接面の法線がなす角度のしきい値 (度単位)、これを超える共有エッジの頂点はポイントを共有しない
Cusp Polygons モードでのみ有効、値を小さくするとハードエッジが増え、大きくするとスムーズシェーディング寄りになる

Distance .dist 📏
– ポイント統合時に同一とみなす最大距離 (ワールド空間)
Consolidate Points モードでのみ有効、小さい値で厳密一致、大きい値で許容範囲を広げて積極的に統合

Max Tries .maxtries 🔁
– 統合対象ポイントが既に他のポイントへ統合済の場合に、次の候補を探す最大反復回数
– 連鎖統合が深い大規模ジオメトリで値を増やすと取りこぼしが減る

クリーンアップ 🧹

Remove Degenerate .removedegenerate 🗑️
– 連続する頂点が同一ポイントを参照するプリミティブ (退化プリミティブ) を削除
– 統合後にゼロ面積三角形・ゼロ長線分が発生したケースの後処理として有効

Remove Unused Points .removeunusedpoints 🧽
– どのプリミティブからも参照されていない未使用ポイントを削除してポイント配列を圧縮
Unique Points / Consolidate Points 適用後の孤立ポイントを掃除する用途に使う

Technique .technique ⚙️

Consolidate Points 実行時のポイント統合アルゴリズムを選択するメニューパラメータ

項目 内部名 説明
Brute Force .bruteforce 全ポイント組み合わせを総当たりで比較する最も正確だが計算量 O(N^2) の手法 (小規模ジオメトリ向け)
Shared Memory .sharedmemory GPU の共有メモリを活用して比較を並列化する手法 (中規模ジオメトリ向けの精度と速度のバランス)
Spatial Grid .spatialgrid 空間を一様グリッドに分割し近傍ポイントのみを比較する高速手法 (大規模ジオメトリ向け)
Spatial Grid Per Voxel .spatialgridpervoxel ボクセル単位でグリッドを構築して局所統合を行う手法、Voxels Grid Resolution + Bounding Box と組み合わせて使用

ボクセルグリッド設定 🧊

Voxels Grid Resolution .gridres 🧊
Spatial Grid Per Voxel 手法で使用するボクセルグリッドの解像度 (XYZ)
– 値を上げると統合精度は向上するが GPU メモリ消費が増加

Specify Bounding Box .specifybbox
Spatial Grid 系手法で統合範囲となるバウンディングボックスを明示指定するかを切替
– オフ時は入力ジオメトリの bbox を自動使用、オン時は bbox パラメータで参照 SOP を指定

Bounding Box .bbox 📦
Specify Bounding Box がオンのときに参照するバウンディングボックス SOP のパス
– 特定領域内のポイントのみを統合対象にしたい場合に使用

後処理オプション 🔧

Compute Point Normals .computenormals 🧭
– 整理操作後にポイント法線 (N) を後処理として再計算
Cusp Polygons / Consolidate Points でトポロジが変化した後のシェーディング整合に必須

Copy Topology Info Back to CPU .cpureadback 💾
– GPU 上のポイント数とトポロジ情報を CPU 側へコピーバックして読み出せるようにする
Info CHOP 等から num_points / num_prims を参照したい場合にオン


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: インポートメッシュの重複ポイント統合 🧱

Alembic In POP → Facet POP (Operation=conspoints, Technique=spatialgrid, dist=0.001) → Render TOP

外部 DCC からインポートしたジオメトリでは座標は同一でも別ポイントとして格納されていることが多く、そのままだと法線分割やシェーディングが意図せず分断される。Facet POP の Consolidate Points で微小距離内のポイントを 1 点に統合し、シームレスなサーフェスとして扱える状態に整える基本フロー。

  1. Alembic In POP でメッシュを読み込み
  2. Facet POP の Operation を conspoints に設定
  3. Technique を spatialgrid、Distance を 0.001 程度に設定
  4. Compute Point Normals をオンにして統合後の法線を再計算
  5. Render TOP に接続して継ぎ目が消えていることを確認

Example 2: ハードエッジ生成によるロウポリ表現 💎

Box POP → Facet POP (Operation=cusp, angle=30) → Render TOP

デフォルトでスムーズシェーディングされるジオメトリに対して Facet POP の Cusp Polygons を適用し、Angle しきい値を超える鋭角エッジでポイントを分離することで、ロウポリゴン風のシャープな面表現を作るフロー。

  1. Box POP で立方体ジオメトリを生成
  2. Facet POP の Operation を cusp に設定
  3. Angle を 30 度程度に設定 (値を下げるとよりシャープに、上げると丸みが増す)
  4. Compute Point Normals をオンにしてカスプ後の法線を再計算
  5. Render TOP で面の境界がハードエッジとして見えることを確認

Example 3: 生成系 POP の後段クリーンアップ 🧹

Convert POP → Facet POP (Operation=conspoints, Remove Degenerate=on, Remove Unused Points=on) → POP to SOP

Convert POP やプロシージャル生成で構築したジオメトリには、退化プリミティブや孤立ポイントが残ることがある。Facet POP の Consolidate Points + Remove Degenerate + Remove Unused Points を同時に適用し、後段の処理が安全に動作する状態に整えるクリーンアップフロー。

  1. Convert POP 等の生成系 POP の直後に Facet POP を接続
  2. Operation を conspoints に設定して重複ポイントを統合
  3. Remove Degenerate と Remove Unused Points を両方オンに
  4. Distance を入力ジオメトリのスケールに合わせて調整
  5. POP to SOP 等の後段に流して問題なくジオメトリが扱えることを確認

関連オペレータ 🔗

類似機能OP 🔍

  • Convert POP — プリミティブタイプの変換を行う POP。Facet が「ポイント共有関係を整える」のに対し Convert は「プリミティブ表現そのものの変換」

組み合わせ推奨OP 🔄

  • Attribute POP — Facet 適用後に法線 (N) や色 (Cd) を再計算・編集
  • Transform POP — Facet 後のジオメトリ全体を移動・回転・スケールして配置
  • POP to SOP — 整理済みジオメトリを SOP ワークフローに渡して後段処理を継続

前処理・後処理POP 🎯


Info POP情報 📊

Facet 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: 整理操作後のポイント数 (Consolidate Points / Unique Points の効果確認に使用)
  • num_prims: 出力プリミティブ数 (Remove Degenerate の効果確認に使用)
  • num_point_attribs: 出力ジオメトリのポイント属性数
  • num_vertex_attribs: 出力ジオメトリの頂点属性数
  • num_prim_attribs: 出力ジオメトリのプリミティブ属性数
  • gpu_memory_used: この POP が使用している GPU メモリ量

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: Consolidate Points を実行してもポイント数が減らない
✅ Solution:

  • Distance パラメータが入力ジオメトリのスケールに対して小さすぎないか確認 (オブジェクトのスケールに対して 0.001〜0.01 程度から試す)
  • Operation が conspoints になっているか確認 (none / unique では統合が行われない)
  • Technique を bruteforce に切り替えて取りこぼしが原因か検証、その後 Max Tries を増やして連鎖統合を強化

❌ Problem: Cusp Polygons を適用してもシェーディングがスムーズなまま
✅ Solution:

  • Compute Point Normals がオンになっているか確認 (オフだと統合前の法線が残りカスプ効果が見えない)
  • Angle パラメータが大きすぎないか確認 (90 度等にすると大半のエッジが共有のまま残る、30 度前後から試す)
  • 前段で既に共有ポイントが分離されている場合は unique モードで一度ユニーク化してから cusp を適用

❌ Problem: Spatial Grid Per Voxel で意図しない領域のポイントが統合される
✅ Solution:

  • Specify Bounding Box をオンにして bbox パラメータに参照 SOP を指定し、統合対象領域を明示的に制限
  • Voxels Grid Resolution を上げてボクセルセルのサイズを小さくし、誤統合を抑制
  • Distance を小さくして同一ボクセル内でも距離しきい値で除外するよう調整

❌ Problem: 整理後に Info CHOP で num_points / num_prims が更新されない
✅ Solution:

  • Copy Topology Info Back to CPU をオンにして GPU から CPU へトポロジ情報をコピーバック
  • 下流の Info CHOP が Facet POP の出力を直接参照しているか確認
  • GPU の処理完了待ちで遅延が生じることがあるため、後段で 1 フレーム遅延を許容するパイプライン構成を検討

参考資料 📚

その他 🔗

公式リソース 📖

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