
概要 📖 – ポリゴンを滑らかな曲線に変換
Polyspline SOPは、ポリゴンをスプライン曲線に変換するノードで、各種スプライン方式に対応する SOPです。ベジェ・Bスプライン・Cardinal など 7 種類の曲線方式を選べ、分割方法で頂点の並び方も調整します。
主な用途 🎯
- カクカクしたポリゴンの線を滑らかな曲線に変換
- ベジェやBスプライン等の曲線方式の選び分け
- 曲線を等間隔で分割し直して頂点数を整える
- 閉じた図形・開いた図形の輪郭を曲線化
- 他の形状生成ノードへ渡す前の輪郭整形
データフロー 🔄
入力: ポリゴンの線・面
↓
曲線方式と分割方法に応じて頂点を補間
↓
出力: 滑らかなスプライン曲線
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Page 📁
対象範囲 .group 🎯
Group (対象グループ) — 処理対象とする面を絞り込むパラメータ
Group .group 🎯
– Group (対象グループ) — 使用する面のサブセットを指定します
– * や [1-10] 等のパターンマッチングで複数指定が可能
曲線方式 .basis 🎛️
Spline Type (曲線方式) — 生成するスプラインの種類を決めるメニューパラメータ。7 種類から選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| Bezier | .bezier |
標準的なベジェ曲線 |
| Special Bezier | .sbezier |
ベジェ曲線の変種 |
| Special Smooth Bezier | .c1bezier |
ベジェ曲線の変種 (滑らかさ重視) |
| Degree 2 Bezier | .degree2 |
次数 2 のベジェ曲線の変種 |
| BSpline | .bspline |
より柔らかい曲線。元の点を通らない |
| Cardinal | .cardinal |
元の点を通過する曲線 |
| Linear | .linear |
直線セグメント |
閉じ方 .closure 🔁
Close (閉じ方) — 出力する曲線を開いたままにするか閉じるかを決めるメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .cnone |
出力する曲線を開いたままにします |
| On | .calways |
出力する曲線を閉じます |
| If polygon does | .cifpoly |
入力の面の閉じ方に従います。入力が閉じていれば閉じた曲線、開いていれば開いた曲線になります |
分割方法 .divide 📏
Division Method (分割方法) — 分割を追加して曲線を細かく整える方法を決めるメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Standard | .standard |
曲線を再サンプルしません |
| Even Length Segments | .evenlen |
セグメントの長さを均等にします |
| Even X Segments | .evenx |
X 方向で長さが均等になるよう分割します |
| Even Y Segments | .eveny |
Y 方向で長さが均等になるよう分割します |
| Even Z Segments | .evenz |
Z 方向で長さが均等になるよう分割します |
分割と頂点 .polyspline_resample 🔢
Segment Length .segsize 📏
– Segment Length (セグメント長) — 再サンプル後の曲線セグメント 1 本の長さを指定します
– 分割方法で Even Length Segments を選び Output Divisions が 0 のとき、この長さに収まる本数で出力セグメント数が決まります
– Even Length Segments かつ Output Divisions が 0 かつこの値も 0 の場合は「Invalid number of divisions or segment size」エラーになります
Output Divisions .polydivs 🔢
– Output Divisions (出力分割数) — 再サンプル後の曲線のセグメント本数を指定します
– 分割方法が Standard のときは効果がありません
– Even Length Segments のときは生成されるエッジ数を設定します。0 のときは Segment Length から本数を計算します
Sample Divisions .edgedivs 📐
– Sample Divisions (サンプル分割数) — 再サンプル前のスプライン分割数を指定します
– 分割方法が Standard のときは 1 エッジあたりの細分数になります
– Even Length Segments のときはセグメント長を計算する精度に影響します
端点の重複 .polyspline_cv 📌
First CV Count .first 📌
– First CV Count (先頭点の重複数) — 入力の先頭頂点を繰り返す回数を指定し、その多重度を決めます
– 開いた線が入力のとき特に有効で、曲線を線の始点まで伸ばせます
– 例えば 2 で Cardinal 曲線が始点まで伸び、3 で Bspline が始点から始まります
Last CV Count .last 📌
– Last CV Count (末尾点の重複数) — 入力の末尾頂点を繰り返す回数を指定し、その多重度を決めます
– 開いた線が入力のとき特に有効で、曲線を線の終点まで伸ばせます
張力 .tension 🎚️
CV Tension (制御点の張力) — 入力の点が曲線を引き寄せる強さを指定するパラメータ
CV Tension .tension 🎚️
– CV Tension (制御点の張力) — 入力の点が曲線を引き寄せる張力を指定します
– 張力が大きいほど、出力形状は元の形状に近づきます
実践アイデア 💡
Example 1: 手描き線を滑らかに整形 ✏️
Line SOP → Polyspline SOP (Cardinal) → Sweep SOP
カクカクしたポリゴンの線を Polyspline SOP の Cardinal 方式で滑らかな曲線に変換し、後段の形状生成に渡す基本フロー。Cardinal は元の点を通過するため、輪郭の位置を保ったまま角を丸められます。
- Line SOP やトレースで作ったポリゴンの線を入力に接続
- Polyspline SOP の Spline Type を Cardinal に設定
- Sample Divisions を上げて曲線の滑らかさを調整
- 出力を Sweep SOP 等に渡して立体形状を生成
Example 2: 等間隔の点で曲線を整える 📏
Circle SOP → Polyspline SOP (Even Length Segments) → Copy SOP
円や閉じた図形を Polyspline SOP に通し、Division Method を Even Length Segments にして頂点を等間隔に並べ直すことで、後段の複製や配置を均等にできるようにする例。
- Circle SOP 等の閉じた図形を入力に接続
- Division Method を Even Length Segments に設定
- Output Divisions で出力する頂点数を指定して等間隔化
Example 3: ロゴ輪郭の曲線化 🔤
Trace SOP → Polyspline SOP (BSpline, Close=On) → Profile SOP
画像トレースで得たカクカクの輪郭を Polyspline SOP の BSpline 方式で柔らかい曲線にし、Close を On にして閉じた輪郭として整える用途。BSpline は元の点を通らないため全体がなめらかになります。
- Trace SOP で画像から輪郭を抽出
- Polyspline SOP の Spline Type を BSpline、Close を On に設定
- 輪郭が閉じた滑らかな曲線として整形される
関連オペレータ 🔗
類似機能OP 🔍
- Basis SOP — 既存スプラインのノット・基底ベクトルを操作
- Convert SOP — ジオメトリ種別 (ポリゴン・スプライン等) を相互変換
組み合わせ推奨OP 🔄
- Resample SOP — 曲線化の前後で点数を均等に再サンプル
- Sweep SOP — 曲線化した輪郭に沿って断面を掃引して立体化
- Skin SOP — 複数の曲線にサーフェスを張る
- Carve SOP — 曲線を切り出し・分割して部分を取り出す
前処理・後処理SOP 🎯
Info情報 📊
Polyspline 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— 直近のクック所要時間 (ミリ秒)
警告・エラー ⚠️
warnings:warnings— このオペレータが出した警告の数errors:errors— このオペレータが出したエラーの数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 曲線が元の形と大きくずれる
✅ Solution:
- Spline Type を Cardinal に変えて元の点を通る方式にする
CV Tension(制御点の張力) を上げて元の形状に近づける- 前処理に Resample SOP を入れて入力点を整える
❌ Problem: 分割数のエラーが出る
✅ Solution:
- Even Length Segments 選択時は
Segment Length(セグメント長) またはOutput Divisions(出力分割数) のどちらかを 0 以外にする - 両方 0 だと「Invalid number of divisions or segment size」エラーになるため値を設定
- Division Method を Standard に戻して挙動を確認
❌ Problem: 開いた線の端まで曲線が届かない
✅ Solution:
First CV Count(先頭点の重複数) を 2〜3 に上げて始点まで曲線を伸ばすLast CV Count(末尾点の重複数) も同様に上げて終点まで伸ばす- Cardinal なら 2、BSpline なら 3 が始点・終点到達の目安
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

