
概要 📖 – 曲線や面の間に曲面を張る
Bridge SOPは、プロファイル曲線・面の間を NURBS / Bezier の skin surface で接続し、サーフェス間のフィレットや滑らかな遷移面を生成する SOPです。Circular Arc Fillet オプションで円弧型フィレットを自動生成でき、Tangent Scale や Curvature Scale で接続部の膨らみと遷移の滑らかさを細かく制御できます。
主な用途 🎯
- NURBS プロファイル曲線・面間の skin (補間サーフェス) 生成で、開いたプロファイル群をまたぐ滑らかな NURBS サーフェスを 1 ノードで構築
- サーフェス間のフィレット (角取り) 生成で、複数の独立した NURBS サーフェスを滑らかに接続する遷移面を作成
- Circular Arc Fillet モードによる円弧型フィレットで、Tangent Scale の符号のみを参照し半径を自動算出した round fillet を生成
- Tangent / Curvature 制御による接続滑らかさのチューニングで、接線の回転・拡縮・曲率スケールを個別に調整し遷移面の膨らみを制御
- サーフェス上の曲線 (Curves on Surface) に対する skin 補間で、Group パターン (例:
*.0) でプリミティブ内の N 番目のプロファイルを束ねて bridge - spline order の指定によるサーフェス品質制御で、Order パラメータで補間サーフェスとプロファイル抽出の両方の次数を統一
データフロー 🔄
入力: 2 個以上のプロファイル曲線または face を含む NURBS / Bezier プリミティブ
↓
Profile Extraction Page で 2D fitting (Divisions per Span / Tolerance / Preserve Sharp Corners) を行いプロファイルを抽出
↓
Surface Properties Page で skin 生成パラメータ (Order / Min X-Sections / Tangent / Curvature) を設定
↓
出力: 入力プロファイルを補間する NURBS skin surface
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Page 📁
Bridge 対象プロファイルの指定 🎯
Group .group 🎯
– bridge する profile group / face を指定する Pattern 文字列
– 通常の幾何曲線・面の場合は省略可能だが、profile curves に対して動作させたい場合は必ず指定が必要
– 例: *.0 は全入力プリミティブの 0 番目 (最初の) プロファイルを bridge
– curves on surface を bridge したい場合は必ず指定すること (未指定の場合は free-floating 曲線として処理される)
Bridge モード切替 🔄
プリミティブのサブグループまたはパターンに対する bridge モードを切替。
| 項目 | 内部名 | 説明 |
|---|---|---|
. |
全入力プリミティブを 1 つの skin surface に bridge | |
. |
N パラメータで指定した数のプリミティブ単位で bridge を繰り返す |
bridge 単位サイズと spline 次数 🧮
N .inc 🔢
– Bridge が Groups of N Primitives のときに使用する bridge 単位のプリミティブ数
– N=2 なら 2 プリミティブごとに 1 つの skin を生成、N=3 なら 3 プリミティブごと、というように繰り返しパターンを決定
Order .order 🧮
– プロファイル抽出と skin 生成の両方に適用される spline 次数 (order)
– 大きいほど滑らかな曲面になる一方、内部の控制点が増えて計算負荷も上がる
– 一般的に 3 (キュービック) ~ 4 が標準
Surface Properties Page 📁
skin サーフェス密度 📏
Min X-Sections .isodivs 📏
– 生成される skin サーフェスにおける cross-section (横断面) の最小数
– 高密度なサーフェスを生成すると Viewport の表示 LOD が実態より粗く見えることがあり、その場合は viewdisplay オプション (例: viewdisplay -l 1.5 SOPmain.persp1) で表示精度を上げる
– 過剰に複雑なサーフェスが生成された場合は、後段に Refine SOP を入れて Unrefine オプション (U を Bridge の Order 付近に設定) で複雑度を低減できる
方向ベクトルの種類 🧭
skin 生成時に方向計算に使う法線の種類を指定。
| 項目 | 内部名 | 説明 |
|---|---|---|
. |
曲線上のローカル座標系 (Frenet Frame) を用いて方向を計算 | |
. |
face の法線ベクトルを方向計算に使用 |
フィレット形状の選択 ⭕
Circular Arc Fillet .circular ⭕
– オンにすると free-form フィレットではなく round (円弧型) フィレットを生成
– Tangent Scale の 符号 (正負) のみが参照され、scale の大きさは無視される
– フィレット半径は rails (曲線・プロファイル) 間の距離と接線から自動算出
接線 (Tangent) の制御 🎚️
Rotate Tangents .rotatet 🔁
– 接線に対して追加で適用する回転角度 (degrees) を XYZ の 3 フィールドで指定
– 接続部のフィレット形状を歪ませる用途に使うため、通常は 0 のままにしておく方が無難
Scale Tangents .scalet 📐
– 接線に対して追加で適用する拡縮を XYZ の 3 フィールドで指定
– 大きい値ほど接続部の膨らみが強くなり、小さい (0 寄り) ほど直線的な接続になる
曲率 (Curvature) の制御 📈
Use Curvature .curvature 📈
– オンにすると skin 生成時に rails の曲率も考慮対象に含める
– 滑らかさを優先する場面で有効化、シャープな遷移を狙う場合はオフ
Scale Curvatures .scalec 📊
– 曲率に対して追加で適用する拡縮を XYZ の 3 フィールドで指定
– 生成された skin が過剰に膨らむ場合は Preserve Tangent / Preserve Curvature Magnitude を無効化した上で本パラメータと Scale Tangents を手動調整する
Profile Extraction Page 📁
2D fitting の精度設定 🎯
Divisions per Span .sdivs 🔢
– プロファイル抽出時に各 span (区間) で評価する 2D ポイント数
– 大きいほど精密にフィットするが計算負荷も上がる
Tolerance .tolerance 📐
– 2D fitting アルゴリズムの許容誤差
– 小さい値ほど厳密にフィットし、大きい値ほど許容を緩めて簡素な近似になる
シャープコーナーの扱い 🔺
Preserve Sharp Corners .csharp 🔺
– オンにすると鋭角な折れ曲がりも fitting 対象として保持
– skin にひび割れ (cracks) が出る場合の有効な解決策
– 一方でノット (knot) が追加されるため 意図しない波打ち (ripples) の原因になることもある
– オフにすると isoparm は減るが、プロファイル曲線が Preserve Sharp Corners オプションで作られていない場合、サーフェスがプロファイルの contour に完全には追従しなくなる可能性がある
実践アイデア 💡
Example 1: 2 つの円プロファイル間で滑らかなチューブ状 skin を生成 🛢️
Circle SOP × 2 (異なる位置・半径) → Merge SOP → Bridge SOP (Bridge=All Primitives, Order=3) → Out SOP
上下に配置した 2 つの円プロファイルを 1 つの NURBS skin surface で接続し、チューブ状のサーフェスを生成する基本パターンです。Bridge SOP は同種の (open / closed) プロファイル同士を skin で接続するため、まず Merge SOP で 1 入力にまとめてから Bridge SOP に渡します。
- Circle SOP を 2 個作成し、それぞれ
Center Yを0と5に設定して上下に配置 - 両 Circle SOP を Merge SOP で 1 入力にまとめる
- Merge SOP の出力を Bridge SOP に接続
- Bridge SOP の
BridgeをAll Primitivesに設定 (Group は空欄) Orderを3(キュービック) に設定し、Geometry Viewer で滑らかなチューブが生成されることを確認
Example 2: Circular Arc Fillet で曲面間に円弧フィレット 📐
Sphere SOP + Box SOP → 各々のエッジを Carve SOP / Profile SOP で抽出 → Merge SOP → Bridge SOP (Circular Arc Fillet=ON, Scale Tangents の符号で半径方向を制御) → Material SOP
2 つの独立した NURBS サーフェスの境界曲線を抽出し、Bridge SOP で滑らかな円弧フィレットを生成して接続する用途です。Circular Arc Fillet をオンにすると Scale Tangents は符号のみが参照され、半径は rails 間の距離から自動算出されるため、CAD 的な round fillet を最小設定で作れます。
- Sphere SOP と Box SOP を配置し、フィレットしたいエッジ曲線を Profile SOP または Carve SOP で抽出
- 抽出した 2 本の境界曲線を Merge SOP で 1 入力にまとめる
- Merge SOP の出力を Bridge SOP に接続
Circular Arc Filletをオンに切替Scale TangentsX / Y / Z の 符号でフィレットがどちら側に膨らむかを制御 (大きさは無視される)- 結果サーフェスを Material SOP / Render TOP に渡して陰影で確認
Example 3: Group パターンで複数プロファイルを bridge 🧩
複数 NURBS プリミティブ (各々に複数 profile を含む) → Bridge SOP (Group=*.0, Bridge=All Primitives) → Out SOP
各プリミティブ内に複数のプロファイル曲線が含まれている場合に、*.0 のように Pattern を指定して全プリミティブの 0 番目 (最初の) プロファイルだけを束ねて bridge するパターンです。curves on surface を扱う際は必ず Group 指定が必要なため、その典型ユースケースとしても押さえておきます。
- 各々に複数 profile curve を持つ NURBS プリミティブを準備
- Bridge SOP の
Groupに*.0を指定して全プリミティブの 0 番目プロファイルを対象に BridgeをAll Primitivesに設定して全 0 番プロファイルを 1 つの skin にOrderとMin X-Sectionsを調整して必要な滑らかさを確保- 出力サーフェスを Geometry Viewer で確認し、想定したプロファイル群のみが bridge されているかチェック
関連オペレータ 🔗
類似機能OP 🔍
- Skin SOP — 並んだ複数の open curve / face から skin surface を生成 (bridge とは違い順序通り全 face を 1 つの skin にまとめる用途)
- Sweep SOP — 断面 (cross-section) をパスに沿ってスイープして surface を生成 (bridge は端点間補間、sweep はパス追従)
組み合わせ推奨OP 🔄
- Profile SOP — サーフェスから profile curve を抽出して Bridge の入力に渡す
- Carve SOP — 曲線・サーフェスの一部を切り出して bridge 用の rails を作成
- Merge SOP — 複数の独立プロファイルを 1 入力にまとめてから Bridge に渡す前処理
- Refine SOP — Bridge で生成された高密度サーフェスを Unrefine オプションで簡素化
前処理・後処理SOP 🎯
Info CHOP情報 📊
Bridge 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: プロファイル曲線を入力したのに skin surface が生成されない
✅ Solution:
- curves on surface を bridge したい場合は
Groupパラメータの指定が必須。空欄のままだと free-floating な曲線として扱われ、想定どおりに skin が出ない - Pattern (例:
*.0) を使って全プリミティブの 0 番目プロファイルを束ねる等、明示的に bridge 対象を指定する - 入力プリミティブが NURBS / Bezier (曲線・面) であることを確認 — Polygon は skin の対象にならない場合がある (必要に応じ前段で Convert SOP で変換)
❌ Problem: Circular Arc Fillet がフィレットの膨らみ方向に効かない
✅ Solution:
- Circular Arc Fillet モードでは
Scale Tangentsの 符号 (正負) のみが参照され、大きさは無視される仕様を確認 - 膨らむ方向を変えたい場合は
Scale TangentsX / Y / Z の符号を反転する - 半径自体は rails 間の距離と接線から自動算出されるため手動指定不可 — 半径を変えたい場合は rails (曲線) 側の配置を調整する
❌ Problem: 生成された skin surface が過剰に膨らむ・歪む
✅ Solution:
Rotate Tangentsは基本的に0のままにする (回転は意図的に変形を加える場合以外は歪みの原因になる)Scale TangentsとScale Curvaturesを1.0付近から少しずつ調整し、必要に応じ Preserve Tangent / Preserve Curvature Magnitude を無効化- bridge の片側だけ膨らむ場合は
Min X-Sectionsを増やして cross-section の密度を上げる
❌ Problem: skin にひび割れ (cracks) や望ましくない波打ち (ripples) が出る
✅ Solution:
- ひび割れが出る場合は
Preserve Sharp Cornersをオンにして鋭角の折れも fitting 対象に含める - ripples が出る場合は
Preserve Sharp Cornersをオフにしてノット数を減らすか、Toleranceを緩めて 2D fitting を簡素化 - プロファイル曲線自体が Preserve Sharp Corners オプションで作られているか確認 — 揃っていないと bridge 側で補おうとして余計なノットが入る
❌ Problem: 生成サーフェスが極端に複雑で表示・後段処理が重い
✅ Solution:
- 後段に Refine SOP を追加し、Unrefine オプションで U 値を Bridge の
Order付近に設定して複雑度を削減 Min X-Sectionsを最低限の値まで下げて cross-section 密度を抑えるDivisions per Spanを下げてプロファイル抽出時の評価ポイント数を削減 (精度とのトレードオフ)
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Bridge SOP
- TouchDesigner公式ドキュメント – Skin SOP
- TouchDesigner公式ドキュメント – Refine SOP
- TouchDesigner公式ドキュメント – Profile SOP

