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

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

Hole SOP で外形ポリゴンの内側を穴として認識する図

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

概要 📖 – 面の内側を穴にする

Hole SOPは、外形ポリゴンの内側にある面を穴として識別し、ブリッジ除去や外形平面へのスナップで整合した穴付きサーフェスを生成する SOPです。距離許容と角度許容で穴と判定する範囲を細かく設定でき、Unbridge Holes でブリッジ部分を取り除いて内部を独立させたり、Snap Holes to Outlines で浮いた頂点を外形平面にスナップしてねじれた面を防げます。

主な用途 🎯

  • 外形ポリゴンの内側にある面を「穴」として識別し、ポリゴン平面に切り抜きを表現
  • Unbridge Holes でブリッジ部分を除去し、穴の内部を外形から独立させる
  • Distance Tolerance / Angle Tolerance で穴と認識する許容範囲をチューニングし、誤判定を回避
  • Snap Holes to Outlines で浮いた穴の頂点を外形平面にスナップし、ねじれた面を防ぐ
  • Group パターンで対象プリミティブを絞り込み、複数オブジェクト中の特定面だけを穴処理
  • 看板・窓・パーフォレーション形状の生成で、平面に複数の切り抜きを 1 ノードでまとめて作成

データフロー 🔄

入力: 外形ポリゴンと内部ポリゴンを含む同一平面上の面群

Distance Tolerance / Angle Tolerance で穴判定

内部面を穴として外形にひも付け (任意で Unbridge / Snap)

出力: 穴を持つポリゴンサーフェス

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Page 📁

対象グループの指定 🎯

Group .group 🎯
Group (対象グループ) — 入力に groups (面グループ) が含まれる場合、ここにグループ名を指定するとそのグループの面だけを処理対象にします。
パターンマッチング対応 (* / [1-10] 等が使用可能)
– 通常の幾何ポリゴンを処理する場合は空欄のままで OK
– 詳細は Pattern Matching 公式ドキュメントを参照

ブリッジ除去 ✂️

Unbridge Holes .unbridge ✂️
Unbridge Holes (ブリッジ除去) — 入力に存在するブリッジ (外形と穴を繋ぐ接続線) を検出して取り除き、穴の内部を外形から独立した自由形状として残します。
– 別の方法で再接続したい場合に、まず元の穴を解除する用途で使用
– デフォルト: オフ

穴判定の許容範囲 📐

Distance Tolerance .dist 📏
Distance Tolerance (距離許容) — 外形平面と内部面の距離がこの値以内であれば穴として認識します。
– 内部面が外形と厳密に同一平面でなくても穴扱いにしたい場合は、この値を大きくする
– デフォルトの厳しい値のままだとわずかに浮いた面が穴として認識されない原因になる

Angle Tolerance .angle 📐
Angle Tolerance (角度許容) — 内部面と外形面の傾きの差がこの値以内であれば穴として認識します。
– 内部面が外形に対して若干回転していても穴扱いしたい場合は値を大きくする
– 過度に大きくすると意図しない非平行面まで穴として判定される副作用に注意

外形平面へのスナップ 🧷

Snap Holes to Outlines .snap 🧷
Snap Holes to Outlines (外形平面へのスナップ) — 回転・移動で外形 (outline) 平面から離れた穴の頂点を、外形平面の上に強制的にスナップします。
ねじれた面 (twisted faces) を防ぐのに有効
– 内部面が外形と微妙に非同一平面にある際の整合性確保に使用
– デフォルト: オフ


実践アイデア 💡

Example 1: 矩形パネルに四角穴をあける 🟦

Rectangle SOP (外形、大) + Rectangle SOP (内部、小) → Merge SOP → Hole SOP (Group は空欄) → Out SOP

同一平面上に置いた 2 つの矩形を Merge SOP で 1 入力にまとめ、Hole SOP に通して内部の小さい矩形を「穴」として認識させる基本パターンです。Hole SOP は外形と内部の面を topology 上で結びつけ、ポリゴンに切り抜きを表現します。

  1. Rectangle SOP を 2 個配置し、外形用は大きいサイズ、内部用は小さいサイズに設定 (同じ Z 平面上に揃える)
  2. 両方の Rectangle SOP を Merge SOP で 1 入力にまとめる
  3. Merge SOP の出力を Hole SOP に接続
  4. Hole SOP の Group を空欄にして全プリミティブを処理対象に
  5. Geometry Viewer で矩形の中央に穴が開いていることを確認

Example 2: 看板に円形穴を並べる 🔘

Rectangle SOP (外形) + Circle SOP × N (穴用、Copy SOP で配列) → Merge SOP → Hole SOP → Material SOP

看板やパンチングメタル風の表現で、矩形パネルに複数の円形穴を一括であける用途です。Hole SOP は単一の外形に対し複数の内部面を同時に穴として処理できるため、Copy SOP で配置した円を Merge SOP で集約してから Hole SOP に渡します。

  1. Rectangle SOP を 1 個配置して外形パネルを作成
  2. Circle SOP を 1 個配置し、Copy SOP で X / Y 方向に配列して複数の円を生成
  3. Rectangle SOP と Copy SOP の出力を Merge SOP で 1 入力にまとめる
  4. Merge SOP の出力を Hole SOP に接続し、Distance ToleranceAngle Tolerance を必要に応じて調整
  5. Material SOP / Render TOP に渡して陰影で穴の表現を確認

Example 3: 浮いた面を外形にスナップ 🧷

外形 SOP + 浮いた内部 SOP → Merge SOP → Hole SOP (Distance Tolerance 拡大 + Snap Holes to Outlines = ON) → Out SOP

モデリング過程で内部面が外形平面からわずかに浮いてしまったケースで、Distance Tolerance を緩めて穴として認識させたうえで、Snap Holes to Outlines をオンにして頂点を外形平面に整合させる用途です。これによりねじれた面 (twisted faces) を防ぎ、後段のレンダリングや Boolean 処理を破綻させずに進められます。

  1. 外形ポリゴンと、わずかに Z 方向に浮かせた内部ポリゴンを用意
  2. 両者を Merge SOP で 1 入力にまとめて Hole SOP に接続
  3. Distance Tolerance を浮いた距離より大きい値に設定して穴判定を成立させる
  4. Snap Holes to Outlines をオンに切替
  5. 出力を Geometry Viewer で確認し、内部頂点が外形平面にスナップされていることを確かめる

関連オペレータ 🔗

類似機能OP 🔍

  • Boolean SOP — CSG 演算 (Subtract) で 3D ソリッド形状から穴を抜く別アプローチ

組み合わせ推奨OP 🔄

  • Merge SOP — 外形と内部のポリゴンを 1 入力にまとめて Hole SOP に渡す前処理
  • Convert SOP — 穴処理後のサーフェスをポリゴン形式に変換して後段のレンダリング・処理に渡す
  • Facet SOP — 穴付きポリゴンの法線を再計算してシェーディングを整える
  • Group SOP — 穴処理の対象となる面グループを事前に定義 (Hole SOP の Group パラメータで参照)
  • Polypatch SOP — 穴を埋めて閉じる逆方向の処理 (Hole SOP で開けた穴を再度埋め直したい場合)

前処理・後処理SOP 🎯


Info CHOP情報 📊

Hole SOP は Info CHOP による詳細情報取得に対応しています。

ジオメトリ統計 📐

  • num_points: この SOP に含まれるポイント数
  • num_prims: この SOP に含まれるプリミティブ数
  • num_particles: この SOP に含まれるパーティクル数

GPU 転送タイミング 🎮

  • last_vbo_update_time: 別スレッドで SOP の CPU データを GPU 上のジオメトリデータに更新するのにかかった時間 (フレーム時間外)
  • last_meta_vbo_update_time: 別スレッドで metaball や NURBS のようなメタサーフェスジオメトリデータを GPU に更新するのにかかった時間 (フレーム時間外)

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始以降にこのオペレータがクックされた合計回数
  • cook_time: 直近のクック所要時間 (ミリ秒)
  • cook_frame: このオペレータが最後にクックされたフレーム番号
  • warnings: このオペレータの警告数
  • errors: このオペレータのエラー数

クック統計 ⏱️

  • total_cooks: total_cooks — プロセス開始以降にこのオペレータがクックされた合計回数
  • cook_time: cook_time — 直近のクック所要時間 (ミリ秒)
  • cook_frame: cook_frame — このオペレータが最後にクックされたフレーム番号

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

よくある問題と解決策 🔧

❌ Problem: 内部の面が穴として認識されない
✅ Solution:

  • Distance Tolerance を大きくして、外形平面からわずかに浮いた内部面も穴として認識できるようにする
  • Angle Tolerance を大きくして、外形と若干傾いた内部面も穴判定の対象に含める
  • 外形と内部のポリゴンが同一プリミティブとしてまとまっているか確認 — 前段の Merge SOP で 1 入力にまとめてから Hole SOP に渡す

❌ Problem: 穴の境界がねじれた面 (twisted faces) として表示される
✅ Solution:

  • Snap Holes to Outlines をオンにして、浮いた内部頂点を外形平面に強制的にスナップする
  • 前段の頂点位置を見直し、内部面をできるだけ外形と同一平面に揃える
  • 後段に Facet SOP を入れて法線を再計算し、シェーディングのねじれを抑える

❌ Problem: Unbridge Holes をオンにしたら穴の表現が消えた
✅ Solution:

  • Unbridge Holes はブリッジ (外形と穴を繋ぐ接続線) を取り除く処理のため、別の方法で外形と穴を再接続する必要がある
  • 再接続には Bridge SOP や手動の Add SOP を使う
  • ブリッジを取り除きたくないケース (単純に穴を開けたいだけ) では Unbridge Holes はオフのまま運用する

❌ Problem: 意図しない面まで穴として判定される
✅ Solution:

  • Angle Tolerance が大きすぎると非平行な面まで穴とみなされるため、値を厳しく (小さく) 戻す
  • Distance Tolerance も同様に値を小さくし、明確に同一平面にある面だけを対象にする
  • 前段で Group SOP を使って穴処理対象を明示的にグループ化し、Hole SOP の Group パラメータで限定する

参考資料 📚

その他 🔗

公式リソース 📖

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