
概要 📖 – プリミティブの端を繋ぐ
Join SOPは、複数のプリミティブの端点を繋いで 1 本の連続した曲線・曲面に連結する SOPです。ブレンド連結なら接合部を共通点にまとめて滑らかに繋ぎ、ブレンドしなければ弧状の繋ぎ目で元の形状を保ったまま連結します。
主な用途 🎯
- 複数の曲線・面を 1 本のプリミティブに連結し、前のプリミティブの末端と次のプリミティブの先頭を繋いで一続きの形状を作成
- ブレンド連結による滑らかな接合で、接合部の端点を共通の点・行・列にまとめて 1 つの連続した曲線や曲面に変換
- フィレット連結による弧状の繋ぎ目で、ブレンドせずに元の形状を保ったまま接合部を弧のような繋ぎ目で連結
- 最後と最初を繋いで閉じた形状を生成し、開いた曲線・曲面の両端を接続してループ状の閉じた形状を作成
- サーフェス同士を U 方向・V 方向で連結し、列方向 (U) または行方向 (V) を指定して 2 つのサーフェスを 1 枚に統合
データフロー 🔄
入力: 連結したい複数の曲線・面・サーフェスを含むプリミティブ
↓
連結処理 (ブレンド有無・許容誤差・連結方向・連結単位を設定)
↓
出力: 端点が繋がった 1 本の連続したプリミティブ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Page 📁
連結対象の指定 🎯
Group .group 🎯
– Group (連結対象グループ) — 入力にグループがある場合、ここにグループ名を指定するとそのグループのみを連結対象にします
– パターンマッチングに対応 (例: * や [1-10] 等で複数指定が可能)
ブレンド連結の設定 🎚️
Blend .blend 🎚️
– Blend (ブレンド連結) — プリミティブの連結方法を決めます
– オンにすると接合する端点を共通の点・行・列にまとめ、1 つの連続した形状に変換します
– オフにすると元の形状はそのまま保持され、選ばれた端どうしが弧のような繋ぎ目で連結されます
– いずれの場合も結果は 1 本のプリミティブになります
Tolerance .tolerance 📐
– Tolerance (許容誤差) — 連結時に元の形状をどれだけ変形させるかを決めます
– 値が小さいほどブレンド連結での形状変化が少なくなります
– 0 のときブレンド対象の入力はまったく変化せず、面は直線で、サーフェスは平坦な面で接続されます
– フィレット連結では繋ぎ目の大きさと丸みにも影響し、値が大きいほど尖った繋ぎ目になります
Bias .bias ⚖️
– Bias (偏り) — ブレンド連結でのみ作用し、共通点・行・列の位置を 2 つの端の間で線形に動かします
– 0 なら共通部分が 2 番目のプリミティブの端に一致し、1 番目が引き伸ばされます
– 1 なら共通部分が 1 番目のプリミティブの端に一致し、2 番目が引き伸ばされます
– ブレンドの許容誤差が 0 のときは無効です
Multiplicity .knotmult 🔗
– Multiplicity (多重度) — 連結点に挿入するノット数に影響し、滑らかな接続か尖った接続かを切り替えます
– オンにすると接続が尖った形になります
– ブレンドがオフのときは繋ぎ目の形状と締まり具合に影響します
– ポリゴンとメッシュには効果がありません
連結方向の選択 .dir 🧭
Direction (連結方向) — サーフェス連結時の処理方向を指定するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| in U | .ujoin |
列 (U 方向) で連結し、入力より列数の多いサーフェスを生成 |
| in V | .vjoin |
行 (V 方向) で連結 |
端点の選び方 ✅
Connect Closest Ends .proximity ✅
– Connect Closest Ends (最も近い端を接続) — Join SOP は通常、前のプリミティブの末端と次のプリミティブの先頭を順に繋ぎます
– このトグルをオンにすると、代わりに最も近い端どうしを選んで接続します
– サーフェスでは Direction で指定した U または V 方向で近接判定を行います
連結単位の指定 .joinop 🔄
Join (連結単位) — プリミティブを何個単位で連結するかを切り替えるメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| All Primitives | .all |
全プリミティブを 1 つに連結 |
| Groups of N Primitives | .group |
N 個のプリミティブ単位で連結を繰り返す |
連結数と保持設定 🔢
N .inc 🔢
– N (連結数) — グループ化またはスキップするプリミティブの数を指定します
– Join を Groups of N Primitives にしたときに使う連結単位で、最小値は 2 です
Wrap Last to First .loop 🔁
– Wrap Last to First (最後を最初に接続) — オンにすると最初のプリミティブの先頭と最後のプリミティブの末端を繋ぎ、閉じた 1 本の面・外殻を作ります
– 入力に開いたプリミティブが 1 つだけある場合は、それ自体が閉じられます
Keep Primitives .prim 📌
– Keep Primitives (元プリミティブを保持) — このボタンをオフにすると、連結後に元の入力プリミティブは削除されます
– オンにすると元のプリミティブも残します
実践アイデア 💡
Example 1: 2 本の曲線を連結 ➰
Line SOP × 2 → Merge SOP → Join SOP (Blend=ON, Join=All Primitives) → Out SOP
別々に作った 2 本の曲線を 1 本の連続した曲線に繋ぐ基本パターンです。Join SOP は順番に並んだプリミティブの端点を繋ぐため、まず Merge SOP で 1 入力にまとめてから Join SOP に渡し、Blend をオンにして接合部を滑らかに連結します。
- Line SOP を 2 個作成し、片方の端がもう片方の端の近くに来るように配置
- 両 Line SOP を Merge SOP で 1 入力にまとめる
- Merge SOP の出力を Join SOP に接続
Blendをオンにして接合部を共通点にまとめるJoinをAll Primitivesに設定し、Geometry Viewer で 1 本に繋がったことを確認
Example 2: 開いた曲線を閉じる 🔁
Circle SOP (Arc Type=Open Arc) → Join SOP (Wrap Last to First=ON) → Out SOP
開いた円弧の両端を接続して閉じたループ形状を作る用途です。Wrap Last to First をオンにすると最初のプリミティブの先頭と最後の末端が繋がり、1 つの開いたプリミティブだけが入力されている場合はそれ自体が閉じられます。
- Circle SOP を配置し、Arc Type を開いた円弧に設定して開いた曲線を用意
- Circle SOP の出力を Join SOP に接続
Wrap Last to Firstをオンに切り替え- 曲線の両端が繋がって閉じたループになったことを Geometry Viewer で確認
Example 3: N 個ずつのペアに連結 🧩
複数の Line SOP → Merge SOP → Join SOP (Join=Groups of N Primitives, N=2) → Out SOP
並んだ複数のプリミティブを 2 個単位のペアに分けて連結するパターンです。Join を Groups of N Primitives にして N=2 を指定すると、0-1 / 2-3 / 4-5 のように 2 個ずつのまとまりとして個別に連結されます。
- 複数の Line SOP を用意し、Merge SOP で 1 入力にまとめる
- Merge SOP の出力を Join SOP に接続
JoinをGroups of N Primitivesに設定Nを2に設定して 2 個単位のまとまりで連結- 出力を Geometry Viewer で確認し、ペア単位で繋がっているかチェック
関連オペレータ 🔗
類似機能OP 🔍
- Stitch SOP — 2 本の曲線・面の間を補間して 1 枚に縫合 (Join は端点連結、Stitch は間を埋める縫合)
- Bridge SOP — プロファイル間に skin サーフェスを張って接続 (Join は端点を直接繋ぐ)
- Sweep SOP — 断面をパスに沿ってスイープし連続サーフェスを生成
- Skin SOP — 並んだ複数の曲線・面から 1 枚の skin サーフェスを生成
組み合わせ推奨OP 🔄
- Merge SOP — 別々のプリミティブを 1 入力にまとめてから Join に渡す前処理
- Primitive SOP — プリミティブを閉じる別手段 (Join の Wrap Last to First と用途が近い)
- Carve SOP — 曲線・サーフェスの一部を切り出して連結用の部品を用意
- Convert SOP — ポリゴンを NURBS / Bezier に変換してブレンド連結に備える
前処理・後処理SOP 🎯
Info CHOP情報 📊
Join 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: プリミティブが思ったように繋がらない
✅ Solution:
- Join SOP は順番に並んだプリミティブの末端と先頭を繋ぐため、前段の Merge SOP でプリミティブの順序を確認・調整する
- 繋ぎたい端どうしが離れている場合は
Connect Closest Endsをオンにして最も近い端を接続させる Groupでグループを限定している場合は、対象グループのパターン指定が正しいか確認する
❌ Problem: 接合部が滑らかにならない・尖ってしまう
✅ Solution:
Blendをオンにして接合部を共通点にまとめ、滑らかな連続形状に変換するToleranceを小さくしてブレンド連結時の形状変化を抑える (0で入力が変化せず直線・平坦面で接続)Multiplicityをオフにして接続点の不連続を避ける (オンだと尖った接続になる)
❌ Problem: 開いた曲線が閉じない
✅ Solution:
Wrap Last to Firstをオンにして最初の先頭と最後の末端を接続し、閉じた形状を作る- 閉じたい入力が 1 本の開いたプリミティブだけになっているか確認する (複数あると順に繋がってから閉じる)
- プリミティブを単純に閉じたいだけなら Primitive SOP の方が直接的に閉じられる
❌ Problem: 連結後に元のプリミティブが消えてしまう
✅ Solution:
Keep Primitivesをオンにして元の入力プリミティブを保持する (デフォルトのオフでは削除される)- 元の形状と連結結果を比較したい場合は分岐させて別系統で保持する
Multiplicityはポリゴン・メッシュには効果がないため、対象が NURBS / Bezier 曲線か確認する
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Join SOP
- TouchDesigner公式ドキュメント – Stitch SOP
- TouchDesigner公式ドキュメント – Bridge SOP
- TouchDesigner公式ドキュメント – Primitive SOP

