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

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

Surfsect SOP の曲面ブール演算と交差プロファイル生成を示す図

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

概要 📖 – 曲面同士の交差で切り抜く

Surfsect SOPは、NURBS / Bezier 曲面のグループ A と B を交差させ、和・積・差のブール演算で曲面を切り抜き、交差線を曲面上の曲線として抽出する SOPです。Operation パラメータで Union (合体) / Intersect (共通部分) / A-B (くり抜き) を切替可能で、抽出した交差プロファイルを Trim SOP に渡してトリミングする前処理として機能します。

主な用途 🎯

  • 2 つの曲面グループ (NURBS / Bezier surface) を交差させ、和・積・差のブール演算で立体を切り抜き・結合することで、有機的な曲面同士をくり抜いた造形を 1 ノードで生成
  • 交差した曲面の内側・外側どの部分を残すか (Keep Inside / Keep Outside) を A 面・B 面それぞれ個別に指定し、Union (合体) / Intersect (共通部分) / A-B (くり抜き) 等の結果を細かく制御
  • 2 つの曲面の交差線を curve-on-surface (曲面上の曲線) として抽出 (Generate Profiles)し、後段の Trim SOPProfile SOP でトリミングや輪郭抽出の入力として再利用
  • 3D 許容誤差 (3D Tolerance) と 2D 許容誤差 (2D Tolerance) を別々に調整することで、曲面交差の取りこぼしを抑えつつクック時間とのバランスを取った高精度なブーリアン処理を実現
  • 抽出した交差プロファイルを A 専用・B 専用のグループに振り分け (A Profiles Group / B Profiles Group)、片方の曲面だけにトリム境界を作る建築ファサード・プロダクト形状の切り欠きデザインに応用

データフロー 🔄

入力 1: 曲面グループ A (NURBS / Bezier surface)

入力 2: 曲面グループ B (交差相手の surface)

3D / 2D Tolerance と Marching Steps で交差線を計算

Operation (Union / Intersect / A-B / B-A / User-defined) で残す部分を決定

Generate Profiles で交差線を curve-on-surface として抽出

出力: ブール演算後の曲面、または交差プロファイル curve

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Page 📁

交差させる曲面の指定 🔍

Group A .groupa 🅰️
Group A (グループ A) — 交差処理の対象とする NURBS / Bezier 曲面のサブセットをパターン指定
– 空欄の場合は入力 1 のすべての曲面が対象
* / [0-5] 等の Pattern Matching (パターンマッチング) 記法に対応

Group B .groupb 🅱️
Group B (グループ B) — A と交差させる相手側の NURBS / Bezier 曲面のサブセットをパターン指定
– 空欄の場合は入力 2 のすべての曲面が交差相手になる
– Group A と同じ Pattern Matching 記法対応

交差計算の精度 📏

3D Tolerance .tol3d 📐
3D Tolerance (3D 許容誤差) — 交差点を求めるワールド空間 (3 次元の実座標) での精度を決定する値
– 値を小さくすると検出精度が上がる代わりにクック時間が増加
– 曲面交差の取りこぼしが発生する場合は、まずこの値を下げて再計算する

2D Tolerance .tol2d 📐
2D Tolerance (2D 許容誤差) — 曲面のドメイン (UV パラメータ空間) 上での交差精度を決定する値
– 3D Tolerance と独立して設定でき、曲面の歪みが大きい箇所での精度を補う
– 交差線が途切れる・ギザギザになる場合に調整する

Marching Steps .step 👣
Marching Steps (マーチングステップ数) — 各プロファイルの 1 区間 (span) を追跡する分割ステップ数
– 値を大きくすると交差線がより滑らかに追跡されるがクック負荷が上がる
– 複雑に湾曲した曲面交差で線が荒れる場合に増やす


Boolean Page 🔀

ブール演算の種類 .boolop 🔀

Operation (演算) — 2 つの曲面交差で残す部分を決めるブール演算を選択。User-defined (ユーザー定義) を選ぶと、下記の Keep Inside / Keep Outside パラメータで残す断片を個別指定する。

項目 内部名 説明
Union .union 2 つの曲面を合体し、重なり部分の内側を削った和集合の外殻を残す
Intersect .intersect 2 つの曲面が重なり合う共通部分のみを残す積集合
A minus B .aminusb A の曲面から B と重なる部分を切り抜く差集合 (A から B をくり抜く)
B minus A .bminusa B の曲面から A と重なる部分を切り抜く差集合 (B から A をくり抜く)
User Defined: .other 下記の Keep Inside A/B・Keep Outside A/B を個別に組み合わせ、残す断片を自由に指定

残す断片の指定 ✅

Keep Inside A .insidea 🅰️
Keep Inside A (A の内側を残す) — A の曲面のうち、B と交差した内側部分を保持
User-defined 演算時に有効化される個別指定パラメータ

Keep Inside B .insideb 🅱️
Keep Inside B (B の内側を残す) — B の曲面のうち、A と交差した内側部分を保持
User-defined 演算時に有効化される個別指定パラメータ

Keep Outside A .outsidea 🅰️
Keep Outside A (A の外側を残す) — A の曲面のうち、B と交差した外側部分を保持
User-defined 演算時に有効化される個別指定パラメータ

Keep Outside B .outsideb 🅱️
Keep Outside B (B の外側を残す) — B の曲面のうち、A と交差した外側部分を保持
User-defined 演算時に有効化される個別指定パラメータ


Generate Profiles Page 📤

出力プロファイルの対象 .target 🎯

Target (対象) — 交差線をどちらの曲面のプロファイルとして出力するかを選択。

項目 内部名 説明
A .a A 曲面上の交差線 (curve-on-surface) のみを出力
B .b B 曲面上の交差線 (curve-on-surface) のみを出力
A and B .both A と B 両方の曲面上に交差線を出力

プロファイルの振り分けと結合 🗂️

A Profiles Group .creategroupa 🅰️
A Profiles Group (A プロファイルグループ) — A 側で生成された交差プロファイルをユーザー定義のグループ名にまとめる
– 後段の Delete SOP 等でグループ単位の選別に利用

B Profiles Group .creategroupb 🅱️
B Profiles Group (B プロファイルグループ) — B 側で生成された交差プロファイルをユーザー定義のグループ名にまとめる
– A Profiles Group と組み合わせ、片側だけのトリム境界処理に活用

Avoid Already Trimmed-Out Parts .mindholes 🕳️
Avoid Already Trimmed-Out Parts (既にトリムされた部分を避ける) — 表示されている曲面部分のみを交差対象とし、既にトリムされた境界で交差プロファイルを打ち切る
– 多段トリムを重ねる際の不要な交差線生成を防ぐ

Join Profiles Created by Multiple Surfaces .join 🔗
Join Profiles Created by Multiple Surfaces (複数曲面で生成されたプロファイルを結合) — 1 つの曲面が 2 つ以上の曲面と交差し隣接プロファイルが複数できた場合に、それらを 1 本の curve-on-surface に結合
– 切れ目のない連続した交差線が欲しい場合に有効化


実践アイデア 💡

Example 1: 曲面をくり抜く ✂️

Sphere SOP (NURBS, A 入力) → Surfsect SOP (Operation=A minus B) ← Tube SOP (NURBS, B 入力) → Out SOP

Surfsect SOP の最も基本的な使い方です。2 つの NURBS 曲面 (例えば球と円柱) を左右の入力に接続し、Operation を A minus B に設定することで、A の曲面から B と重なる部分が切り抜かれた有機的な造形が得られます。ポリゴンメッシュ向けの Boolean SOP に対し、Surfsect は滑らかな NURBS / Bezier 曲面同士のブール演算を担います。

  1. Sphere SOP を作成し、Primitive Type を NURBS に設定して滑らかな球面を生成。Surfsect SOP の 1 番目の入力 (A) に接続
  2. Tube SOP を作成し、同じく NURBS に設定。球と交差する位置に配置して Surfsect SOP の 2 番目の入力 (B) に接続
  3. Surfsect SOP の OperationA minus B に設定し、球から円柱の重なり部分がくり抜かれることを確認
  4. 交差線が荒れる場合は 3D Tolerance を 0.001 程度に下げ、Marching Steps を増やして精度を上げる
  5. Geometry Viewer でブール演算後の曲面を確認し、後段に Out SOP を接続

Example 2: 共通部分を取り出す 🔵

NURBS Surface (A) → Surfsect SOP (Operation=Intersect, Target=A and B) ← NURBS Surface (B) → Skin SOP → Out SOP

Operation を Intersect に設定すると、2 つの曲面が重なり合う共通部分のみが残されます。複数の有機曲面を重ね合わせ、その積集合となるレンズ状・カプセル状の造形を作りたい場面で有効です。Generate Profiles の Target を A and B にして両側の交差線を curve-on-surface として取り出し、後段の Skin SOP で再構築する流れにも展開します。

  1. 2 つの NURBS 曲面 (例: Revolve SOP で生成した回転体) を作成し、互いに重なるよう配置
  2. Surfsect SOP の入力 1 に A、入力 2 に B を接続
  3. OperationIntersect に設定し、共通部分のみが残ることを確認
  4. TargetA and B にして両曲面上に交差プロファイルを生成
  5. 2D Tolerance を調整し、ドメイン空間で交差線が滑らかに繋がるようにする
  6. 後段に Skin SOP を接続し、抽出した交差プロファイル群から新たな曲面を再構築

Example 3: 交差線を抽出 🪢

NURBS Surface (A) → Surfsect SOP (Operation=User-defined, Target=A, Join Profiles=On) ← Cutter Surface (B) → Trim SOP → Out SOP

Surfsect はブール演算だけでなく、2 曲面の交差線そのものを曲面上の曲線 (curve-on-surface) として抽出する用途にも使えます。Generate Profiles の Target を A に絞り、Join Profiles Created by Multiple Surfaces を On にすると、A 曲面上に連続した 1 本の交差プロファイルが生成されます。これを後段の Trim SOP に渡すことで、複雑な曲面の縁を別の曲面形状に沿って切り取る建築ファサードやプロダクト形状の切り欠きデザインが実現します。

  1. 切り取り対象となる NURBS 曲面を作成し、Surfsect SOP の入力 1 (A) に接続
  2. 切り取りの基準となる cutter 曲面を作成し、入力 2 (B) に接続
  3. Surfsect SOP の OperationUser-defined にし、TargetA に設定
  4. Join Profiles Created by Multiple SurfacesOn にして、A 曲面上の交差線が 1 本の連続 curve として結合されることを確認
  5. A Profiles Group に任意のグループ名を入力し、抽出プロファイルをまとめる
  6. 後段に Trim SOP を接続し、生成した curve-on-surface を境界として A 曲面をトリミング

関連オペレータ 🔗

類似機能OP 🔍

  • Boolean SOP — 閉じた polygon メッシュ同士のブール演算を行う SOP。Surfsect の NURBS / Bezier 曲面ブーリアンに対し、Boolean は polygon 立体の和・積・差を担当
  • Curvesect SOP — 2 本の曲線・面の交差点で切断または点抽出を行う SOP。Surfsect が曲面同士の交差を扱うのに対し、Curvesect は曲線レベルの交差を扱う

組み合わせ推奨OP 🔄

  • Trim SOP — Surfsect が抽出した交差プロファイル (curve-on-surface) を境界として曲面をトリミングする後処理
  • Profile SOP — Surfsect で生成した曲面上のプロファイル curve を編集・抽出し、トリム形状を整える
  • Convert SOP — ブール演算後の NURBS / Bezier 曲面を polygon 化、あるいは入力曲面を Surfsect が扱える surface 形式に揃える前処理
  • Skin SOP — 抽出した交差プロファイル curve 群を skin して曲面を再構築する後処理

前処理・後処理SOP 🎯


Info CHOP情報 📊

Surfsect 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 — プロセス開始以降に Surfsect SOP がクックされた累計回数。Tolerance を細かく下げてリアルタイム再計算する場合の負荷監視に使用
  • cook_time: cook_time — 直近クックの所要時間 (ミリ秒)。複数の NURBS / Bezier 曲面を交差させる場合は値が急増しやすく、ボトルネック検出の指標となる
  • cook_frame: cook_frame — Surfsect SOP が最後にクックされたフレーム番号。クックが期待通り走っているかの確認に使用

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

よくある問題と解決策 🔧

❌ Problem: 交差が検出されない / ブール演算の結果が欠ける
✅ Solution:

  • 3D Tolerance の値を 0.01 → 0.001 → 0.0001 と段階的に下げる。NURBS / Bezier 曲面の交差では浮動小数誤差により取りこぼしが発生しやすいため、まずワールド空間の精度を再調整するのが定石
  • 2D Tolerance も併せて下げ、ドメイン (UV) 空間での交差精度を補う。曲面の歪みが大きい箇所で効果がある
  • 入力曲面が polygon の場合は Surfsect の対象外のため、前段に Convert SOP を入れて NURBS / Bezier surface に変換する

❌ Problem: 交差線 (プロファイル) がギザギザ・途切れる
✅ Solution:

  • Marching Steps の値を増やす。各プロファイル区間の追跡分割数が増え、湾曲した交差線が滑らかに追跡される
  • Join Profiles Created by Multiple SurfacesOn にして、複数曲面の交差で分断された隣接プロファイルを 1 本の連続 curve に結合
  • 2D Tolerance を下げてドメイン空間の精度を上げ、交差線の途切れを抑える

❌ Problem: ブール演算で残る部分が想定と逆になる
✅ Solution:

  • OperationA minus BB minus A で入れ替えてみる。A と B のどちらを基準にくり抜くかで結果が反転する
  • 細かく制御したい場合は OperationUser-defined にし、Keep Inside A / Keep Inside B / Keep Outside A / Keep Outside B を個別に切替えて残す断片を指定
  • 入力 1 (A) と入力 2 (B) の接続順を確認。曲面グループの A / B が逆だと演算結果も逆になる

❌ Problem: クックが重い / リアルタイム再計算が遅い
✅ Solution:

  • 3D Tolerance を必要十分な範囲で大きめに保つ。許容誤差を過度に下げるとクック時間が指数的に増えるため、見た目が破綻しない最大値を探る
  • Group A / Group B で交差対象の曲面を必要なものだけに絞り、不要な surface を交差計算から除外
  • 前段で Convert SOP を使って曲面の制御点数を削減し、交差計算の負荷を軽くする

参考資料 📚

その他 🔗

公式リソース 📖

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