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

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

Refine SOP の細分化機能を示す図

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

概要 📖 – 曲線曲面を細かく分割

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 のいずれかのモードで実行

出力: ノット挿入・除去または細分化されたプリミティブ

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 方向の始点を 01 のパラメトリック位置で指定
First U トグルがオンのときのみ有効

Second U .secondu
Second U (U 終点の有効化) — U 方向の終点側パラメトリック位置を使うかどうかのトグル
– オフ時は Second U 値(domainu2)が無視される

Second U .domainu2 📍
Second U (U 終点位置) — リファイン対象区間の U 方向の終点を 01 のパラメトリック位置で指定
Second U トグルがオンのときのみ有効

U Divisions .divsu 🔢
U Divisions (U 分割数) — First USecond U の区間で行うリファイン回数(細分化回数)を整数で指定
– 値を増やすほど指定区間の解像度が上がる

V 方向の細分化制御 🧭

First V .firstv
First V (V 始点の有効化) — V 方向の始点側パラメトリック位置を使うかどうかのトグル
– V 方向はスプライン曲面でのみ意味を持ち、曲線では無視される

First V .domainv1 📍
First V (V 始点位置) — リファイン対象区間の V 方向の始点を 01 のパラメトリック位置で指定

Second V .secondv
Second V (V 終点の有効化) — V 方向の終点側パラメトリック位置を使うかどうかのトグル

Second V .domainv2 📍
Second V (V 終点位置) — リファイン対象区間の V 方向の終点を 01 のパラメトリック位置で指定

V Divisions .divsv 🔢
V Divisions (V 分割数) — First VSecond 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 方向に局所区間と分割数を指定し、その範囲だけノットを追加して曲面解像度を上げ、テクスチャの歪みを抑える典型パイプラインです。

  1. Line SOP を 2 本配置し、NURBS 曲線を作成
  2. Skin SOP で 2 本の曲線から NURBS 曲面を生成
  3. Refine SOP を後段に接続し、First U トグルをオンにして First U0.3Second U トグルをオンにして Second U0.7 に設定
  4. U Divisions4 に設定し、Refine Page で NURB Count U2 に指定
  5. 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 を通すと、滑らかな曲げ変形が得られます。

  1. Grid SOP を配置し、Rows / Columns を低解像度のまま作成
  2. Refine SOP を接続し、First U / Second U / First V / Second V をすべてオンにして範囲を 01 に設定
  3. U DivisionsV Divisions35 に設定して全面を細分化
  4. Subdivide Page の Spacing で計測方式を確認(ポリゴンには Subdivide 挙動が適用される)
  5. 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 でメッシュ化・書き出しを軽量化します。

  1. File In SOP 等で重い NURBS 曲面データを読み込み
  2. Refine SOP を接続し、Unrefine Page で NURB Count UNURB Count V を除去したい数だけ設定
  3. Tolerance U / Tolerance V を許容できる形状変化量に設定(小さいほど形状重視、大きいほど軽量化重視)
  4. Convert SOP でポリゴンに変換しジオメトリ統計(Info CHOPnum_points 等)でデータ量削減を確認
  5. 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 SOPRevolve 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 SOPConvert SOP を置いて法線の再計算・平滑化を行う
  • Subdivide PageSpacing 計測方式を変更して挙動の差分を確認

参考資料 📚

その他 🔗

公式リソース 📖

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