
概要 📖 – 曲線同士の交点で切断する
Curvesect SOPは、2 つの face (NURBS / Bezier / Polygon の曲線・曲面) の交差点で face を切断、または交差点を独立した point geometry として抽出する SOPです。Method パラメータで Cut (交差点で face を断ち切る) と Extract (交差点を point として取り出す) を切替可能で、後段の Sweep SOP や Add 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)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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 を交差点で分解しておく前処理として機能します。
- Line SOP (または Line SOP) を 2 個作成し、それぞれ異なる軌道の曲線を生成。互いに交差する位置に配置
- Curvesect SOP の 1 番目の入力 (左) に 1 本目、2 番目の入力 (右) に 2 本目を接続
- Curvesect SOP の
MethodをCut、AffectをBoth Inputsに設定 Left Face Pieces/Right Face PiecesをKeep Allにし、Geometry Viewer で交差点を境に curve が segment に分解されることを確認Toleranceを 0.001 程度に下げて、取りこぼしのない精度に調整- 後段に 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 に流すこともできます。
- Line SOP で曲線を 1 本作成し、Curvesect SOP の入力 1 に接続
- 別途 NURBS 曲面 (例: Sphere SOP の Connectivity を NURBS に設定、または Skin SOP の出力) を生成し、Curvesect SOP の入力 2 に接続
- Curvesect SOP の
MethodをExtract、Extract Pointをpointに設定 Keep OriginalをOnにして、元 curve と抽出された point geometry が同時に出力されることを確認- 後段に 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 側のみを破線化できます。
- Line SOP または Line SOP で長い曲線を 1 本作成し、Curvesect SOP の入力 1 (左) に接続
- Line SOP を Copy SOP で複数複製し、curve に対して直交方向の cutter line 群として配置。Merge SOP でまとめてから Curvesect SOP の入力 2 (右) に接続
- Curvesect SOP の
MethodをCut、AffectをLeft Input、Left Face PiecesをKeep Odd-numbered Onesに設定 - Geometry Viewer で長い curve が一定間隔で分割され、奇数番目の segment のみが残ることを確認 (破線化)
- 後段に 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 🎯
- 前処理: Line SOP、Profile SOP、Convert SOP、Merge SOP
- 後処理: Sweep SOP、Skin SOP、Add SOP、Transform SOP、Tube SOP、Out 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 Intersectionsが On になっているか確認。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 を小さくして再計算AffectがBoth 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 以外を削除
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Curvesect SOP
- TouchDesigner公式ドキュメント – Boolean SOP (3D メッシュブール演算)
- TouchDesigner公式ドキュメント – Convert SOP
- TouchDesigner公式ドキュメント – Pattern Matching

