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

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

Curvesect SOP の Cut / Extract モードによる face 切断と交点抽出を示す図

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

概要 📖 – 曲線同士の交点で切断する

Curvesect SOPは、2 つの face (NURBS / Bezier / Polygon の曲線・曲面) の交差点で face を切断、または交差点を独立した point geometry として抽出する SOPです。Method パラメータで Cut (交差点で face を断ち切る) と Extract (交差点を point として取り出す) を切替可能で、後段の Sweep SOPAdd SOP に segment / point として流す前処理として機能します。

主な用途 🎯

  • 2 本の face (NURBS / Bezier / polygon カーブや面) の交差点で face を切断 (Cut method) し、独立した segment 列に分解することで、後段の Sweep / Skin / Tube SOP に部分パスとして渡せる形に整える
  • 交差点を独立した point geometry として抽出 (Extract method) し、Add SOP / Material SOP 等でマーカー・ジョイント表現や CNC 切削パスの control point として再利用
  • NURBS / Bezier 曲面と curve の交差で isoparm を抽出 (Extract Point = isoparm) することで、曲面上の等値線を curve として取り出し、後段の Sweep / Skin の path 入力に流用
  • Left Face Pieces / Right Face Pieces の Keep Odd / Keep Even / Keep None による face 断片の間引きで、長い curve を一定間隔で切断した dashed line・mark line・パンチカット形状を 1 ノードで生成
  • Affect (Left / Right / Both Inputs) で対象入力を選択した分岐処理により、左の curve のみ・右の cutter のみ・両方を同時に切断するパターンを使い分け、3D タイポグラフィ・ロゴ刻印・パターン生成等の差異制御を実現

データフロー 🔄

入力 1 (左): face (NURBS / Bezier / polygon)

入力 2 (右): face または spline surface (cutter)

Find All Intersections + Tolerance で交差点を計算

Method (Cut / Extract) で処理を選択

Left / Right Face Pieces で残す断片を指定、Affect で対象入力を選択

出力: 切断された face の集合 (Cut) または交差点の point geometry (Extract)

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Curvesect Page 📁

入力 face / cutter の絞り込み 🔍

Face Group .leftgroup 🅰️
– 入力 1 (左) から、Curvesect の対象とする face (NURBS / Bezier / polygon) の サブセットをパターン指定
– 空欄の場合は入力 1 のすべての face が対象
* / [0-5] 等の Pattern Matching 記法に対応

Cutter Group .rightgroup 🅱️
– 入力 2 (右) から、cutter として使う face または spline surface の サブセットをパターン指定
– 空欄の場合は入力 2 のすべての primitive が cutter として扱われる
– Face Group と同じ Pattern Matching 記法対応

交差点検出の挙動 🎯

Find All Intersections .xsect
– 有効: face と cutter primitive が触れているすべての交差点を計算 (複数回交差する場合も全点取得)
– 無効: 最小距離の 1 点のみを求める (curve 同士の最接近点取得用途)
– デフォルト: 有効

Tolerance .tolerance 📏
– 交差点計算の精度を決定する float 値
– 値を小さくすると検出精度が上がる代わりにクック時間が増加
– NURBS / Bezier 曲面の交差で取りこぼしが発生する場合は、まず Tolerance を下げて再検出する

処理モード (Cut / Extract) .method 🔄

Curvesect の処理方式を Cut (切断) と Extract (抽出) から選択

項目 内部名 説明
Cut .cut 交差点で face を切断し、複数の face segment に分解。Left Face Pieces / Right Face Pieces / Affect の組み合わせで、どの入力のどの断片を残すかを制御
Extract .extract 交差点を独立した point geometry として抽出 (cutter が surface の場合は Extract Point で point / isoparm を選択)。Keep Original で元 face を維持するか否かを切替

左入力 face piece の残し方 .left 🅰️

Cut モード時、入力 1 (左) の face を切断した後にどの segment を残すか

項目 内部名 説明
Keep All .lkeepall 交差で生成されたすべての face segment を保持
Keep Odd-numbered Ones .lkeepodd 奇数番目の segment (1, 3, 5…) のみを保持 (dashed line 生成等)
Keep Even-numbered Ones .lkeepeven 偶数番目の segment (0, 2, 4…) のみを保持
Keep None .lkeepnone 左 face を完全に削除 (右 face 側のみ残したい場合に使用)

右入力 face piece の残し方 .right 🅱️

Cut モード時、入力 2 (右) の face を切断した後にどの segment を残すか

項目 内部名 説明
Keep All .rkeepall 交差で生成されたすべての face segment を保持
Keep Odd-numbered Ones .rkeepodd 奇数番目の segment (1, 3, 5…) のみを保持
Keep Even-numbered Ones .rkeepeven 偶数番目の segment (0, 2, 4…) のみを保持
Keep None .rkeepnone 右 face を完全に削除

Affect (対象入力の選択) .affect 🎚️

Cut / Extract をどちらの入力に対して適用するかを切替

項目 内部名 説明
Left Input .left 入力 1 (左) の face のみを処理対象とする (Extract モード時は左 face から交差点を抽出)
Right Input .right 入力 2 (右) の face / surface のみを処理対象とする
Both Inputs .both 左右両方の入力を同時に処理 (両側の curve / face を交差点で切断するパターン)

Extract モード時のオプション 📤

Extract Point .extractpt 🎯
– 右入力が surface の場合: 交差結果を point (点) として取り出すか isoparm (等値線 curve) として取り出すかを選択
– 右入力が face (curve / polygon) の場合: point のみが抽出される (isoparm は surface 専用)
– point geometry を Add SOP のマーカーや CNC パスの control point に流す場合は point、後段の Sweep SOP に等値線として流す場合は isoparm を選択

Keep Original .keeporiginal 📦
– Extract モード時に有効化すると、抽出された point / isoparm と一緒に元の face (入力 1) を保持
– OFF の場合は交差点 / isoparm のみが出力される
– 抽出した point に curve を重ねて可視化したい場合は ON、純粋に point cloud だけが欲しい場合は OFF


実践アイデア 💡

Example 1: 2本のNURBS交点で線を切断 ✂️

Line SOP × 2 (異なる方向の curve) → Curvesect SOP (Method=Cut, Affect=Both Inputs, Left/Right Face Pieces=Keep All) → Out SOP

Cut モードの最も基本的な使い方です。2 本の独立した NURBS カーブを Curvesect SOP の左右入力に接続し、Affect を Both Inputs に設定することで、交差点で両方の curve が切断され、独立した segment 列として出力されます。後段で Sweep SOP の path に流したい場面で、長い 1 本の curve を交差点で分解しておく前処理として機能します。

  1. Line SOP (または Line SOP) を 2 個作成し、それぞれ異なる軌道の曲線を生成。互いに交差する位置に配置
  2. Curvesect SOP の 1 番目の入力 (左) に 1 本目、2 番目の入力 (右) に 2 本目を接続
  3. Curvesect SOP の MethodCutAffectBoth Inputs に設定
  4. Left Face Pieces / Right Face PiecesKeep All にし、Geometry Viewer で交差点を境に curve が segment に分解されることを確認
  5. Tolerance を 0.001 程度に下げて、取りこぼしのない精度に調整
  6. 後段に Sweep SOP を接続し、得られた segment を path 入力として活用

Example 2: 曲面と曲線の交点を点で抽出 📍

Line SOP (curve, A 入力) → Curvesect SOP (Method=Extract, Extract Point=point, Keep Original=On) ← NURBS Surface (B 入力) → Add SOP (point マーカー) → Out SOP

Extract モードは交差点を独立した point geometry として取り出すモードです。curve と曲面の交差点を、CNC 切削パスの control point やジョイントマーカーとして使いたい場合に有効です。Keep Original を ON にすると元 curve と point が同時に出力されるため、可視化やデバッグに便利です。Extract Point を isoparm に切替えると、曲面上の等値線 curve を取り出して後段の Sweep / Skin に流すこともできます。

  1. Line SOP で曲線を 1 本作成し、Curvesect SOP の入力 1 に接続
  2. 別途 NURBS 曲面 (例: Sphere SOP の Connectivity を NURBS に設定、または Skin SOP の出力) を生成し、Curvesect SOP の入力 2 に接続
  3. Curvesect SOP の MethodExtractExtract Pointpoint に設定
  4. Keep OriginalOn にして、元 curve と抽出された point geometry が同時に出力されることを確認
  5. 後段に Add SOP を接続し、抽出 point に対し可視化用の小さな Sphere をインスタンス化して交差点を視覚的に確認

Example 3: Keep Oddで破線パターンを生成 ➿

Line SOP (長い曲線, A) → Curvesect SOP (Method=Cut, Left Face Pieces=Keep Odd-numbered Ones, Affect=Left Input) ← Line SOP × N (一定間隔の cutter, B) → Tube SOP → Out SOP

Left Face Pieces の Keep Odd-numbered Ones / Keep Even-numbered Ones を使うと、長い curve を等間隔の cutter で切断し、奇数 (または偶数) 番目の segment だけを残すことで dashed line (破線) パターンを 1 ノードで構築できます。地図や建築図面の境界線表現、ロゴ刻印の点線、プロッタ用の破線 stroke 等の生成に向きます。Affect を Left Input に絞ることで cutter 側 (Line SOP 群) は出力に含めず、curve 側のみを破線化できます。

  1. Line SOP または Line SOP で長い曲線を 1 本作成し、Curvesect SOP の入力 1 (左) に接続
  2. Line SOP を Copy SOP で複数複製し、curve に対して直交方向の cutter line 群として配置。Merge SOP でまとめてから Curvesect SOP の入力 2 (右) に接続
  3. Curvesect SOP の MethodCutAffectLeft InputLeft Face PiecesKeep Odd-numbered Ones に設定
  4. Geometry Viewer で長い curve が一定間隔で分割され、奇数番目の segment のみが残ることを確認 (破線化)
  5. 後段に Tube SOP を接続し、各 segment を太さのある破線 stroke として可視化

関連オペレータ 🔗

類似機能OP 🔍

  • Boolean SOP — 閉じた polygon メッシュ同士のブール演算 (Union / Intersect / minus / Edge) を行う SOP。Curvesect の curve 切断に対し、Boolean は 3D 立体の切断

組み合わせ推奨OP 🔄

  • Sweep SOP — Cut モードで分解された curve segment を path 入力として受け取り、断面 cross section を sweep して立体化
  • Add SOP — Extract モードで取り出された point geometry にポリゴン / point を追加し、マーカー表示やジョイント表現に再利用
  • Convert SOP — NURBS / Bezier 入力を polygon 化、あるいは polygon を spline 化して Curvesect が扱える形式に揃える前処理
  • Skin SOP — Extract Point=isoparm で取り出した等値線 curve 群を skin して、曲面を再構築する後処理パターン
  • Copy SOP — Line SOP / Circle SOP 等の cutter primitive を等間隔で複製し、破線 / 等分割パターンの cutter 群を生成

前処理・後処理SOP 🎯


Info CHOP情報 📊

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

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

よくある問題と解決策 🔧

❌ Problem: 交差点が検出されない / 出力が想定より少ない
✅ Solution:

  • Tolerance の値を 0.01 → 0.001 → 0.0001 と段階的に下げる。NURBS / Bezier 曲面と curve の交差では浮動小数誤差により取りこぼしが発生しやすいため、まず精度パラメータを再調整するのが定石
  • Find All IntersectionsOn になっているか確認。Off の状態では最小距離 1 点しか取れないため、複数交差を取りたい場合は必ず On にする
  • 入力 face / cutter が NURBS / Bezier の場合、前段に Convert SOP を入れて polygon 化することで精度が安定するケースがある

❌ Problem: Find All Intersections=Off で face と surface の最小距離が取れない
✅ Solution:

  • face と surface の最小距離計算は現状サポートされていない仕様。cutter 側 (入力 2) を surface ではなく Convert SOP で face (curve / polygon) に変換してから接続
  • 曲面の等値線が必要な用途であれば、Method=Extract + Extract Point=isoparm に切替えて isoparm curve を取り出してから最小距離計算を別途行うアプローチに変更
  • 最小距離点が 1 点で足りる用途なら、左右両入力を curve (Line SOP / Line SOP) に揃えて Find All Intersections=Off で実行

❌ Problem: Cut モードで face piece の数や順序が想定と違う / Keep Odd/Even の結果が安定しない
✅ Solution:

  • cutter 側の primitive 順序が結果の segment 番号付けに影響するため、Merge SOP で cutter をまとめる際の入力順を固定するか、Sort SOP で並びを明示的に揃える
  • Tolerance が大きすぎると本来別々の交差点が同一視されて segment 数が減るため、Tolerance を小さくして再計算
  • AffectBoth Inputs になっていると右側の cutter も同時に切断されて出力に混ざるため、curve 側だけを処理したい場合は Left Input に絞る

❌ Problem: Extract モードで face / curve も出てしまい point だけが欲しい
✅ Solution:

  • Keep Original を Off に設定することで、元 face / curve を出力から除外し、抽出された point geometry のみを残す
  • Extract Point が isoparm になっていると curve が出力されるため、純粋に点だけが欲しい場合は point に切替
  • それでも余分な primitive が混ざる場合は、後段に Delete SOP を接続し、Primitive Type フィルタで point 以外を削除

参考資料 📚

その他 🔗

公式リソース 📖

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