
概要 📖 – 断面をレールに沿わせる
Rails SOPは、複数のレール曲線に沿って断面プリミティブを掃引し、レール間に面 (skin surface) を生成する SOPです。Pairs / First-Last などのスイープ順序、Use Vertex / Connection Vertices による断面頂点のレール固定、Use Direction による法線方向制御で、接続のねじれや面の反転 (flip) を細かく調整します。
主な用途 🎯
- 複数のレール曲線 (backbone) 間に skin surface を張るで、Cross-section 入力の断面プリミティブをレール (Rails) 入力の曲線群に沿わせ、レール間をつなぐ面を 1 ノードで生成
- Pairs / First-Last によるスイープ順序の制御で、ペア掃引 (1&2, 3&4, …) や最初と最後のレールを結ぶ閉ループ掃引へ切替
- Connection Vertices + Use Vertex による頂点固定で、断面ポリゴンの特定頂点をレール 1 / レール 2 に確実に貼り付け、ねじれの少ない面を生成
- Use Direction + Direction による法線方向の固定で、レールが交差して法線が反転する場面でも掃引方向を一定に保ち、面の裏返り (flip) を抑止
- Stretch to Rails による断面の自動伸縮で、レール間の距離に合わせて断面ジオメトリを引き伸ばし、隙間のない面を生成
- Create Output Groups + Group Name による Skin SOP 連携用グループ生成で、各 backbone ごとに自動でグループを切り、後段の Skin SOP で複雑サーフェスを組み上げる準備
データフロー 🔄
入力 1: 断面 (cross-section) プリミティブ + 入力 2: 複数のレール (rails / backbones) 曲線
↓
Cycle Type に従って断面をレール上に配置
↓
Connection Vertices / Scale / Roll / Use Direction で頂点位置・回転・方向を調整
↓
出力: 隣接レール間をつなぐ skin surface
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Page 📁
グループ絞り込み 🎯
X-Section Groups .xsectgrp 🧩
– X-Section Groups (断面グループ) — Cross-section 入力のプリミティブのうち、掃引に使う対象を Pattern Matching で絞り込み
– 空欄なら入力 1 の全プリミティブを断面として使用
– 例: group0 や front* のような Pattern Matching 文字列を指定
Rail Groups .railgrp 🛤️
– Rail Groups (レールグループ) — Rails 入力のプリミティブのうち、レール (backbone) として使う対象を Pattern Matching で絞り込み
– 空欄なら入力 2 の全プリミティブをレールとして使用
サイクル種別 🔄
Cycle Type (循環方式) — 断面プリミティブをレール上に並べる順序ロジックを指定します。
| 項目 | 内部名 | 説明 |
|---|---|---|
| Cycle Primitives | .cycle |
入力 1 の断面プリミティブを順番に循環させて各レール頂点に配置 (頂点 0 にプリミティブ 0、頂点 1 にプリミティブ 1、…) |
スイープ動作 🌉
Sweep along Pairs of Rails .pairs 👯
– Sweep along Pairs of Rails (ペア単位スイープ) — オンにするとレール 1&2、3&4、5&6 のように 排他的なペア単位で掃引
– オフだとレール 1&2、2&3、3&4 のように 連続的な隣接ペアで掃引 (一般的なリボン状の連結面)
Sweep along First and Last Rail .firstl 🔁
– Sweep along First and Last Rail (最初と最後を結ぶ) — オンにすると最後のレールと最初のレールの間にも断面を掃引
– チューブ状や閉じたリング状のサーフェスを作る際に有効
Stretch to Rails .stretch 📐
– Stretch to Rails (レールに合わせ伸縮) — オンにすると断面ジオメトリをレール間の距離に合わせて引き伸ばす
– レール間隔が不均一な場合でも隙間のない skin を作りたい場面で有効
– オフだと断面の形状はそのまま保たれ、レールの位置に断面の頂点だけが寄せられる
頂点固定の制御 📌
Use Vertex .usevtx 📌
– Use Vertex (頂点指定モード) — オンにすると断面ポリゴンの特定 2 頂点を Connection Vertices で指定し、それぞれをレール 1 とレール 2 に固定
– 例: 「断面の 1 番目の頂点をレール 1 に、7 番目の頂点をレール 2 に貼り付けたい」のように、貼り付け位置をユーザが明示する用途で使用
– オフだと断面の自動マッピングに任せる (頂点固定なし)
Connection Vertices .vertex 🔢
– Connection Vertices (接続頂点) — 断面ポリゴンのうち、レール 1 / レール 2 に固定する 2 つの頂点インデックスを指定
– Use Vertex がオンのときに有効
– インデックスは 0 始まり (例: 0 と 6)
形状の拡縮と回転 🎚️
Scale .scale 📏
– Scale (拡縮率) — 掃引する断面に対して一律に適用される全体スケール
– レール間隔に対して断面が大きすぎる・小さすぎる場合の微調整に使用
Roll .roll 🔁
– Roll (ロール角度) — 断面を backbone (レール) 軸まわりに回転させる角度 (度)
– 全ての断面に同じ回転量が適用 (累積回転ではない)
– 掃引後に面のテクスチャ方向や法線方向を回したい場合に使用
方向ベクトルの制御 🧭
Fix Flipping .noflip 🔃
– Fix Flipping (反転補正) — Use Direction がオフでレール同士が交差し法線が反転 (flip) してしまう場面で、自動で反転を補正
– レール曲線がねじれる構図でも面の表裏が安定する
Use Direction .usedir 🧭
– Use Direction (方向ベクトル使用) — オンにすると Direction で指定した固定ベクトルを掃引時の上方向 (up vector) として使用
– オフだとジオメトリの法線 (normals) を上方向として使用
– レールの法線が不安定な場面で 面のねじれを止める切り札
Direction .dir 📍
– Direction (方向ベクトル) — Use Direction がオンのときに参照される固定方向ベクトル (X / Y / Z の 3 成分)
– 例: (0, 1, 0) を指定するとワールド Y 軸を一律 up vector に固定
出力グループ生成 🏷️
Create Output Groups .newg 🏷️
– Create Output Groups (出力グループ生成) — オンにすると backbone (レール) 1 本ごとに出力プリミティブのグループを自動生成
– 後段の Skin SOP でグループ単位の skinning を行う前準備として有効
Group Name .railname 📝
– Group Name (グループ名) — Create Output Groups で生成されるグループの名前を Pattern Matching で指定
– 例: rail* を指定すると rail0、rail1、… のように番号付きグループが生成
実践アイデア 💡
Example 1: 2レール間にチューブ生成 🛢️
Circle SOP (断面) + Circle SOP × 2 (レール) → Merge SOP (レール側) → Rails SOP (Cross-section 入力 + Rails 入力) → Out SOP
断面に 1 つの円、レール側に 2 本のレール曲線を渡し、レール間をつなぐチューブ状サーフェスを生成する最小構成例です。Rails SOP は 2 入力で、入力 1 に断面、入力 2 にレール群を渡します。レール側は複数曲線を Merge SOP で 1 入力にまとめてから接続します。
- 断面用の Circle SOP を 1 個配置 (これが掃引される cross-section)
- レール用の Circle SOP / Line SOP などを 2 本作成し、X 軸方向に並べて配置
- レール側 2 本を Merge SOP で 1 入力にまとめる
- Rails SOP の入力 1 に断面用 Circle SOP を、入力 2 に Merge SOP をそれぞれ接続
Sweep along Pairs of Railsはオフ (隣接ペア掃引) のまま、Geometry Viewer でレール間にチューブ状の面が生成されることを確認
Example 2: 頂点指定で断面を固定 📌
Rectangle SOP (断面) + Line SOP × 2 (レール) → Merge SOP → Rails SOP (Use Vertex=ON, Connection Vertices=0,2) → Material SOP
矩形 (4 頂点) の断面を 2 本のレール曲線に沿わせ、Use Vertex + Connection Vertices で「頂点 0 をレール 1 に、頂点 2 をレール 2 に」と明示的に固定して、断面の自動向き付けに任せずユーザが貼り付け方向を制御する用途です。リボン状の帯や、断面の特定エッジをレールに沿わせたい場合の基本テクニックです。
- Rectangle SOP を 1 個配置 (4 頂点の断面)
- Line SOP を 2 本作成して X 軸方向に並べる
- Rails SOP の入力 1 に Rectangle SOP、入力 2 に Merge SOP (2 本のレール) を接続
Use Vertexをオンに切替Connection Verticesに0と2を指定 (向かい合う 2 頂点をそれぞれのレールに固定)Stretch to Railsをオンにしてレール間隔に合わせて断面が伸縮するように設定
Example 3: グループ生成で一括スキン 🏷️
Circle SOP (断面) + 複数 Line SOP (レール群) → Merge SOP → Rails SOP (Create Output Groups=ON, Group Name=rail*) → Skin SOP
複数の backbone (レール) ごとに自動でグループを切り、後段の Skin SOP でグループ単位の skinning を行う一括処理パターンです。Create Output Groups と Group Name を組み合わせると、レール本数が増えても後段で扱いやすいプリミティブグループ構造のままサーフェスを生成します。
- 断面用の Circle SOP を 1 個配置
- Line SOP を 3 本以上作成し、Merge SOP でレール群としてまとめる
- Rails SOP に断面 / レールを接続し、
Create Output Groupsをオンに Group Nameにrail*を指定 (rail0、rail1、… のように自動命名)- 後段に Skin SOP を接続し、グループ単位での skinning を有効化
- Geometry Viewer で各 backbone 単位にサーフェスが識別されることを確認
関連オペレータ 🔗
類似機能OP 🔍
- Sweep SOP — 断面 (cross-section) を単一の backbone (パス) に沿って掃引してサーフェスを生成 (Rails は複数レール間を結ぶ、Sweep は単一パス追従)
- Skin SOP — 並べられた複数の face / curve から skin surface を生成 (Rails の出力 backbone 群を後段で skinning する典型構成)
- Bridge SOP — プロファイル曲線・面の間に補間サーフェス (フィレットや遷移面) を生成 (Rails はレールに沿わせる、Bridge は端点間補間)
組み合わせ推奨OP 🔄
- Skin SOP — Rails で生成した backbone 群 + 出力グループを後段で skinning して複雑サーフェスを構築
- Merge SOP — Rails の入力 2 に渡すレール曲線群を 1 入力にまとめる前処理
- Carve SOP — 既存サーフェスからレールとなる曲線を切り出して Rails の入力に渡す
- Refine SOP — Rails で生成された高密度サーフェスを Unrefine オプションで簡素化
前処理・後処理SOP 🎯
- 前処理: Circle SOP、Profile SOP、Carve SOP、Merge SOP
- 後処理: Skin SOP、Refine SOP、Transform SOP、Material SOP、Out SOP
Info CHOP情報 📊
Rails 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 が想定外にねじれる・面が裏返る
✅ Solution:
Use DirectionをオンにしてDirectionベクトル (例:(0, 1, 0)) で up vector を固定し、レールの法線に依存しない掃引にする- Use Direction を使えない構図 (レールが上下に曲がる等) では
Fix Flippingをオンにして自動反転補正に任せる - 断面ポリゴンの頂点順序が逆向きの場合は前段に Convert SOP や Sort SOP を入れて頂点順序を揃える
❌ Problem: 断面が想定の頂点でレールに固定されない
✅ Solution:
Use Vertexをオンに切替Connection Verticesに断面ポリゴンの実際の頂点インデックス (0 始まり) を指定 — 例: 4 頂点ポリゴンで対辺を固定したいなら0と2- 断面の頂点数を Info CHOP の
num_pointsで事前に確認し、指定インデックスが範囲内に収まることを確認
❌ Problem: レールが多数のときに面の組み合わせが想定と違う
✅ Solution:
Sweep along Pairs of Railsをオンにするとレール 1&2、3&4 のようなペア単位掃引、オフだと 1&2、2&3 のような連続隣接掃引になる仕様を確認- 閉じたリング状サーフェスを作りたい場合は
Sweep along First and Last Railをオンにして最初と最後のレールを結ぶ - 入力 2 のレール順序が想定どおりかを確認 (Merge SOP の入力順がそのまま掃引順になる)
❌ Problem: レール間隔が不均一で skin に隙間ができる
✅ Solution:
Stretch to Railsをオンにして断面ジオメトリをレール間距離に合わせて伸縮させる- 断面ジオメトリの解像度が低い場合は前段で Refine SOP をかけて頂点数を増やす
Use Vertex+Connection Verticesで固定頂点を明示し、自動マッピングのズレを排除
❌ Problem: 後段の Skin SOP でグループ単位の skinning ができない
✅ Solution:
Create Output Groupsをオンにして backbone ごとのプリミティブグループを生成Group Nameにrail*のように Pattern Matching 文字列を指定し、後段で参照しやすい命名にする- 後段の Skin SOP の Group パラメータで Rails が生成したグループ名を指定する
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Rails SOP
- TouchDesigner公式ドキュメント – Sweep SOP
- TouchDesigner公式ドキュメント – Skin SOP
- TouchDesigner公式ドキュメント – Bridge SOP

