
概要 📖 – 曲線列から面を作る
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
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Page 📁
断面の指定 📐
U Cross Sections .uprims 🪡
– U Cross Sections (U 方向の断面グループ) — 入力 1 の face / surface のうち、U 方向の cross-section として使う対象を Pattern Matching で絞り込み
– 空欄なら入力 1 の全プリミティブを cross-section として使用
– 例: group0 や front* のような 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 のときは設定が無視される点に注意してください。
形状の精度 🎯
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 が無理に接続されて意図しない面が生成されることがあります。
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 が得られます。
- Circle SOP を 2 個配置 (これが cross-section として使われる)
- 1 つの Circle を Z 軸方向に少し平行移動して 2 本目の cross-section を作る
- 両 Circle を Merge SOP でまとめて入力 1 に整える
- Skin SOP を配置し、入力 1 に Merge SOP を接続
ConnectivityをQuadrilateralsに、Preserve Shapeをオンに設定- 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 ノードで複数面を一括生成できます。
- Circle SOP を 1 個配置 (cross-section 用)
- Line SOP を 3 本以上作成して並べ、Merge SOP でレール群としてまとめる
- Rails SOP に断面 / レール群を接続し、
Create Output Groupsをオンに、Group Nameをrail*に設定 - Skin SOP を後段に接続し、
U Cross Sectionsにrail*を指定してグループ単位の skinning を有効化 SkinパラメータをGroups of N Primitivesにして N の値で結合粒度を調整- 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 との連携が安定するポリゴンメッシュが得られます。
- Circle SOP を 4 個配置し、それぞれ Z 軸方向に等間隔で配置 (cross-section 列を作る)
- 各 Circle の Primitive Type を Mesh に切替
- 全 Circle を Merge SOP で 1 入力にまとめる
- Skin SOP を後段に接続し、
ConnectivityをTrianglesに、Output Polygonsをオンに設定 - 後段に Material SOP を接続してマテリアルを割り当て
- 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 🎯
- 前処理: Circle SOP、Profile SOP、Carve SOP、Merge SOP
- 後処理: Refine SOP、Convert SOP、Transform SOP、Material SOP、Out 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 WrapをOnに切替 - cross-section プリミティブの閉じ方を継承したい場合は
V WrapをIf 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 Sectionsに Rails SOP が生成したグループ名 (rail*など) を Pattern Matching で指定
❌ Problem: 出力が NURBS のままで後段シェーダで扱えない
✅ Solution:
Output Polygonsをオンに切替 (Mesh 入力時に有効)- NURBS / Bzier 入力の場合は後段に Convert SOP を挟んでポリゴンメッシュに変換
ConnectivityをTrianglesまたは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 で確認
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Skin SOP
- TouchDesigner公式ドキュメント – Rails SOP
- TouchDesigner公式ドキュメント – Sweep SOP
- TouchDesigner公式ドキュメント – Bridge SOP

