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

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

Polyspline SOP でポリゴンを滑らかな曲線に変換する図

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

概要 📖 – ポリゴンを滑らかな曲線に変換

Polyspline SOPは、ポリゴンをスプライン曲線に変換するノードで、各種スプライン方式に対応する SOPです。ベジェ・Bスプライン・Cardinal など 7 種類の曲線方式を選べ、分割方法で頂点の並び方も調整します。

主な用途 🎯

  • カクカクしたポリゴンの線を滑らかな曲線に変換
  • ベジェやBスプライン等の曲線方式の選び分け
  • 曲線を等間隔で分割し直して頂点数を整える
  • 閉じた図形・開いた図形の輪郭を曲線化
  • 他の形状生成ノードへ渡す前の輪郭整形

データフロー 🔄

入力: ポリゴンの線・面

曲線方式と分割方法に応じて頂点を補間

出力: 滑らかなスプライン曲線

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 は元の点を通過するため、輪郭の位置を保ったまま角を丸められます。

  1. Line SOP やトレースで作ったポリゴンの線を入力に接続
  2. Polyspline SOP の Spline Type を Cardinal に設定
  3. Sample Divisions を上げて曲線の滑らかさを調整
  4. 出力を 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 が始点・終点到達の目安

参考資料 📚

その他 🔗

公式リソース 📖

関連記事 🔗

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