
概要 📖 – 開口部を平面か曲面で塞ぐ
Cap SOPは、開いた端面を平面または丸みのある形状で閉じて、チューブやサーフェスの開口部を塞ぐ SOPです。U 方向と V 方向のそれぞれで始端・終端のキャップ形状を選び、none(なし)/facet(面)/share(共有面)/round(丸み)/tangent(接線) の 5 種類から自由に組み合わせできます。
主な用途 🎯
- NURBS チューブやメッシュの開いた端面を平面または丸みのある形状で塞ぐ
- U 方向と V 方向のそれぞれで個別にキャップを有効化し、始端と終端を別形状に切替
- 5 種類のキャップ形状(
none/facet/share/round/tangent) からプリミティブの見た目を選択 - Divisions と Scale で丸みキャップの解像度と高さを調整し、後段のレンダリング品質を確保
- Preserve NURB Shape で元の NURBS サーフェスを変形させずに端面だけ閉じる
データフロー 🔄
入力: 開いた端を持つ SOP (Tube / Sweep / Revolve / Skin など)
↓
Group で対象プリミティブを絞込
↓
U/V それぞれの始端・終端にキャップ形状を割当
↓
出力: 端面が閉じたポリゴンまたは NURBS サーフェス
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Page 📋
対象グループ .group 🎯
キャップを適用する対象プリミティブを指定
| 項目 | 内部名 | 説明 |
|---|---|---|
| Group | .group |
Group (対象グループ) — キャップを適用したい Group SOP で作成済みのプリミティブグループ名を指定します。空欄の場合は入力 SOP の全プリミティブが対象になります。 |
U Caps Page 📐
U方向の形状保持 .pshapeu 🛡️
Preserve NURB Shape U .pshapeu 🛡️
– Preserve NURB Shape U (U方向の形状保持) をオンにすると、NURBS サーフェスをキャップする際に、キャップ位置でクランプ処理を行って元のサーフェス形状を保ったまま閉じます
– オフの場合はキャップ追加によって元の NURBS 制御点配置が変わり、サーフェスがわずかに変形する可能性があります
U方向の始端キャップ .firstu 🔹
U 方向の始端に適用するキャップ形状を選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| No End Cap | .none |
この端は閉じずに開いたまま (キャップなし) |
| End Cap Faceted | .facet |
新しい面 (フェース) を作って閉じる。元プリミティブとは独立した点を使う |
| End Cap Shared | .share |
新しい面 (フェース) を作って閉じる。元プリミティブの点を共有する |
| End Cap Rounded | .round |
丸い (ドーム状) のキャップを作る。同心円メッシュで弾丸形状になる |
| End Cap Tangential | .tangent |
元サーフェスの接線方向に沿うように丸みキャップを作る |
U始端の分割と高さ .divsu1_scaleu1 📏
Divisions .divsu1 🔢
– Divisions (分割数) — U 方向始端の丸みキャップを構成する同心円の本数を指定
– 値を増やすほどキャップ表面の滑らかさが向上しますが、ポリゴン数も増えます
Scale .scaleu1 📐
– Scale (高さ倍率) — 丸みキャップのドーム高さを正負の値で調整
– 正の値で外側に膨らみ、負の値で内側にへこみます
U方向の終端キャップ .lastu 🔸
U 方向の終端に適用するキャップ形状を選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| No End Cap | .none |
終端は閉じずに開いたまま (キャップなし) |
| End Cap Faceted | .facet |
終端側に独立した点で構成される面を作って閉じる |
| End Cap Shared | .share |
終端側に元プリミティブと点を共有する面を作って閉じる |
| End Cap Rounded | .round |
終端側に丸い (ドーム状) のキャップを作る |
| End Cap Tangential | .tangent |
終端側で接線方向に沿う丸みキャップを作る |
U終端の分割と高さ .divsu2_scaleu2 📏
Divisions .divsu2 🔢
– Divisions (分割数) — U 方向終端の丸みキャップを構成する同心円の本数を指定
– 始端と独立して値を設定でき、片側だけ高解像度にすることも可能
Scale .scaleu2 📐
– Scale (高さ倍率) — 終端の丸みキャップのドーム高さを正負の値で調整
– 正で外側に膨らみ、負で内側にへこむ挙動は始端と同じ
V Caps Page 📐
V方向の形状保持 .pshapev 🛡️
Preserve NURB Shape V .pshapev 🛡️
– Preserve NURB Shape V (V方向の形状保持) をオンにすると、V 方向のキャップ位置でクランプ処理を行って元の NURBS サーフェス形状を保ちます
– U 方向の Preserve NURB Shape U と独立して設定でき、片方向だけ形状保持することも可能
V方向の始端キャップ .firstv 🔹
V 方向の始端に適用するキャップ形状を選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| No End Cap | .none |
V 方向の始端を閉じずに開いたまま (キャップなし) |
| End Cap Faceted | .facet |
V 始端側に独立した点で構成される面を作って閉じる |
| End Cap Shared | .share |
V 始端側に元プリミティブと点を共有する面を作って閉じる |
| End Cap Rounded | .round |
V 始端側に丸い (ドーム状) のキャップを作る |
| End Cap Tangential | .tangent |
V 始端側で接線方向に沿う丸みキャップを作る |
V始端の分割と高さ .divsv1_scalev1 📏
Divisions .divsv1 🔢
– Divisions (分割数) — V 方向始端の丸みキャップを構成する同心円の本数を指定
– 値を増やすほどキャップ表面が滑らかになる代わりにポリゴン数が増えます
Scale .scalev1 📐
– Scale (高さ倍率) — V 始端の丸みキャップのドーム高さを正負の値で調整
– 正で外側へ、負で内側へ凹む挙動
V方向の終端キャップ .lastv 🔸
V 方向の終端に適用するキャップ形状を選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| No End Cap | .none |
V 方向の終端を閉じずに開いたまま (キャップなし) |
| End Cap Faceted | .facet |
V 終端側に独立した点で構成される面を作って閉じる |
| End Cap Shared | .share |
V 終端側に元プリミティブと点を共有する面を作って閉じる |
| End Cap Rounded | .round |
V 終端側に丸い (ドーム状) のキャップを作る |
| End Cap Tangential | .tangent |
V 終端側で接線方向に沿う丸みキャップを作る |
V終端の分割と高さ .divsv2_scalev2 📏
Divisions .divsv2 🔢
– Divisions (分割数) — V 方向終端の丸みキャップを構成する同心円の本数を指定
– 始端と独立して設定可能
Scale .scalev2 📐
– Scale (高さ倍率) — V 終端の丸みキャップのドーム高さを正負の値で調整
– 始端の Scale と独立
実践アイデア 💡
Example 1: チューブの両端を塞ぐ 🥫
Tube SOP → Cap SOP (First U=facet, Last U=facet) → Render TOP
Tube SOP で生成した開いた円柱の両端を Cap SOP の U 方向 facet モードで閉じて、密閉された円筒モデルを 1 ノードで完成させる基本フロー。
- Tube SOP を配置し、Height と Radius で円筒の寸法を指定
- Cap SOP を接続し、
First U CapとLast U Capをどちらもfacetに設定 - 両端が平面で閉じた密閉円柱が出力される
Example 2: ドーム形状を作る 🏔️
Tube SOP → Cap SOP (First U=round, Divisions=8) → Material
Tube SOP の片端だけを Cap SOP の rounded モードで丸めて、ドーム形状のモニュメントや弾丸風のオブジェクトを生成する。Divisions を調整して滑らかさを制御する。
- Tube SOP を配置 (Radius は均一、Height は適度に)
- Cap SOP を接続、
First U Capをroundに、Last U Capをfacetに Divisionsを 8〜16 に上げてドームを滑らかにScaleでドームの高さを調整してプロポーションを決定
Example 3: 回転体の端面を閉じる 🍶
Profile SOP → Revolve SOP (部分回転) → Cap SOP → Convert SOP
Revolve SOP で 360 度未満の部分回転を行うと両端が開いたサーフェスが生成される。Cap SOP の V 方向 facet で開口部を閉じて、半割の壺やシェルのような形状を仕上げる。
- Profile SOP で輪郭曲線を作成
- Revolve SOP で 180 度や 270 度の部分回転を行い、両端が開いた状態にする
- Cap SOP を接続し、
First V CapとLast V Capをfacetに - Convert SOP で NURBS をポリゴンに変換して後段のレンダリングへ渡す
関連オペレータ 🔗
類似機能OP 🔍
- Polypatch SOP — ポリゴンの穴を面で埋める
組み合わせ推奨OP 🔄
- Tube SOP — 両端が開いた円筒の生成元として最頻出の組合せ
- Sweep SOP — スイープ生成サーフェスの両端処理
- Revolve SOP — 部分回転で生じる開口部の蓋
- Skin SOP — 曲線群から張ったスキンの端面処理
- Convert SOP — キャップ済み NURBS をポリゴンに変換して後段へ
- Group SOP —
Groupパラメータで対象プリミティブを絞込
前処理・後処理SOP 🎯
- 前処理: Tube SOP、Sweep SOP、Revolve SOP、Skin SOP、Rails SOP
- 後処理: Convert SOP、Transform SOP、Facet SOP、Polyreduce SOP
Info CHOP情報 📊
Cap 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— 直近のクック所要時間 (ミリ秒)。Divisions を上げると増加cook_frame:cook_frame— このオペレータが最後にクックされたフレーム番号
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: キャップが追加されない
✅ Solution:
First U Cap/Last U Cap/First V Cap/Last V Capがすべてnoneになっていないか確認Groupパラメータで指定したプリミティブグループが入力 SOP に存在するか確認 (タイプミスや空グループでは何も処理されない)- 入力 SOP のサーフェスが本当に開いた端を持っているか確認 (既に閉じているメッシュには追加の面は作られない)
❌ Problem: NURBS サーフェスの形が変わってしまう
✅ Solution:
Preserve NURB Shape U/Preserve NURB Shape Vをオンにして、キャップ位置でクランプ処理を有効化roundやtangentモードはサーフェス末端を変形させるため、形状維持優先ならfacetまたはshareを選択- 上流で Refine SOP 等を使い NURBS の制御点密度を整えてから Cap SOP を適用
❌ Problem: 丸みキャップがカクついて見える
✅ Solution:
Divisionsを 8 以上に増やして同心円の本数を上げ、表面を滑らかにするScaleの値が小さすぎるとドームがほぼ平面になるため、適切な高さに調整- 後段で Subdivide SOP を併用してメッシュ全体の滑らかさを底上げする
❌ Problem: パフォーマンスが重い
✅ Solution:
round/tangentモードはDivisionsが大きいほどポリゴン数が増えるため、必要最低限の分割数に抑える- ビジュアル上で重要でない端は
facetやshareに切替えて、丸みキャップを使う箇所を限定する - 後段で Polyreduce SOP を適用してポリゴン数を最適化
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Cap SOP
- TouchDesigner公式ドキュメント – Tube SOP
- TouchDesigner公式ドキュメント – Revolve SOP
- TouchDesigner公式ドキュメント – Convert SOP

