
概要 📖 – 曲線曲面を細かく分割
Refine SOPは、曲線・曲面・ポリゴンを指定 U / V 区間で細かく分割し、解像度を上げる SOPです。NURBS にはノット挿入による平滑なリファイン、ポリゴン / Bezier には段差を伴う Subdivide、過剰ノットの除去に Unrefine を提供し、変形・テクスチャ・スキニング前段の解像度調整を 1 オペレータで担います。
主な用途 🎯
- NURBS 曲線・曲面へのノット挿入による解像度向上(変形耐性とテクスチャ品質を高める前処理)
- ポリゴンメッシュの細分化でディテール追加(後段の Lattice / Twist 等の変形オペレータの追従性を確保)
- U / V 方向の指定区間だけ局所リファインで形状の特定領域だけ密度を上げる精密制御
- Unrefine モードによる過剰ノット除去で軽量化(許容誤差を指定して形状を保ちつつデータ量削減)
- Subdivide モードでポリゴン / Bezier の段差付き細分化で意図的なディスクリート分割を表現
- Skin SOP / Convert SOP の前段準備として、リファイン後の高密度プリミティブを下流に流す典型パイプライン
データフロー 🔄
入力: NURBS 曲線・曲面 / Bezier / ポリゴンプリミティブ
↓
Group で対象選別
↓
U / V 区間(First U・Second U・First V・Second V)と Divisions で範囲・密度を指定
↓
Refine / Unrefine / Subdivide のいずれかのモードで実行
↓
出力: ノット挿入・除去または細分化されたプリミティブ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Page 📁
対象プリミティブ選別 🎯
Group .group 🎯
– Group (対象指定) — リファイン対象とするプリミティブを絞り込むパターン文字列(* / 0-15 等の Pattern Matching 表記)
– 入力にグループが定義されている場合、グループ名を指定するとそのグループのプリミティブのみが処理対象になる
– 空欄時は入力プリミティブすべてが対象
U 方向の細分化制御 🧭
First U .firstu ✅
– First U (U 始点の有効化) — U 方向の始点側パラメトリック位置を使うかどうかのトグル
– オフ時は First U 値(domainu1)が無視される
First U .domainu1 📍
– First U (U 始点位置) — リファイン対象区間の U 方向の始点を 0 〜 1 のパラメトリック位置で指定
– First U トグルがオンのときのみ有効
Second U .secondu ✅
– Second U (U 終点の有効化) — U 方向の終点側パラメトリック位置を使うかどうかのトグル
– オフ時は Second U 値(domainu2)が無視される
Second U .domainu2 📍
– Second U (U 終点位置) — リファイン対象区間の U 方向の終点を 0 〜 1 のパラメトリック位置で指定
– Second U トグルがオンのときのみ有効
U Divisions .divsu 🔢
– U Divisions (U 分割数) — First U と Second U の区間で行うリファイン回数(細分化回数)を整数で指定
– 値を増やすほど指定区間の解像度が上がる
V 方向の細分化制御 🧭
First V .firstv ✅
– First V (V 始点の有効化) — V 方向の始点側パラメトリック位置を使うかどうかのトグル
– V 方向はスプライン曲面でのみ意味を持ち、曲線では無視される
First V .domainv1 📍
– First V (V 始点位置) — リファイン対象区間の V 方向の始点を 0 〜 1 のパラメトリック位置で指定
Second V .secondv ✅
– Second V (V 終点の有効化) — V 方向の終点側パラメトリック位置を使うかどうかのトグル
Second V .domainv2 📍
– Second V (V 終点位置) — リファイン対象区間の V 方向の終点を 0 〜 1 のパラメトリック位置で指定
V Divisions .divsv 🔢
– V Divisions (V 分割数) — First V と Second V の区間で行うリファイン回数(細分化回数)を整数で指定
– 曲面プリミティブでのみ有効
Refine Page 📁
ノット挿入数の指定 🔢
NURB Count U .refineu 🔢
– NURB Count U (U 方向ノット挿入数) — NURBS をリファインする際に、U 方向の各位置で挿入するノットの数
– 値を上げると曲線・曲面の制御点が増え、より精密な変形が可能になる
– NURBS 以外(ポリゴン / Bezier)の場合は Subdivide Page 側の動作になる
NURB Count V .refinev 🔢
– NURB Count V (V 方向ノット挿入数) — NURBS をリファインする際に、V 方向の各位置で挿入するノットの数
– 曲面プリミティブでのみ有効(曲線では V 方向が存在しないため無視される)
計測方式 📏
Spacing .space 📏
– Spacing (計測方式) — スプライン / 曲線に沿ってどのようにリファイン位置を計測するかを指定
– 公式 docs では選択メニューとして提供されており、対象プリミティブのバシス(ノット分布)に応じて挙動が変わる
– 詳細な選択肢は公式 Refine SOP ページを参照
Unrefine Page 📁
ノット除去数の指定 🔢
NURB Count U .unrefineu 🔢
– NURB Count U (U 方向ノット除去数) — NURBS のリファインを解除する際に、U 方向の各位置から除去するノットの数
– 過剰なノットを削減して曲線・曲面を軽量化する用途
NURB Count V .unrefinev 🔢
– NURB Count V (V 方向ノット除去数) — NURBS のリファインを解除する際に、V 方向の各位置から除去するノットの数
– 曲面プリミティブでのみ有効
除去許容誤差 📐
Tolerance U .tolu 📐
– Tolerance U (U 方向許容誤差) — U 方向の除去対象ノットを判定する閾値距離
– 除去前後で曲線・ポリゴン・曲面の形状がこの距離を超えて変化する場合、そのノットは保持される
– 値を小さくすると形状をより厳密に保ち、大きくすると軽量化を優先
Tolerance V .tolv 📐
– Tolerance V (V 方向許容誤差) — V 方向の除去対象ノットを判定する閾値距離
– 曲面プリミティブで V 方向のノット除去を制御する際に使用
Subdivide Page 📁
細分化計測方式 🪓
Spacing .subdivspace 🪓
– Spacing (細分化計測方式) — Subdivide モードでプリミティブを細分化する際の計測方式を指定
– Subdivide はポリゴンと Bezier に対して有効で、細分化のたびに尖り(鋭い不連続)が発生し得る点で Refine とは挙動が異なる
– NURBS に対しては「最大限のリファイン」(カウント = プリミティブのバシス次数 − 1)と等価
実践アイデア 💡
Example 1: 曲面の局所リファイン 🎨
Line SOP × 2 (NURBS) → Skin SOP → Refine SOP (U Divisions=4, firstu/secondu で局所区間) → Texture SOP → Render TOP
Skin SOP で張った NURBS 曲面の中央付近だけテクスチャの伸びが目立つケースで、Refine SOP の U 方向に局所区間と分割数を指定し、その範囲だけノットを追加して曲面解像度を上げ、テクスチャの歪みを抑える典型パイプラインです。
- Line SOP を 2 本配置し、NURBS 曲線を作成
- Skin SOP で 2 本の曲線から NURBS 曲面を生成
- Refine SOP を後段に接続し、
First UトグルをオンにしてFirst Uを0.3、Second UトグルをオンにしてSecond Uを0.7に設定 U Divisionsを4に設定し、Refine Page でNURB Count Uを2に指定- Texture SOP と Render TOP でテクスチャの歪みが軽減されたことを確認
Example 2: 平面を細分化し変形 🪓
Grid SOP (低解像度) → Refine SOP (Subdivide Page 利用) → Lattice SOP → Geometry COMP
低解像度の Grid SOP を Lattice SOP で曲げると、頂点が足りずに角張った変形になります。Refine SOP の Subdivide ページで U / V 方向に細分化を入れて頂点密度を上げてから Lattice を通すと、滑らかな曲げ変形が得られます。
- Grid SOP を配置し、
Rows/Columnsを低解像度のまま作成 - Refine SOP を接続し、
First U/Second U/First V/Second Vをすべてオンにして範囲を0〜1に設定 U DivisionsとV Divisionsを3〜5に設定して全面を細分化- Subdivide Page の
Spacingで計測方式を確認(ポリゴンには Subdivide 挙動が適用される) - Lattice SOP で曲げ変形を加え、Geometry COMP で滑らかさを確認
Example 3: ノット除去で軽量化 🧹
Heavy NURBS Source → Refine SOP (Unrefine Page, Tolerance 指定) → Convert SOP → File Out SOP
外部から読み込んだ NURBS 曲面に過剰なノットが含まれているケースで、Refine SOP の Unrefine Page を使い、形状の変化を一定距離以内に保つ Tolerance を指定して不要なノットを除去し、後段の Convert / File Out でメッシュ化・書き出しを軽量化します。
- File In SOP 等で重い NURBS 曲面データを読み込み
- Refine SOP を接続し、Unrefine Page で
NURB Count UとNURB Count Vを除去したい数だけ設定 Tolerance U/Tolerance Vを許容できる形状変化量に設定(小さいほど形状重視、大きいほど軽量化重視)- Convert SOP でポリゴンに変換しジオメトリ統計(Info CHOP の
num_points等)でデータ量削減を確認 - File Out SOP で書き出して下流に流す
関連オペレータ 🔗
類似機能OP 🔍
- Subdivide SOP — ポリゴンの細分化に特化した別オペレータ
- Basis SOP — NURBS / Bezier の U/V バシスそのものを編集する隣接オペレータ
組み合わせ推奨OP 🔄
- Skin SOP — Refine で揃えた高密度曲線群から曲面を張る後段処理
- Lattice SOP — Refine 後のジオメトリを格子変形(追従性の確保)
- Texture SOP — リファイン後の U/V を使ってテクスチャ投影品質を高める
- Convert SOP — リファイン済 NURBS をポリゴンに変換して下流レンダリングへ
- Carve SOP — Refine で挿入したノット位置を起点に曲線を切り出す
前処理・後処理SOP 🎯
Info CHOP情報 📊
Refine 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: Refine SOP を通しても形状が変わらない
✅ Solution:
First U/Second U(曲面ならFirst V/Second V)のトグルがオンになっているか確認 — オフ時は U / V 区間が無視されるU Divisions(および曲面ならV Divisions)が0のままになっていないか確認 —0ではリファイン実行回数が 0 になるGroupパターンが対象プリミティブにマッチしているか確認 — マッチしなければそのプリミティブは処理対象から外れる
❌ Problem: NURBS 曲線では効くが曲面の V 方向に効かない
✅ Solution:
- 入力プリミティブがスプライン曲面であるか確認 — 曲線には V 方向が存在しないため V 関連パラメータは無視される
- 曲線を曲面化するために前段に Skin SOP や Revolve SOP を置いて NURBS 曲面を生成してから Refine を適用
First V/Second VトグルとV Divisionsがオン・1以上になっているか確認
❌ Problem: Unrefine してもノットが除去されない / 想定より少ない
✅ Solution:
Tolerance U/Tolerance Vが小さすぎないか確認 — 除去前後の形状変化が許容誤差を超えるノットは保持されるため、Tolerance を少しずつ大きくして除去対象を広げるNURB Count U/NURB Count Vの除去数指定が0のままになっていないか確認- 対象が Bezier 曲線・ポリゴンの場合、Unrefine の挙動は NURBS と異なるため、軽量化目的なら Polyreduce SOP 等の別経路を検討
❌ Problem: Subdivide で形状が角張る / 不自然な段差が出る
✅ Solution:
- Subdivide はポリゴンと Bezier に対して鋭い不連続を生じうる細分化であるという仕様(公式 docs 引用ブロック参照)を踏まえ、滑らかな細分化が必要なら NURBS 化してから Refine Page を使う経路に切替
- 後段に Facet SOP や Convert SOP を置いて法線の再計算・平滑化を行う
Subdivide PageのSpacing計測方式を変更して挙動の差分を確認
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Refine SOP
- TouchDesigner公式ドキュメント – Subdivide SOP
- TouchDesigner公式ドキュメント – Basis SOP
- TouchDesigner公式ドキュメント – Pattern Matching

