
概要 📖 – 曲線・曲面を滑らかに整える
Fit SOPは、face (curve) や surface 入力を NURBS / Bezier の Spline curve または surface に approximation または interpolation 方式で変換するオペレータです。Method パラメータで Approximation (許容誤差 Tolerance に基づくフィット) と Interpolation (全データ点を厳密に通る曲線生成) を切替可能で、後段の Skin SOP や Sweep SOP の入力として綺麗に揃った Spline 形状を提供します。
主な用途 🎯
- face (curve) や surface 入力を NURBS / Bezier の Spline curve・surface に変換し、後段の Skin SOP / Sweep SOP / Convert SOP に渡せる滑らかなスプライン形状として整える
- Approximation 方式で Tolerance ベースのフィットを行い、許容誤差以内に収まる最小限の CV 数で軽量なスプライン表現に圧縮 (パフォーマンス改善・データ削減用途)
- Interpolation 方式で全データ点を厳密に通る spline を生成し、Scope パラメータで Global / Local / Breakpoints の補間アルゴリズムから用途に合うものを選択
- U Wrap / V Wrap で閉じた曲線・閉じた曲面に変換することで、ループするパスや 360 度回転体の base shape を 1 ノードで生成
- U Multiple Knots / V Multiple Knots でデータ中の鋭い屈曲点 (corner) を保持したまま spline 化し、丸まりすぎを防いだ精細フィット結果を得る
データフロー 🔄
入力: face (curve) または surface (NURBS / Bezier / polygon)
↓
Method で Approximation / Interpolation を選択
↓
Primitive Type (NURBS / Bezier) + U Order / V Order で出力スプラインの形式と次数を決定
↓
Tolerance / Multiple Knots (Approximation) または Scope / Data Parameter / Wrap (Interpolation) で精度・補間挙動を制御
↓
出力: NURBS または Bezier の Spline curve / surface
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Fit Page 📁
対象グループの絞り込み 🔍
Group .group 🎯
– 入力に point group / primitive group が含まれている場合、指定したグループ名のジオメトリのみを Fit 処理の対象に絞り込む
– 空欄の場合は入力全体が対象
– * / [0-5] 等の Pattern Matching 記法に対応
フィット方式の選択 .method 🔄
Fit SOP の処理方式を Approximation (近似) と Interpolation (補間) から選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| Approximation | .approx |
許容誤差 Tolerance に基づき、入力データに近い (ただし通らない) 滑らかな spline を生成。CV 数を抑えた軽量表現を得たい場合に使用。Approximation Page のパラメータが有効化される |
| Interpolation | .interp |
入力データ点を厳密に通る spline を生成。Scope (Global / Local / Breakpoints) で補間アルゴリズムを選択。Interpolation Page のパラメータが有効化される |
出力スプラインの形式 .type 📐
出力するプリミティブを NURBS と Bezier のどちらにするか選択 (生成される形状は同一、数学表現のみが異なる)
| 項目 | 内部名 | 説明 |
|---|---|---|
| NURBS | .nurbs |
Non-Uniform Rational B-Spline。重み (weight) 付き CV による柔軟な spline 表現。後段の Skin SOP / Sweep SOP での標準形式 |
| Bezier | .bezier |
Bezier 曲線・曲面表現。形状は NURBS と同一だが内部表現が単純なため、Bezier 形式が必要な後段処理 (Bezier 専用 SOP / 外部書出し) に渡す場合に選択 |
サーフェスメッシュの構成 .surftype 🌐
Primitive Type が Mesh の場合に、サーフェスをどのトポロジで張るかを選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| Rows | .rows |
水平方向のライン (U 方向の線分) のみで構成 |
| Columns | .cols |
垂直方向のライン (V 方向の線分) のみで構成 |
| Rows and Columns | .rowcol |
Rows と Columns の両方を生成 (ワイヤーフレーム表示でクワッド状に見える、ただしポリゴンは開いた状態) |
| Triangles | .triangles |
三角ポリゴンでメッシュを構成 |
| Quadrilaterals | .quads |
四角ポリゴンでメッシュを構成 (デフォルト) |
| Alternating Triangles | .alttriangles |
向きが交互に入れ替わる三角ポリゴンでメッシュを構成 (Triangles オプションの変形) |
スプラインの次数 (U / V) 🔢
U Order .orderu 🅰️
– 入力が face (curve) の場合: 生成される Spline curve の次数 (order)
– 入力が surface の場合: U パラメトリック方向の Spline surface の次数
– 次数を下げると spline が直線的になり、上げると曲がりが滑らかになる (一般的には 4 が標準)
V Order .orderv 🅱️
– 入力が surface の場合: V パラメトリック方向の Spline surface の次数
– 入力が face (curve) の場合: 無視される (V 方向が存在しないため)
Approximation Page 📐
近似精度パラメータ 📏
Tolerance .tol 🎯
– Approximation 方式での主たる精度パラメータ
– 値を小さくするほど入力データに密にフィット (CV 数が増加し、ファイル容量・後段処理コストが増加)
– 値を大きくするほど緩いフィット (CV 数が減少し、軽量だが入力との誤差が大きくなる)
– 小さい Tolerance で意図しない捻じれ・歪みが発生した場合は、U Order を下げるか U Multiple Knots を有効化して様子を見る
Smoothness .smooth ✨
– Tolerance を固定したまま、生成形状の滑らかさ (roundness) を追加調整するパラメータ
– 0 の場合は追加の平滑化なし (Tolerance による精度のみで決定)
– 値を上げると Tolerance の制約を満たす範囲でより丸みのある曲線に近付く
ノット挿入 (Multiple Knots U / V) ✂️
U Multiple Knots .multipleu 🔪
– 入力データに鋭い屈曲 (sharp bend / corner) がある場合、その箇所にノットを重複挿入してエッジを保持する
– 有効化すると corner が丸まらず、シャープなまま spline 化される
– 副作用として corner の前後で意図しない捻じれが出る場合は、U Order を下げるか Tolerance を上げて緩和
V Multiple Knots .multiplev 🔪
– surface 入力の V パラメトリック方向に対する Multiple Knots 機能
– U Multiple Knots と同じ挙動を V 方向に適用
– face (curve) 入力の場合は無視される
Interpolation Page 🎯
補間アルゴリズム (Scope) .scope 🎚️
Interpolation 方式での補間アルゴリズムを選択 (Local / Breakpoints は curve 専用、surface 入力では Global のみ)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Global | .global |
全データ点を一度に考慮する大域補間。入力データ点と同数の CV を生成。curve / surface 両方に使用可能 |
| Local (Curves Only) | .local |
1 スパンずつ局所データのみを用いて構築する局所補間。Global よりタイトなフィットが得られ、cusp や局所的な変動の扱いが上手。計算コストも Global より低い。curve 専用 (surface には使用不可) |
| Breakpoints | .breakpnt |
Global の変種で、データ点の位置が生成 curve の breakpoint と一致するように補間。curve 専用 (surface には使用不可) |
データのパラメータ化 (U / V Data Parameter) .dataparmu 📊
入力データ点を U / V 方向にどう距離パラメータ化するかを選択。Uniform は規則的データ向け、Chord Length が一般用途の推奨、Centripetal は鋭い corner があるデータに向く
| 項目 | 内部名 | 説明 |
|---|---|---|
| Uniform | .uniform |
等間隔のパラメータ値で配置。ジオメトリが非常に規則的な場合に最適。非等間隔データには非推奨 (意図しない形状になりやすい) |
| Chord Length | .chrdlen |
連続するデータ点間の相対距離に基づいてパラメータ化。最も一般的に推奨される方式 (大半の場合で最も正確な結果) |
| Centripetal | .centrip |
Chord Length の変種だが、非常に鋭い corner を含むデータでより良い結果が得られる |
V 方向のデータ補間 (surface 入力時) .dataparmv 📈
surface 入力の V パラメトリック方向に対するデータパラメータ化方式 (U Data Parameter と同じ 3 択を V 方向に適用)。face (curve) 入力の場合は無視される
| 項目 | 内部名 | 説明 |
|---|---|---|
| Uniform | .uniform |
V 方向のデータ点を等間隔でパラメータ化 |
| Chord Length | .chrdlen |
V 方向の連続データ点間の相対距離でパラメータ化 (推奨) |
| Centripetal | .centrip |
V 方向に鋭い corner がある場合に推奨される変種 |
閉曲線・閉曲面 (U / V Wrap) 🔁
U Wrap .closeu 🅰️
– 生成されるcurve / surface の U 方向を閉じるかを選択
– Off: 開いた curve / 開いた surface として出力
– On: U 方向で閉じた (ループする) curve / surface として出力
– Inherit (デフォルト動作): 入力プリミティブの閉曲性をそのまま継承
V Wrap .closev 🅱️
– surface 入力の V 方向に対する Wrap 設定
– Off / On / Inherit の 3 択で、surface を V 方向に閉じるか選択
– face (curve) 入力の場合は無視される
コーナー保持 (Fit Corners) 📌
Fit Corners .corners ✅
– Local 補間 (curve のみ) でのみ有効
– 有効化すると、データに含まれる corner (鋭い屈曲点) を spline 化後も保持する
– 無効化すると corner が丸められて滑らかな curve になる
実践アイデア 💡
Example 1: 曲線データを近似変換 📐
Trace SOP (画像から抽出した polygon curve) → Fit SOP (Method=Approximation, Primitive Type=NURBS, Tolerance=0.01) → Sweep SOP (Cross Section と組合せ) → Out SOP
Trace SOP で画像トレースから得られたギザギザの polygon curve を Fit SOP の Approximation 方式に通して、滑らかな NURBS Spline curve に変換するフローです。Tolerance を 0.01 に設定することで、元のラフな点列を必要十分な精度でフィットしつつ CV 数を大幅に削減でき、後段の Sweep SOP に渡すパスとして綺麗な形状を得られます。意図しない twist が出た場合は U Order を下げるか U Multiple Knots を On にして調整します。
- Trace SOP または Line SOP の連続接続で、ノイズを含むラフな polygon curve を入力 1 に接続
- Fit SOP の
MethodをApproximationに設定 Primitive TypeをNURBS、U Orderを 4 に設定Toleranceを0.01程度に設定し、Geometry Viewer で滑らかな NURBS curve が生成されることを確認- 出力 CV 数が多すぎる場合は
Toleranceを 0.05 〜 0.1 に上げて軽量化 - 後段に Sweep SOP を接続し、得られた NURBS パスに沿って cross section を sweep して立体化
Example 2: 曲面を補間で構築 🌐
Grid SOP (Z 軸方向にノイズで displace された point grid) → Fit SOP (Method=Interpolation, Primitive Type=NURBS, U/V Data Parameter=Chord Length) → Skin SOP → Out SOP
Grid SOP で生成した規則的な点群を Noise などで displace した不規則 surface 候補を、Fit SOP の Interpolation 方式 (Global Scope) で全データ点を厳密に通る NURBS Spline surface に変換するフローです。U Data Parameter / V Data Parameter ともに Chord Length を選択することで、不均一な点間距離に対しても破綻のない補間が得られ、後段の Skin SOP で多重サーフェスを統合する際の base shape として使えます。
- Grid SOP で点群を生成し、Noise SOP / Transform SOP 等で各 point を displace
- Fit SOP の入力に接続し、
MethodをInterpolationに設定 Primitive TypeをNURBS、U Order/V Orderをともに 4 に設定ScopeをGlobal、U Data Parameter/V Data ParameterをともにChord Lengthに設定- Geometry Viewer で全 grid point を厳密に通る NURBS Spline surface が生成されることを確認
- 後段に Skin SOP を接続して別 surface と統合し、有機的な形状を構築
Example 3: 閉じた曲線を生成 🔁
Circle SOP (open polygon, point N 個) → Fit SOP (Method=Interpolation, Scope=Global, U Wrap=On) → Sweep SOP / Skin SOP → Out SOP
Circle SOP などで生成した開いた polygon curve を、Fit SOP の U Wrap=On 設定でシームレスに閉じた NURBS Spline curve に変換するフローです。ループパスとして使う場合や、回転体の base profile として後段の Skin SOP / Sweep SOP に渡す場合に有効で、最終点と始端点が滑らかに繋がる閉曲線が 1 ノードで得られます。Centripetal データパラメータ化を選ぶと corner がよりシャープに保持されます。
- Circle SOP (Primitive Type=Polygon, Open) または手書きの polygon curve を入力 1 に接続
- Fit SOP の
MethodをInterpolation、ScopeをGlobalに設定 Primitive TypeをNURBS、U WrapをOnに設定U Data ParameterをChord Length(規則的形状) またはCentripetal(鋭い corner を含む形状) に設定- Geometry Viewer で最終点と始端点が滑らかに繋がった閉 NURBS curve が出力されることを確認
- 後段に Sweep SOP を接続し、閉ループパスとして cross section を sweep
関連オペレータ 🔗
類似機能OP 🔍
- Refine SOP — 既存の NURBS / Bezier curve / surface に CV を追加して再パラメータ化する SOP。Fit が外部データから spline を新規生成するのに対し、Refine は既存 spline の精度を上げる用途
- Polyspline SOP — polygon curve を polyline spline (区分多項式 curve) に変換する SOP。NURBS / Bezier への変換が不要で、軽量な polyspline 表現で十分な場合の代替
- Convert SOP — primitive 型を相互に変換する汎用 SOP (polygon ↔ NURBS ↔ Bezier ↔ Mesh)。フィット処理は行わず、内部表現のみを切り替える
組み合わせ推奨OP 🔄
- Skin SOP — Fit SOP で生成した複数の NURBS / Bezier Spline curve を skin して、有機的な surface を構築する後処理パターン
- Sweep SOP — Fit SOP の出力 spline を path 入力として受け取り、cross section に沿って立体化
- Trace SOP — 画像から抽出したラフな polygon curve を Fit SOP に渡す前処理。Trace の出力に Fit を続けると、画像トレース → 滑らかな NURBS 化が 1 チェインで実現
- Resample SOP — Fit SOP の前段で polygon curve のサンプル数を一定間隔に揃えると、Approximation / Interpolation の数値安定性が向上
- Carve SOP — Fit SOP で生成した spline curve / surface を U / V パラメータ範囲で切り取り、部分形状の抽出に使う後処理
前処理・後処理SOP 🎯
- 前処理: Line SOP、Circle SOP、Grid SOP、Trace SOP、Resample SOP、Convert SOP
- 後処理: Skin SOP、Sweep SOP、Refine SOP、Carve SOP、Transform SOP、Out SOP
Info CHOP情報 📊
Fit 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— プロセス開始以降に Fit SOP がクックされた累計回数。Tolerance を細かく変更してリアルタイムフィットする場合の負荷監視に使用cook_time:cook_time— 直近クックの所要時間 (ミリ秒)。Tolerance を小さくして高精度フィットを行うと値が急増しやすく、ボトルネック検出の主要指標cook_frame:cook_frame— Fit SOP が最後にクックされたフレーム番号。期待通りクックが走っているかの確認に使用
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 出力 spline が元データから大きくずれる / 滑らかすぎる
✅ Solution:
MethodがApproximationになっていないか確認。データ点を厳密に通したい場合はInterpolationに切替- Approximation 方式のままなら
Toleranceの値を段階的に下げる (例: 0.05 → 0.01 → 0.005)。Tolerance を小さくするほど元データに密にフィットする Smoothnessが大きすぎると Tolerance 制約内で過度に丸まるため、0に戻して挙動を確認
❌ Problem: CV 数 (ポイント数) が爆発的に増えて後段が重い
✅ Solution:
Toleranceを上げる (例: 0.001 → 0.01 → 0.05)。許容誤差を緩めるとフィットに必要な CV が減って軽量化- 前段に Resample SOP を挿入して入力点数自体を絞り込んでから Fit を行う
- 出力後に Refine SOP で CV 数を再調整するか、不要な部分を Carve SOP でカットして軽量化
❌ Problem: 鋭い corner が丸まってしまう / シャープに保ちたい
✅ Solution:
- Approximation 方式なら
U Multiple Knots(surface 入力ならV Multiple Knotsも) を有効化。鋭い屈曲点にノットが重複挿入され corner が保持される - Interpolation + Local Scope (curve のみ) であれば
Fit Cornersを有効化することで corner を維持 U Data ParameterをCentripetalに切替えると、Chord Length より corner が鋭く残りやすい
❌ Problem: 閉じた curve / surface にならない (始端と終端が繋がらない)
✅ Solution:
U WrapをOnに設定 (surface の場合は必要に応じてV WrapもOn)。Off だと開いた spline として出力されるInherit設定の場合は入力プリミティブの閉曲性を継承するため、前段の Circle SOP 等で Closed Polygon が正しく生成されているか確認- Interpolation 方式で Global Scope を選び、データ点が始端と終端で物理的に近い位置にあることを確認 (大きく離れていると閉じても歪む)
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Fit SOP
- TouchDesigner公式ドキュメント – Refine SOP (既存 spline に CV 追加)
- TouchDesigner公式ドキュメント – Convert SOP (primitive 型変換)
- TouchDesigner公式ドキュメント – Pattern Matching

