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

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

Fit SOP の Approximation / Interpolation 方式で face や surface を NURBS / Bezier スプラインに変換するフロー図

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

概要 📖 – 曲線・曲面を滑らかに整える

Fit SOPは、face (curve) や surface 入力を NURBS / Bezier の Spline curve または surface に approximation または interpolation 方式で変換するオペレータです。Method パラメータで Approximation (許容誤差 Tolerance に基づくフィット) と Interpolation (全データ点を厳密に通る曲線生成) を切替可能で、後段の Skin SOPSweep 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

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 にして調整します。

  1. Trace SOP または Line SOP の連続接続で、ノイズを含むラフな polygon curve を入力 1 に接続
  2. Fit SOP の MethodApproximation に設定
  3. Primitive TypeNURBSU Order を 4 に設定
  4. Tolerance0.01 程度に設定し、Geometry Viewer で滑らかな NURBS curve が生成されることを確認
  5. 出力 CV 数が多すぎる場合は Tolerance を 0.05 〜 0.1 に上げて軽量化
  6. 後段に 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 として使えます。

  1. Grid SOP で点群を生成し、Noise SOP / Transform SOP 等で各 point を displace
  2. Fit SOP の入力に接続し、MethodInterpolation に設定
  3. Primitive TypeNURBSU Order / V Order をともに 4 に設定
  4. ScopeGlobalU Data Parameter / V Data Parameter をともに Chord Length に設定
  5. Geometry Viewer で全 grid point を厳密に通る NURBS Spline surface が生成されることを確認
  6. 後段に 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 がよりシャープに保持されます。

  1. Circle SOP (Primitive Type=Polygon, Open) または手書きの polygon curve を入力 1 に接続
  2. Fit SOP の MethodInterpolationScopeGlobal に設定
  3. Primitive TypeNURBSU WrapOn に設定
  4. U Data ParameterChord Length (規則的形状) または Centripetal (鋭い corner を含む形状) に設定
  5. Geometry Viewer で最終点と始端点が滑らかに繋がった閉 NURBS curve が出力されることを確認
  6. 後段に 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 🎯


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:

  • MethodApproximation になっていないか確認。データ点を厳密に通したい場合は 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 ParameterCentripetal に切替えると、Chord Length より corner が鋭く残りやすい

❌ Problem: 閉じた curve / surface にならない (始端と終端が繋がらない)
✅ Solution:

  • U WrapOn に設定 (surface の場合は必要に応じて V WrapOn)。Off だと開いた spline として出力される
  • Inherit 設定の場合は入力プリミティブの閉曲性を継承するため、前段の Circle SOP 等で Closed Polygon が正しく生成されているか確認
  • Interpolation 方式で Global Scope を選び、データ点が始端と終端で物理的に近い位置にあることを確認 (大きく離れていると閉じても歪む)

参考資料 📚

その他 🔗

公式リソース 📖

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