
概要 📖 – スプラインプリミティブの U/V バシス(パラメータ化)編集
Basis SOPは、NURBS / Bezier スプラインプリミティブの U/V バシス(パラメータ化)を編集する SOPです。7 種類のパラメータ化方式・knot sequence の手動編集・基底連結・order 引き上げを 1 オペレータで提供し、スプライン曲面のテクスチャ投影品質や曲線形状の精密制御を担います。
主な用途 🎯
- NURBS / Bezier スプラインプリミティブの U/V パラメータ化方式の切替(Chord Length / Centripetal / Uniform / Manual 等)
- Knot Sequence の手動編集で曲線の局所形状やノット分布を精密に調整
- 複数スプラインのバシス連結(Concatenate)でテクスチャ投影や接続性を維持した一体的なマッピングを実現
- 基底の Origin / Length / Scale 変換で domain interval を任意区間に再マッピング
- スプライン次数(Order)の引き上げで曲面の連続性・滑らかさを保ちつつ形状を維持
- Texture SOP との連携で U/V を [0,1] に正規化してテクスチャを完全マッピング
データフロー 🔄
入力: スプラインプリミティブを含む SOP(NURBS / Bezier 曲線・曲面)
↓
Group で対象プリミティブを選別
↓
U/V Page で Parameterization・Knot・Origin/Length/Scale・Raise to を順次適用
↓
出力: 同一トポロジで再パラメータ化されたスプライン SOP
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Basis Page 📁
対象スプライン選別 🎯
Group .group 🎯
– 編集対象とするスプラインプリミティブを絞り込むパターン文字列(* や 0-15 等の Pattern Matching 表記)
– 非スプライン(ポリゴン等)のプリミティブは無視される
– U と V の 2 セットの設定が以後のページで続き、それぞれ Parameterization → Mapping → Order の順で適用される
– V ページの設定はスプライン曲面に対してのみ意味を持ち、曲線では無視される
U Page 📁
U バシス編集の有効化 ✅
Edit the U Basis .ubasis ✅
– U 方向のバシス編集全体のオン/オフ切替(オフ時は U Page の他パラメータがすべて無効化)
Parameterization .uparmtype 🎛️
U 方向のパラメータ化方式を 7 種から選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| Unchanged | .nochange |
バシスを変更しない(現状維持) |
| Uniform | .uniform |
ノットを均等分布させ、バシスの origin と length を維持。正則な形状にのみ推奨 |
| Chord Length | .chord |
連続する CV 間の距離からノット比を計算。最も一般的かつ効果的なパラメータ化方式 |
| Centripetal | .centripetal |
Chord Length の類似手法。急なターンを含む形状で推奨 |
| Manual: Single | .manualone |
Knot Sequence 欄に書いたノットをロードする。入力に複数プリミティブがあっても先頭スプラインのバシスのみが影響を受ける |
| Manual: Propagated | .manualall |
Manual: Single と同じ動作に加え、同じバシスをモデル内またはグループ内の他のスプラインにもコピーする。ポイント数と次数が一致する曲線群に使うと、より清潔な(isoparm の少ない)曲面が生成される |
| Knotslide | .slide |
バシス内のノットクラスタをずらす(Range と Bias で位置を制御)。詳細は公式 Knotslide ページを参照 |
※ 注意: Bezier バシスは同一ノットの繰り返しを許容しない。NURBS バシスは「ノット多重度 ≤ 次数」の範囲で繰り返しを許容し、先頭 2 個と末尾 2 個のノットは同一でなければならない。
Knot 編集関連パラメータ 🔧
Knot Sequence .uknots 🔢
– Parameterization が Manual のときに、入力先頭スプラインのノット列をこの欄の値でロードする
– 値は昇順、総数は元バシスのノット数と一致が必須
– 正確な個数を確保するには Read Basis ボタンで元のノット列を読み込んでから編集
Read Basis .uread 📥
– Parameterization が Manual のときに、元バシスのノットを Knot Sequence 欄に読み込むボタン
Range .urange 📏
– Knotslide モード時に、シフト対象とするノットの domain interval(区間)
– この範囲に含まれるノット群が、左右の隣接ノットまでを上限に同量シフトされる
Bias .ubias ⚖️
– Knotslide モード時のシフト方向と量
– 0.5 で無移動、0.5 未満で左の隣接ノット側へ、0.5 超で右の隣接ノット側へクラスタを移動
– 0 や 1 でも完全にはクランプされないケースがある(ノット多重度 ≤ 次数の制約のため)
Concatenate .uconcat 🔗
– 入力スプラインプリミティブ群のバシスを連結し、前プリミティブの最終ノットと次プリミティブの先頭ノットを一致させる
– 後続の Origin / Length / Scale 等の操作よりも先に適用され、バシス連続性を保ちつつ複数バシスを任意区間(通常 [0,1])にまとめてマッピング可能
基底マッピング関連パラメータ 📐
Origin (toggle) .udoorigin ✅
– Origin の値適用を有効化するトグル
Origin .uorigin 📍
– バシスの新しい原点(Concatenate がオンのときは累積バシスの原点)
Length (toggle) .udolength ✅
– Length の値適用を有効化するトグル
Length .ulength 📏
– バシスの新しい長さ(先頭ノットと末尾ノット間の距離)。0 より大きい値が必須
– Concatenate がオンのときは累積バシス全体の総長
Scale (toggle) .udoscale ✅
– Scale の値適用を有効化するトグル
Scale .uscale 🔍
– バシス origin を起点としてバシスに適用する倍率。0 より大きい値が必須
Order 引き上げ関連パラメータ 📈
Raise to (toggle) .uraise ✅
– Raise U to の値適用を有効化するトグル
Raise U to .orderu 📈
– U 方向のスプライン次数(または degree)を引き上げる目標値(有効範囲: 2 〜 11)
– 現在の次数より低い値は無視される
– 形状を保持したまま次数のみ引き上げる動作で、テクスチャ投影の連続性向上やバシス共有時の整合に有用
V Page 📁
V バシス編集の有効化 ✅
Edit the V Basis .vbasis ✅
– V 方向のバシス編集全体のオン/オフ切替(オフ時は V Page の他パラメータがすべて無効化)
– V Page の設定はスプライン曲面にのみ有効で、スプライン曲線では無視される
Parameterization .vparmtype 🎛️
V 方向のパラメータ化方式を 7 種から選択(U Page と同一の選択肢)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Unchanged | .nochange |
バシスを変更しない(現状維持) |
| Uniform | .uniform |
ノットを均等分布させ、バシスの origin と length を維持。正則な形状にのみ推奨 |
| Chord Length | .chord |
連続する CV 間の距離からノット比を計算。最も一般的かつ効果的なパラメータ化方式 |
| Centripetal | .centripetal |
Chord Length の類似手法。急なターンを含む形状で推奨 |
| Manual: Single | .manualone |
Knot Sequence 欄に書いたノットをロードする。複数プリミティブ入力時は先頭スプラインのみ影響 |
| Manual: Propagated | .manualall |
Manual: Single と同じ動作に加え、同じバシスをモデル内またはグループ内の他のスプラインにも伝播 |
| Knotslide | .slide |
バシス内のノットクラスタをずらす(Range と Bias で位置を制御) |
Knot 編集関連パラメータ 🔧
Knot Sequence .vknots 🔢
– U Page の Knot Sequence と同義(V 方向版)。Parameterization が Manual のときに先頭スプラインの V ノット列をこの欄の値でロード
– 値は昇順、総数は元バシスのノット数と一致が必須
Read Basis .vread 📥
– Parameterization が Manual のときに、V 方向の元バシスのノットを Knot Sequence 欄に読み込むボタン
Range .vrange 📏
– Knotslide モード時の V 方向シフト対象 domain interval
Bias .vbias ⚖️
– Knotslide モード時の V 方向シフト方向・量(0.5 で無移動)
Concatenate .vconcat 🔗
– V 方向のバシス連結。前プリミティブ V 終端と次プリミティブ V 始端のノットを一致させる
基底マッピング関連パラメータ 📐
Origin (toggle) .vdoorigin ✅
– V 方向の Origin 値適用を有効化するトグル
Origin .vorigin 📍
– V 方向バシスの新しい原点
Length (toggle) .vdolength ✅
– V 方向の Length 値適用を有効化するトグル
Length .vlength 📏
– V 方向バシスの新しい長さ。0 より大きい値が必須
Scale (toggle) .vdoscale ✅
– V 方向の Scale 値適用を有効化するトグル
Scale .vscale 🔍
– V 方向バシスへの倍率。0 より大きい値が必須
Order 引き上げ関連パラメータ 📈
Raise to (toggle) .vraise ✅
– Raise V to の値適用を有効化するトグル
Raise V to .orderv 📈
– V 方向のスプライン次数を引き上げる目標値(有効範囲: 2 〜 11)
– 現在の次数より低い値は無視される
実践アイデア 💡
Example 1: Chord Lengthで形状を保ちUV改善 🎨
Line SOP (NURBS) → Basis SOP (uparmtype=Chord Length, Length=1.0) → Skin SOP → Texture SOP → Render TOP
手描きで配置した CV から生成した NURBS 曲線では Uniform 分布のままだとテクスチャが歪みがちです。Basis SOP で U 方向を Chord Length に切替えつつ Length を 1.0 に正規化することで、Skin SOP で張った曲面に対し Texture SOP の投影が破綻なく走るパイプラインを組みます。
- Line SOP で NURBS 曲線を配置し、CV の間隔が不均一になるよう手動で位置を調整
- Basis SOP を後段に接続し、U Page で
Edit the U Basisをオン、ParameterizationをChord Lengthに設定 Length (toggle)をオン、Lengthを1.0に設定して U 軸を[0,1]に正規化- Skin SOP で複数曲線から曲面を張り、Texture SOP でテクスチャ投影
- Render TOP でテクスチャが曲線間隔に追従して伸縮しないことを確認
Example 2: 複数NURBSを連結し一体UV 🔗
Line SOP × 3 → Merge SOP → Basis SOP (uconcat=ON, Length=1.0) → Texture SOP → Render TOP
3 本のスプライン曲線を一続きの軌跡として扱いたいケースでは、各曲線のバシスが独立しているとテクスチャがプリミティブごとにリセットされてしまいます。Basis SOP の Concatenate を有効化し全体 Length を 1.0 に揃えると、複数バシスを連結した上で [0,1] 区間に一括マッピングできます。
- Line SOP を 3 つ配置し、それぞれ異なる形状の NURBS 曲線を作成
- Merge SOP で 3 つの曲線を 1 つの SOP に統合
- Basis SOP を接続し
Groupでスプラインプリミティブのみを対象に絞り込み Edit the U Basisをオン、Knot 編集セクションでConcatenateをオンに切替- 基底マッピングセクションで
Length (toggle)をオン、Lengthを1.0に設定 - Texture SOP を後段に置き、テクスチャが 3 曲線を跨いで連続的に流れることを確認
Example 3: Knotslide で局所形状をピンポイント調整 🎚️
Line SOP (NURBS) → Basis SOP (uparmtype=Knotslide, urange + ubias) → Geometry COMP
NURBS 曲線の特定区間だけ形状を引き締めたい・緩めたいときに、CV を動かさずに Knotslide でノットクラスタを移動させて局所的なテンションを調整するパターン。U Page の Range で対象区間を指定し、Bias でシフト方向と量を制御します。
- Line SOP で NURBS 曲線を配置し、調整したい区間の位置を把握
- Basis SOP の U Page で
ParameterizationをKnotslideに設定 Rangeにシフト対象とするノット区間を入力(例:0.3 0.7)Biasを0.5を中心に微調整し、左寄せ(0.5未満)または右寄せ(0.5超)でクラスタを移動- Geometry COMP で曲線形状の変化を確認しながら値を追い込む
関連オペレータ 🔗
類似機能OP 🔍
- Refine SOP — NURBS / Bezier 曲線・曲面のノット追加によるリファインに特化
- Primitive SOP — プリミティブレベルの属性(タイプ・閉じ判定等)の編集に特化
組み合わせ推奨OP 🔄
- Skin SOP — Basis SOP で揃えた複数曲線からスプライン曲面を張る
- Texture SOP — Basis SOP で U/V を [0,1] に正規化した後にテクスチャ投影
- Carve SOP — バシス区間を切り出して新規プリミティブ化する後段処理
- Convert SOP — 再パラメータ化後にメッシュ化(ポリゴン変換)して下流レンダリングへ
前処理・後処理SOP 🎯
- 前処理: Profile SOP、Merge SOP
- 後処理: Skin SOP、Refine SOP、Convert SOP
Info CHOP情報 📊
Basis 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: Basis SOP を通しても形状が変化しない
✅ Solution:
Edit the U Basis(またはEdit the V Basis)がオンになっているか確認 — オフの状態では U/V Page 全体が無効化されるGroupパターンが対象のスプラインプリミティブにマッチしているか、また入力にスプライン(NURBS / Bezier)以外のプリミティブしか含まれていないか確認 — ポリゴンは無視されるParameterizationがUnchangedのままになっていないか確認
❌ Problem: Knot Sequence を Manual で入力するとエラーまたは形状崩れが発生する
✅ Solution:
- ノット値が昇順かつ総数が元バシスのノット数と一致しているか確認 — 不一致は受理されない
Read Basisボタンで元のノット列を読み込んでから差分編集する運用に切替- Bezier バシスではノット重複が禁止、NURBS でも先頭 2 個・末尾 2 個のノットは同一、内部の重複は「多重度 ≤ 次数」の制約に従う必要がある
❌ Problem: Raise to で次数を変えてもスプラインの次数が変わらない
✅ Solution:
Raise to (toggle)(uraise/vraise)がオンになっているか確認- 指定した次数が現在の次数より低くないか確認 — 低い値は無視される(次数の引き下げは不可)
Raise U to/Raise V toの有効範囲は 2 〜 11 のため、範囲外の値は適用されない
❌ Problem: V Page の設定を変えても何も変わらない
✅ Solution:
- 入力プリミティブがスプライン曲線のみで構成されていないか確認 — V 方向はスプライン曲面でのみ意味を持つ
- 曲線データをサーフェス化するために、後段に Skin SOP を置いて曲面化してから再度 V Page を編集
Edit the V Basisがオンになっているか確認
❌ Problem: Concatenate を有効化したのにテクスチャがプリミティブ境界でリセットされる
✅ Solution:
Concatenateオン後にLength (toggle)をオンにし、Lengthを1.0等の目標長に設定して累積バシスを再マッピングGroupパターンで対象スプラインが意図どおり選別されているか確認 — 1 プリミティブしか拾えていないと連結対象が存在しない- Concatenate は他の Mapping 操作より先に適用される性質を踏まえ、Origin / Length / Scale の順序が想定どおりか整理
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Basis SOP
- TouchDesigner公式ドキュメント – Refine SOP
- TouchDesigner公式ドキュメント – Skin SOP
- TouchDesigner公式ドキュメント – Pattern Matching

