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

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

Skin SOP で並んだ cross-section から skin surface を生成する図

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

概要 📖 – 曲線列から面を作る

Skin SOPは、並べられた複数の cross-section (face / surface) から skin surface を生成する SOPです。Connectivity による出力トポロジ、Preserve Shape による精度モード、V Wrap による閉じた surface 生成、Skin (適用方式) + N によるサブグループ skinning など、cross-section の並びを面に変換する細部を制御します。

主な用途 🎯

  • 並べられた cross-section (曲線・面) 群を 1 枚の skin surface に張り合わせるで、断面が等高線のように並んだ入力から滑らかな面を 1 ノードで生成し、ロフト / 押し出し / リブから面を起こす作業を 1 ステップにまとめます
  • Connectivity (接続トポロジ) によるポリゴン分割方式の切替で、Rows / Columns / Triangles / Quadrilaterals / Alternating Triangles など 6 種類から出力面のトポロジを選択し、後段のレンダリング・サブディビジョン要件に合わせます
  • Preserve Shape (形状保持) による精度モードの切替で、断面を厳密に通過する高精度モードと、CV を共有する高速モードを使い分け、cross-section の通過誤差と計算コストのバランスを調整します
  • V Wrap (V 方向の閉じ方) で circular / cylindrical surface を生成で、最後の断面と最初の断面をつなぐ閉じた skin (チューブやドーナツ状) を 1 設定で構築します
  • Skin (適用方式) + N (個数) によるサブグループ単位の一括 skinningで、6 つの cross-section を 0-1 / 2-3 / 4-5 のようにペア単位で skinning したり、0-2-4 / 1-3-5 のように飛び石パターンで skinning でき、複雑な分岐面を 1 ノードで構築できます
  • Output Polygons による NURBS → ポリゴンメッシュ変換で、入力が Mesh 系のときに ポリゴンとして出力し、Material SOP やシェーダ系後段との互換を確保します

データフロー 🔄

入力 1: 並んだ U 方向 cross-section (face / surface) 群 + 入力 2 (任意): V 方向 cross-section 群

Connectivity / Preserve Shape / V Wrap / V Order に従って cross-section 間を補間し skin surface を構築

Skin (適用方式) + N の指定があればサブグループ単位で繰り返し

出力: NURBS / Bzier / ポリゴンメッシュの skin surface

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Page 📁

断面の指定 📐

U Cross Sections .uprims 🪡
U Cross Sections (U 方向の断面グループ) — 入力 1 の face / surface のうち、U 方向の cross-section として使う対象を Pattern Matching で絞り込み
– 空欄なら入力 1 の全プリミティブを cross-section として使用
– 例: group0front* のような Pattern Matching 文字列を指定

V Cross Sections .vprims 🧵
V Cross Sections (V 方向の断面グループ) — V 方向の cross-section として使う対象を Pattern Matching で絞り込み
– 入力 2 が接続されていれば、その入力からグループを選択
– 入力 2 が無い場合は入力 1 の中から V 方向グループを選択 (1 入力で U / V 両方を扱う bilinear skin の用途)

接続トポロジ 🧮

Connectivity (接続トポロジ) — 出力ポリゴン / メッシュの面分割方式を 6 種類から選択します (出力が polygon / mesh のときのみ結果が表示)。

項目 内部名 説明
Rows .rows 水平方向 (U) のラインのみを生成
Columns .cols 垂直方向 (V) のラインのみを生成
Rows and Columns .rowcol Rows と Columns の両方を生成。ワイヤーフレーム表示では Quads に見えるが、polygon 出力時はすべての面が開いた状態
Triangles .triangles 出力面を三角形で構成
Quadrilaterals .quads 出力面を四角形 (quads) で構成 (デフォルト)
Alternating Triangles .alttriangles 向きの異なる三角形を交互に並べる方式 (Triangles に類似)

※ 注意: Connectivity の結果は出力プリミティブが polygon / mesh のときのみ表示されます。NURBS / Bzier surface のときは設定が無視される点に注意してください。

引用元: 公式 docs

形状の精度 🎯

Preserve Shape .keepshape 🎯
Preserve Shape (形状保持) — 線形 skin (linear skin) の精度モード切替
– オン: 生成面が各 cross-section を厳密に通過 (高精度・低速)
– オフ: 生成面の CV が cross-section の CV と一致するだけ (高速・低精度)
– cross-section の CV が近接しているときや CV 数が偏っているときは、オンだと不自然な形状になることがあるため、その場合は CV をジッタリングするか V Order を変えるか、オフに戻す

V方向の閉じ方 🔁

V Wrap (V 方向のラップ) — V 方向 (cross-section が並ぶ方向) で surface を閉じるかどうかを指定します。チューブ / ドーナツ状の閉じた skin を作りたいときに使用します。

項目 内部名 説明
Off .nonewv V 方向の skin を閉じない (開いた surface)
On .wv V 方向の skin を閉じる (最後と最初の cross-section をつなぐ、チューブ / ドーナツ状)
If primitive does .primv cross-section プリミティブの閉じ方を継承

※ 注意: V Wrap はバイリニア skin (1 入力で U / V 両方を扱う構成) では無視されます。また、cross-section 自体が閉じていない場合に On にすると、最後と最初の cross-section が無理に接続されて意図しない面が生成されることがあります。

引用元: 公式 docs

V方向の次数 🔢

Use V Order .force 🔢
Use V Order (V 次数の指定有効化) — オンにすると V Order で指定した次数を skin の V 方向次数として使用
– オフだと自動で cubic (4 次) になる (cross-section が open で 4 本未満、または closed で 3 本未満の場合は、その本数に応じて自動で下げられる)

V Order .orderv 📐
V Order (V 方向の次数) — Use V Order がオンのときに使用される V 方向次数
– NURBS surface は order n を作るのに最低 n 本 (open) または n-1 本 (closed) の cross-section が必要
– Bzier surface は同じ次数を作るのに M*(n-1)+1 本 (open) または M*(n-1) 本 (closed) の cross-section が必要 (M は非負整数)
– 例: order 4 (cubic) の NURBS open surface には最低 4 本の cross-section が必要

適用方式 🗂️

Skin (適用方式) — cross-section 群の取り扱い方式を指定します。すべて 1 枚の surface にまとめる方式と、N 個ずつグループ化して個別 surface を生成する方式があります。

項目 内部名 説明
All Primitives .all 全 cross-section を 1 枚の skin surface にまとめる (デフォルト)
Groups of N Primitives .group N 個単位で cross-section をグループ化 / 飛び石化して個別 skin surface を生成 (N は次の N パラメータで指定)

サブグループ間隔 🔢

N .inc 🔢
N (グループ化サイズ / 間隔) — Skin が Groups of N Primitives のときの cross-section グループサイズ (N ≥ 2)
– 例: cross-section が 6 本 (番号 0〜5) で N = 2 のとき:
– Groups モードでは 0-1 / 2-3 / 4-5 のようなペアごとに skin が生成
– Skipping (飛び石) モードでは 0-2-4 / 1-3-5 のように間引き skin が生成

出力の制御 📤

Keep Primitives .prim 📌
Keep Primitives (入力プリミティブの保持) — 入力の cross-section プリミティブを出力にも残すかどうか
– オン: 入力 cross-section を出力に含める (cross-section と skin surface が同時に存在)
– オフ: 入力 cross-section は出力から削除 (skin surface のみ)

Output Polygons .polys 🧱
Output Polygons (ポリゴン出力) — オンにすると surface type が Mesh のときに skin surface をポリゴンに変換して出力
– シェーダ / Material 系の後段がポリゴン前提の場合に有効
– NURBS / Bzier 入力の場合は影響なし


実践アイデア 💡

Example 1: 2曲線から面を生成 🪡

Circle SOP × 2 (cross-section) → Merge SOP → Skin SOP → Out SOP

2 つの cross-section (円) を Merge SOP でまとめて Skin SOP に渡し、両者の間を 1 枚の skin surface で張る最小構成例です。Skin SOP は等高線のように並んだ cross-section をつないで面を起こすので、ロフト (loft) や押し出しの代わりに使えます。Connectivity を Quadrilaterals に、Preserve Shape をオンにすると、両端の円を厳密に通過する四角形メッシュの skin が得られます。

  1. Circle SOP を 2 個配置 (これが cross-section として使われる)
  2. 1 つの Circle を Z 軸方向に少し平行移動して 2 本目の cross-section を作る
  3. 両 Circle を Merge SOP でまとめて入力 1 に整える
  4. Skin SOP を配置し、入力 1 に Merge SOP を接続
  5. ConnectivityQuadrilaterals に、Preserve Shape をオンに設定
  6. Geometry Viewer で 2 つの円の間にチューブ状の skin surface が生成されることを確認

Example 2: Railsと連携して複雑面 🛤️

Circle SOP (cross-section) + Line SOP × N (rails) → Merge SOP → Rails SOP (Create Output Groups=ON) → Skin SOP

Rails SOP で複数の backbone (レール) に沿ってグループ単位の cross-section を生成し、それを後段の Skin SOP でグループ単位の skinning に渡す典型的な連携パターンです。Rails が backbone ごとにプリミティブグループを切ってくれるので、Skin の U / V Cross Sections に Pattern Matching でグループ名を指定すれば、1 ノードで複数面を一括生成できます。

  1. Circle SOP を 1 個配置 (cross-section 用)
  2. Line SOP を 3 本以上作成して並べ、Merge SOP でレール群としてまとめる
  3. Rails SOP に断面 / レール群を接続し、Create Output Groups をオンに、Group Namerail* に設定
  4. Skin SOP を後段に接続し、U Cross Sectionsrail* を指定してグループ単位の skinning を有効化
  5. Skin パラメータを Groups of N Primitives にして N の値で結合粒度を調整
  6. Geometry Viewer で各 backbone 単位に独立した skin surface が生成されることを確認

Example 3: ポリゴンに変換出力 🧱

Circle SOP × 4 (cross-section, Mesh type) → Merge SOP → Skin SOP (Output Polygons=ON, Connectivity=Triangles) → Material SOP

Mesh 系の cross-section から生成された skin surface を、後段のシェーダやレンダラー前提に合わせてポリゴンメッシュに変換する出力パターンです。Output Polygons をオンにし Connectivity を Triangles に設定すると、PBR シェーダや Material SOP との連携が安定するポリゴンメッシュが得られます。

  1. Circle SOP を 4 個配置し、それぞれ Z 軸方向に等間隔で配置 (cross-section 列を作る)
  2. 各 Circle の Primitive Type を Mesh に切替
  3. 全 Circle を Merge SOP で 1 入力にまとめる
  4. Skin SOP を後段に接続し、ConnectivityTriangles に、Output Polygons をオンに設定
  5. 後段に Material SOP を接続してマテリアルを割り当て
  6. Geometry Viewer で三角ポリゴンメッシュとして表示されることを確認

関連オペレータ 🔗

類似機能OP 🔍

  • Rails SOP — 断面を複数レール曲線に沿って掃引して surface を生成 (Skin は cross-section 列の間を埋める、Rails はレール群間を渡す)
  • Sweep SOP — 断面を 1 本の backbone に沿って掃引して surface を生成 (Skin は cross-section 列を埋める、Sweep は単一パス追従)
  • Revolve SOP — 1 つのプロファイルを軸まわりに回転させて surface を生成 (Skin は複数 cross-section 必要、Revolve は単一プロファイル + 軸)
  • Bridge SOP — 2 つのプロファイルの間に補間 surface を生成 (Skin は N 個の cross-section、Bridge は 2 つの端点間補間に特化)

組み合わせ推奨OP 🔄

  • Rails SOP — Rails の Create Output Groups で生成された backbone 単位グループを、Skin の U Cross Sections に渡してグループ単位 skinning
  • Merge SOP — Skin の入力 1 に渡す cross-section 群を 1 入力にまとめる前処理
  • Carve SOP — 既存サーフェスから等間隔の cross-section を切り出し、Skin の入力に渡す
  • Refine SOP — Skin で生成された高密度サーフェスを Unrefine オプションで簡素化
  • Convert SOP — Skin の NURBS / Bzier 出力をポリゴンメッシュに変換して後段シェーダに渡す

前処理・後処理SOP 🎯


Info CHOP情報 📊

Skin 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: 生成された skin surface が cross-section を厳密に通過しない
✅ Solution:

  • Preserve Shape をオンにして cross-section を厳密に通過するモードに切替
  • それでも形状が不安定な場合は V Order を低く (3 など) して曲面の自由度を下げる
  • cross-section の CV 数が極端に偏っている場合は、前段に Refine SOP をかけて CV 数を揃える

❌ Problem: skin surface が V 方向に閉じない、または余分に閉じる
✅ Solution:

  • 閉じたチューブ状にしたい場合は V WrapOn に切替
  • cross-section プリミティブの閉じ方を継承したい場合は V WrapIf primitive does に切替
  • 1 入力で U / V 両方を扱う bilinear skin の場合は V Wrap が無視されるため、cross-section 自体を閉じておく必要があることに注意

❌ Problem: グループ単位の skinning が想定どおりに動かない
✅ Solution:

  • Skin パラメータを Groups of N Primitives に切替
  • N の値が cross-section の本数に対して整合する値か確認 (6 本のときに N = 2 ならペア skin、N = 3 なら 3 本ずつ skin)
  • U Cross SectionsRails SOP が生成したグループ名 (rail* など) を Pattern Matching で指定

❌ Problem: 出力が NURBS のままで後段シェーダで扱えない
✅ Solution:

  • Output Polygons をオンに切替 (Mesh 入力時に有効)
  • NURBS / Bzier 入力の場合は後段に Convert SOP を挟んでポリゴンメッシュに変換
  • ConnectivityTriangles または Quadrilaterals に設定して後段が扱いやすいトポロジに揃える

❌ Problem: 入力 cross-section の認識が想定と違う
✅ Solution:

  • U Cross Sections / V Cross Sections の Pattern Matching 文字列が cross-section のグループ名と一致しているか確認
  • 1 入力で U / V 両方を扱いたい場合は、入力 1 に U / V 両方のグループを含めて bilinear skin として扱う
  • 前段で Merge SOP を使って cross-section の順序が想定どおりかを Geometry Viewer で確認

参考資料 📚

その他 🔗

公式リソース 📖

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