
概要 📖 – 点や面を条件で束ねる
Group SOPは、点やプリミティブを条件で選別して名前付きグループとしてジオメトリに付与する SOPです。出力ジオメトリ自体は変化せず、後段の Delete SOP / Copy SOP / Transform SOP などがグループ名を参照することで部分的な操作対象を絞り込みます。
主な用途 🎯
- 条件に合う点・面のグループ化(番号 / 範囲 / 領域 / 法線 / エッジ等の基準で選び、後段の Delete SOP や Copy SOP にグループ名で渡せる素材を作る)
- パターンや範囲で特定プリミティブを抽出(
0-10:2のような飛び番選択や!4の除外指定でメッシュの一部だけ操作対象にする) - バウンディング領域内のジオメトリ抽出(Box / Sphere / Object 形状内の点・プリミティブだけを選び、地形の一部や手前のオブジェクトをまとめて処理する)
- 法線方向によるプリミティブ選別(地面に近い面 / 壁面 / カメラから見て裏向きの面 等を Direction と Spread Angle で抽出)
- 既存グループの論理結合・編集(Union / Intersect / XOR / Subtraction で複数グループを合成し、種類変換・改名・削除まで一括管理)
データフロー 🔄
入力: ジオメトリ(点とプリミティブを持つ SOP)
↓
選別条件の評価(番号 / 領域 / 法線 / エッジ / 式)
↓
名前付きグループの作成
↓
必要なら既存グループと論理結合
↓
出力: 同じジオメトリ + グループ情報
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Create Page 📋
番号で選択 .usenumber 🔢
Use Number をオンにすると、番号・パターン・範囲・式によるエンティティ選別が有効になります。
Use Number .usenumber ✅Use Number (番号で選択を有効化) — 番号 / パターン / 範囲 / 式によるエンティティ選別を有効にするマスタトグル。
オフのときは以下のフィールドはグレーアウトして無視されます。
Create Ordered .ordered 🔀Create Ordered (順序付きグループ生成) — オンにすると選択した順番でグループ内エンティティが並びます。
オフだと生成順(プリミティブ番号順)になります。Sweep SOP / Skin SOP など順序依存のオペレータに渡すときに重要です。
選別方式 .groupop 🎚️
番号系選別で「パターンで指定するか」「範囲で指定するか」を切り替えるメニュー。
| 項目 | 内部名 | 説明 |
|---|---|---|
| Group by Pattern | .pattern |
Pattern フィールドに書いた範囲・列挙・除外パターンで選別 |
| Group by Range | .range |
Start / End の番号範囲と「N 個ごとに M 個」指定で選別 |
パターン入力 .pattern 🔤
Pattern .pattern 🔤Pattern (選択パターン) — 選別対象のプリミティブ番号やプロファイル番号を文字列で指定します(Operation = Group by Pattern のとき有効)。
書式は S.P 形式で、S は親サーフェス番号、P はプロファイル番号。プリミティブとプロファイルを混在させると自動で順序付きグループになります。
例: 0-100:2 = 0〜100 の偶数番、0-10:2,3 = 3 個中 2 個ごと、!4 = 4 番以外、0.* = プリミティブ 0 上の全プロファイル、* = 全プリミティブ。
Transfer Selection to Pattern .transfer ↩️Transfer Selection to Pattern (ビューポート選択を取り込む) — Viewport の Select state で点 / プリミティブを選んだ状態でこのボタンを押すと、その選択範囲が圧縮形式(例: 1-23 40 67-100)で Pattern フィールドに転写されます。
番号を手打ちする手間を省く実用機能です。
番号範囲指定 .range 📏
Start / End .range 📏Start / End (開始番号 / 終了番号) — Operation = Group by Range のときに有効。選別の開始と終了のプリミティブ番号(または点番号)を指定します。
内部名は range1 / range2 の 2 要素。
Select N of M .select 🎯Select _ of _ (M 個中 N 個を選択) — Start / End の範囲内で「M 個ごとに N 個」を選びます。
例: 1 と 2 を入れると「2 個ごとに 1 個」つまり 1 つおきの選別になります。
Filter Expression .filter 🧮Filter Expression (式で選別) — 点 / プリミティブ毎に評価される式を書き、結果が真のものだけグループに含めます。
点 / プリミティブのローカル変数が使えますが、選択中のグループ種類に対応する変数だけが有効です。
領域で選択 .usebounds 📦
Use Bounds をオンにすると、ボックス・球・任意オブジェクトの内側にあるエンティティを選別できます。
Use Bounds .usebounds ✅Use Bounds (領域で選択を有効化) — バウンディングボリュームによる選別を有効にするトグル。
ビューポートにガイドジオメトリとして領域が表示されます。
領域の種類 .boundtype 📐
選別に使うバウンディングボリュームの形状を選択します。
| 項目 | 内部名 | 説明 |
|---|---|---|
| Bounding Box | .usebbox |
ボックス内に含まれるエンティティを選択 |
| Bounding Sphere | .usebsphere |
球内に含まれるエンティティを選択 |
| Bounding Object (points only) | .usebobject |
任意のオブジェクト形状内に含まれる点を選択(メッシュは整った多角形が必要) |
※ 注意: Bounding Object モードでは凹凸の激しい不正なメッシュは正しく判定できません。先に Convert SOP でポリゴン化し、Divide SOP で凸面を 3 角化してから使ってください。
領域サイズと中心 .size 📍
Size .size 📐Size (領域サイズ) — Bounding Box または Bounding Sphere の X / Y / Z 方向のサイズです。
内部名は sizex / sizey / sizez の 3 要素。
Center .t 🎯Center (領域中心座標) — バウンディングボリュームの中心位置を X / Y / Z で指定します。
内部名は tx / ty / tz の 3 要素。
法線で選択 .usenormal 🧭
Use Normal をオンにすると、エンティティ法線の向きで選別できます。Direction と Spread Angle で円錐状の許容範囲を定義します。
Use Normal .usenormal ✅Use Normal (法線で選択を有効化) — 法線方向によるエンティティ選別を有効にするトグル。
例: 地形の急斜面だけ抜き出す、カメラ側を向いた面だけ選ぶ等の用途に使います。
Direction .dir ↗️Direction (法線方向ベクトル) — 選別の基準となる法線ベクトル(X / Y / Z)。
デフォルトの 0, 1, 0 は Y 軸上向き(XZ 平面が水平)になります。1, 0, 0 なら X 軸方向、1, 1, 0 なら XY の 45 度方向。
ベクトル成分は 0〜1 の範囲で指定するのが目安です。
内部名は dirx / diry / dirz の 3 要素。
Spread Angle .angle 📐Spread Angle (許容角度) — Direction で定義した軸から何度までの範囲を「同じ向き」とみなすかを指定します。
円錐の半頂角に相当し、この円錐内に法線が入るエンティティが選別されます。
Backface from .camera 🎥Backface from (裏面判定の視点) — 指定したオブジェクト(通常はカメラ)から見て裏向きのプリミティブを選別します。
VFX で裏面カリングしたいプリミティブを抽出するのに便利です。
エッジで選択 .useedges 🪡
Use Edges をオンにすると、隣接エッジの角度や深さでプリミティブを選別できます。
Use Edges .useedges ✅Use Edges (エッジで選択を有効化) — エッジ条件によるプリミティブ選別を有効にするトグル。
Edge Angle (Enable) .doangle 🔘Edge Angle (Enable) (エッジ角度判定を有効化) — エッジ間の角度条件による判定を使うかどうかのトグル。
Edge Angle .edgeangle 📐Edge Angle (エッジ角度しきい値) — グループに含めるエッジ間の角度を指定します。
プリミティブグループでのみ機能します。
Edge Depth (Enable) .dodepth 🔘Edge Depth (Enable) (エッジ深さ判定を有効化) — エッジ深さ条件を使うかどうかのトグル。
Edge Depth .edgestep 📏Edge Depth (エッジ深さ) — 何ステップ離れた点までグループに含めるかを指定します(点グループ専用)。
点番号と境界 .point 📍
点グループ作成時の番号指定、メッシュ境界の点抽出、境界ごとのグループ自動生成の設定。
Point Number .point 🔢Point Number (点番号) — 直接指定したい点の番号を入力します(点グループでのみ有効)。
Unshared Edges .unshared 🪟Unshared Edges (共有されないエッジの点) — ポリゴンメッシュの境界(他のフェースと共有されていないエッジ)上の点を抽出します。
Hull や開いたフェースの境界も検出でき、点は順序付きで並びます。
Create Boundary Groups .boundarygroups 🧷Create Boundary Groups (境界ごとに別グループを生成) — Unshared Edges がオンのときに有効。
境界ごとに <name>__<n> 形式(アンダースコア 2 個 + 連番)でグループを自動生成します。例えば穴のあるグリッドなら外周と穴のそれぞれに別の点グループが作られます。
Combine Page 🧮
結合対象グループ .grpequal 🎯
Group = .grpequal 🎯Group = (編集対象グループ) — 結合結果を格納するグループ名。
入力に既にあるグループ名を指定すれば上書き、Create Page の Group Name で作った新規グループ名でも構いません。
Group 1 と反転 .grp1 1️⃣
Not (Group 1) .not1 🔁Not (Group 1 の反転) — オフなら Group 1 のメンバーをそのまま、オンなら Group 1 に属さないメンバーを対象にします。
Group 1 .grp1 1️⃣Group 1 (結合元グループ 1) — 結合演算の最初のオペランド。入力 SOP に存在するグループ名から選びます。
演算 1 .op1 ➕
Group 1 と Group 2 を結合する論理演算の選択。
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
結合演算を行わない |
| Union (Or) | .or |
和集合: A または B に含まれるメンバー |
| Intersect (And) | .and |
積集合: A かつ B に含まれるメンバー |
| Exclusive Or | .xor |
排他的論理和: どちらか一方にしか含まれないメンバー |
| Subtraction | .sub |
差集合: A から B のメンバーを除外 |
Group 2 と反転 .grp2 2️⃣
Not (Group 2) .not2 🔁Not (Group 2 の反転) — オンで Group 2 の補集合を結合対象にします。
Group 2 .grp2 2️⃣Group 2 (結合元グループ 2) — Operation で指定した演算の右側オペランド。
演算 2 .op2 ➕
Group 1 ⊕ Group 2 の結果と Group 3 をさらに結合する演算(必要なときだけ使用)。
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
結合演算を行わない |
| Union (Or) | .or |
和集合 |
| Intersect (And) | .and |
積集合 |
| Exclusive Or | .xor |
排他的論理和 |
| Subtraction | .sub |
差集合 |
Group 3 と反転 .grp3 3️⃣
Not (Group 3) .not3 🔁Not (Group 3 の反転) — オンで Group 3 の補集合を結合対象にします。
Group 3 .grp3 3️⃣Group 3 (結合元グループ 3) — 3 段目の結合に使うグループ。
演算 3 .op3 ➕
中間結果と Group 4 をさらに結合する演算。
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
結合演算を行わない |
| Union (Or) | .or |
和集合 |
| Intersect (And) | .and |
積集合 |
| Exclusive Or | .xor |
排他的論理和 |
| Subtraction | .sub |
差集合 |
Group 4 と反転 .grp4 4️⃣
Not (Group 4) .not4 🔁Not (Group 4 の反転) — オンで Group 4 の補集合を結合対象にします。
Group 4 .grp4 4️⃣Group 4 (結合元グループ 4) — 4 段目の結合に使うグループ。
Edit Page ✏️
種類変換 .cnvtype 🔄
既存グループの種類(点グループとプリミティブグループ)を相互変換します。
| 項目 | 内部名 | 説明 |
|---|---|---|
| Points to Primitives | .ptop |
点グループをプリミティブグループに変換(点が属するプリミティブを集める) |
| Primitives to Points | .prtopt |
プリミティブグループを点グループに変換(プリミティブを構成する点を集める) |
変換対象 .convertg 🎯
Group (Convert) .convertg 🎯Group (変換対象グループ) — 種類変換する元のグループ名を指定します。
Convert Name .cnvtname 🆕Convert Name (変換後の新グループ名) — 変換後のグループに付ける新しい名前を指定します。
Preserve Original .preserve 🛡️Preserve Original (元グループを残す) — オンにすると変換元のグループを削除せずに残します。
名前変更 .oldname 🏷️
Group (Rename) .oldname 🏷️Group (改名対象グループ) — リネームしたい既存グループの名前を指定します。
New Name .newname ✏️New Name (新しい名前) — 改名後のグループ名を指定します。
削除 .destroyname 🗑️
Group (Destroy) .destroyname 🗑️Group (削除対象グループ) — ジオメトリから削除する点 / プリミティブグループの名前を指定します。
グループ情報のみが消え、ジオメトリ本体(点・プリミティブ)は残ります。
実践アイデア 💡
Example 1: 地面を抜き出しマテリアル分け 🟫
Geometry → Group SOP (Use Normal, Direction=0,1,0) → Material SOP → Render TOP
地形メッシュやアーキビズシーンで、上向きの面(床・地面)と側面(壁)を法線方向で分けてグループ化し、後段の Material SOP でグループごとに別マテリアルを割り当てる定番フロー。Group SOP で意味のある名前を付けておくと、複雑なシーンでもマテリアル割当が読みやすくなります。
- 選別したいジオメトリの後段に Group SOP を配置し、Group Name に
floorなど分かりやすい名前を設定 - Use Normal をオンにして Direction を
0, 1, 0(Y 軸上向き)に、Spread Angle を 30〜45 度に設定して床面だけを抽出 - 後段に Material SOP を接続し、Group パラメータに
floorを指定して床用マテリアルを割当 - 壁面用に Group SOP をもう 1 個並べ Direction を
1, 0, 0等に変えて別グループを作り、別の Material SOP を割り当てる
Example 2: 範囲指定で奇数番だけ動かす 🔢
Grid SOP → Group SOP (Pattern=0-100:2) → Transform SOP (with Group)
格子状ジオメトリの偶数 / 奇数番のプリミティブだけを選別して動かすことで、ストライプ状のアニメーションや市松模様の演出を作る例。Group SOP の Pattern 機能を 0-100:2 のようなコロン記法で書くと、Math CHOP のような数式オペレータ無しで間引き選別ができます。
- Grid SOP や Box SOP で格子状ジオメトリを生成
- Group SOP の Use Number をオン、Operation を
Group by Patternにして Pattern に0-100:2と書き、偶数番プリミティブだけをoddprimsグループに収集 - 後段に Transform SOP を置き、Group パラメータに
oddprimsを指定して Translate Y 等で移動 - Animation COMP や LFO CHOP で Transform SOP の値を時間変化させ、選んだプリミティブだけが動くストライプ演出に仕上げる
Example 3: 箱領域でジオメトリ一部削除 📦
入力 SOP → Group SOP (Use Bounds, Bounding Box) → Delete SOP → Result
大きなジオメトリの特定領域だけを削り取りたいときに、Group SOP の Bounding Box でその範囲の点 / プリミティブを選別し、後段の Delete SOP で消し去る用途。地形の穴あけや、建築モデルのフロア単位での切り分け、パーティクル発生領域の制限などに有効です。
- 対象ジオメトリの後段に Group SOP を配置し、Use Bounds をオン、Bounding Type を
Bounding Boxに設定 - Size と Center で削りたい領域を 3D 空間で指定(ビューポートに表示されるガイドジオメトリで確認)
- 後段に Delete SOP を接続し、Group に Group SOP で付けた名前を指定、Operation を Delete Selected にして領域内を削除
- Bounding Sphere や Bounding Object に切り替えれば、球状領域や任意形状での切り分けも同じ流れで実現可能
関連オペレータ 🔗
類似機能OP 🔍
- Sort SOP — 選別ではなく順序の並べ替えを行う SOP。Group SOP の Create Ordered と組み合わせて使う場面が多い
組み合わせ推奨OP 🔄
- Delete SOP — Group SOP で付けたグループ名を参照して指定領域だけを削除する最頻出ペア
- Copy SOP — グループ単位でテンプレートジオメトリを複製する。境界グループとの組み合わせも有効
- Transform SOP — Group パラメータに Group SOP のグループ名を指定して特定範囲だけ移動・回転・スケール
- Attribute SOP — グループ単位で属性値(色 / UV / カスタム)を書込んで部分マテリアル化
- Convert SOP — Bounding Object モードで使う前にメッシュをポリゴン化する事前処理
- Subdivide SOP — グループ指定で特定プリミティブだけを細分化
前処理・後処理SOP 🎯
- 前処理: Convert SOP、Facet SOP、Sort SOP、Transform SOP
- 後処理: Delete SOP、Copy SOP、Transform SOP、Attribute SOP、Subdivide SOP
Info CHOP情報 📊
Group SOP は Info CHOP による詳細情報取得に対応しています。
ジオメトリ統計 📐
num_points: この SOP に含まれるポイント数num_prims: この SOP に含まれるプリミティブ数num_particles: この SOP に含まれるパーティクル数num_point_groups:num_point_groups— 出力に含まれる点グループの総数num_prim_groups:num_prim_groups— 出力に含まれるプリミティブグループの総数
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— プロセス開始以降に Group SOP がクックされた合計回数cook_time:cook_time— 直近のクック所要時間(ミリ秒)。式選別や法線判定が重い場合の負荷指標cook_frame:cook_frame— Group SOP が最後にクックされたフレーム番号
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: グループが空(メンバーが入らない)
✅ Solution:
- Use Number / Use Bounds / Use Normal / Use Edges のいずれかのトグルがオンになっているか確認(全部オフだと選別ロジックが動かない)
- Pattern や Start / End のプリミティブ番号が、入力ジオメトリの実際の番号範囲内に収まっているか Info CHOP の
num_primsで照合する - 点グループとプリミティブグループの種類を間違えていないか確認。Filter Expression のローカル変数は対応する種類の場合だけ有効です
❌ Problem: Bounding Object モードで判定がおかしい
✅ Solution:
- 対象オブジェクトが整ったメッシュかをチェック。穴あきメッシュや非マニフォールドだと内外判定が崩れます
- 前段に Convert SOP を置いてポリゴン化し、必要なら Divide SOP で 3 角化してから Group SOP に渡す
- Bounding Object モードは点グループ専用です。プリミティブを選びたい場合は一度点グループを作って Convert Type で変換します
❌ Problem: 境界グループの名前が想定と違う
✅ Solution:
- Create Boundary Groups がオンのとき、グループ名は
<name>__<n>形式(アンダースコア 2 個 + 連番 0 始まり)になります - 後段で名前を変えたい場合は Edit Page の Rename 機能で
floor__0→outerのようにリネームできます - 境界が複数できる形状(穴のあるグリッド等)では
__0,__1, … と連番で増えるので Info CHOP のnum_point_groupsで実数を確認する
❌ Problem: Combine Page の結合が反映されない
✅ Solution:
- Group = フィールドに、結合結果を入れたいグループ名が正しく設定されているか確認
- Operation を
Noneにしている段は結合自体が走らないので、必要な段の Operation を Union / Intersect / Subtraction に切替 - Not トグルをオンにしている場合、対象グループの補集合が使われているため意図と逆になっていないか見直す
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Group SOP
- TouchDesigner公式ドキュメント – Delete SOP
- TouchDesigner公式ドキュメント – Pattern Matching

