
概要 📖 – 点と粒子を並べ替える
Sort SOPは、ジオメトリ内の点と粒子の順序を、座標軸・ランダム・ベクトル方向・近傍距離などの基準で並べ替える SOPです。並べ替えは順序 (Index) のみを変更し、点や粒子の座標値そのものは変えません。後段で Copy SOP やパーティクル描画の処理順序を制御したいときに使えます。
主な用途 🎯
- 点の順序を X / Y / Z 座標軸で並べ替えてアニメーション順序を制御
- ランダム並べ替え (Seed 指定) で点や粒子の描画・処理順をシャッフル
- Closest Neighbour モード で隣接点を順序付け、メッシュトラバースを最適化
- Along Vector モード で任意のベクトル方向に沿って点を並べ替え
- Shift モード で順序を一定量ずらして配列パターンを巡回
データフロー 🔄
入力 SOP (Point / Particle を含むジオメトリ)
↓
Group でサブセット指定
↓
Point Sort / Particle Sort モードで基準を選択
↓
Seed / Offset / Vector / Point で並べ替え基準を確定
↓
出力: 点・粒子の順序が並べ替えられた SOP (座標は変化なし)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Point Page 📁
Point Sort .ptsort 🎛️
入力ジオメトリの点 (Point) を並べ替える基準を選ぶメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| No change | .none |
並べ替えを行わない (入力順を維持) |
| By vertex order | .vtxord |
頂点 (Vertex) と同じ順序で点を並べる |
| By x | .byx |
点の X 座標値の昇順で並べ替え |
| By y | .byy |
点の Y 座標値の昇順で並べ替え |
| By z | .byz |
点の Z 座標値の昇順で並べ替え |
| Reverse | .rev |
点の順序を逆順にする (座標は変えない) |
| Random | .seed |
Seed 値を使って点の順序をランダム化 (座標位置は変えない) |
| Shift | .shift |
Offset で指定した数だけ点の順序を巡回シフト |
| Along Vector | .vector |
Vector Object または Vector で指定した方向に沿って並べ替え |
| Closest Neighbour | .neighbour |
現在の点に最も近い点を次の順序に置く (N×N の探索のため処理が重い) |
Sort基準パラメータ 🎲
Seed .pointseed 🎲
– Point Sort が Random のときに使われる乱数シード
– 同じ Seed なら同じ並び順が再現される (アニメーションの再現性確保に有用)
Offset .pointoffset ↕️
– Point Sort が Shift のときに点の順序を何個分ずらすかを指定
– 正の値で前方シフト、負の値で後方シフト
Vector基準パラメータ 📐
Point .pointprox 📍
– Along Vector や Closest Neighbour での基準座標 (X / Y / Z)
– Proximity 系の並べ替えで「どこから一番近い順か」の起点になる位置
– サブ項目: X (pointproxx) / Y (pointproxy) / Z (pointproxz)
- X (
pointproxx) - Y (
pointproxy) - Z (
pointproxz)
Vector Object .pointobj 🎯
– Along Vector モードで、並べ替え基準ベクトルを別オブジェクトの変換値から取得
– 指定したオブジェクトの座標軸方向が並べ替え方向として使われる
Vector .pointdir ➡️
– Along Vector モードで、独自の方向ベクトル (X / Y / Z) を直接指定
– Vector Object が未指定のときに使われる
– サブ項目: X (pointdirx) / Y (pointdiry) / Z (pointdirz)
- X (
pointdirx) - Y (
pointdiry) - Z (
pointdirz)
Particle Page 📁
Particle Sort .partsort 🎛️
入力ジオメトリの粒子 (Particle Primitive) を並べ替える基準を選ぶメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| No change | .none |
並べ替えを行わない (入力順を維持) |
| By x | .byx |
粒子の X 座標値の昇順で並べ替え |
| By y | .byy |
粒子の Y 座標値の昇順で並べ替え |
| By z | .byz |
粒子の Z 座標値の昇順で並べ替え |
| Reverse | .rev |
粒子の順序を逆順にする |
| Shift | .shift |
Offset で指定した数だけ粒子の順序を巡回シフト |
| Along Vector | .vector |
Vector Object または Vector で指定した方向に沿って並べ替え |
Sort調整パラメータ 🎚️
Reverse Results .partreverse 🔁
– Particle Sort の結果をさらに反転する
– 例えば By x + Reverse Results=ON で X 座標の降順になる
Offset .partoffset ↕️
– Particle Sort が Shift のときに粒子の順序を何個分ずらすかを指定
– 正の値で前方シフト、負の値で後方シフト
Vector基準パラメータ 📐
Point .partprox 📍
– Along Vector での基準座標 (X / Y / Z)
– Proximity to Point モードで「どこから一番近い順か」の起点になる位置
– サブ項目: X (partproxx) / Y (partproxy) / Z (partproxz)
- X (
partproxx) - Y (
partproxy) - Z (
partproxz)
Vector Object .partobj 🎯
– Along Vector モードで、並べ替え基準ベクトルを別オブジェクトの Translate 値から取得
– 指定したオブジェクトの位置ベクトルが並べ替え方向として使われる
Vector .partdir ➡️
– Along Vector モードで、独自の方向ベクトル (X / Y / Z) を直接指定
– Vector Object が未指定のときに使われる
– サブ項目: X (partdirx) / Y (partdiry) / Z (partdirz)
- X (
partdirx) - Y (
partdiry) - Z (
partdirz)
実践アイデア 💡
Example 1: 点を X 軸順に並べる 📊
Grid SOP → Sort SOP (Point Sort=By x) → Copy SOP (テンプレートに連結) → Geometry COMP
Grid SOP で生成した点群を Sort SOP の By x モードで X 座標の昇順に並べ替え、後段の Copy SOP で点インデックス順に何かを複製・配置する基本フロー。順序を整えることで「左から右へ順次出現」のような演出が組みやすくなります。
- Grid SOP で点群を生成
- Sort SOP を後段に接続し
Point SortをBy xに設定 - 後段の Add SOP や Copy SOP で点インデックス順に処理
Geometry COMPで表示し、点の処理順序が左から右に揃ったことを確認
Example 2: 粒子をランダム順に並べる 🎲
Particle SOP → Sort SOP (Particle Sort=No change→各粒子) / Sort SOP (Point Sort=Random, Seed=値) → Render TOP
粒子描画の重ね順 (描画オーダー) が並びに依存して見栄えに影響する場合、Sort SOP の Random モードに固定 Seed を与えて並べ替えると、フレーム間で描画順が安定したまま「ランダムっぽい重なり」を演出する形にまとまります。
- 粒子データを Sort SOP の入力に接続
Point SortをRandomに設定Seedを任意の整数に固定し、フレーム間で同じ並びが維持されることを確認- 後段の描画パイプライン (Geometry COMP + Render TOP) で粒子の重なり順を確認
Example 3: 近い点同士を線で連結 🔗
Scatter / Noise 配置の点群 → Sort SOP (Point Sort=Closest Neighbour) → Add SOP (Polygon でつなぐ) → Geometry COMP
散布された点群を Sort SOP の Closest Neighbour モードで「隣の最も近い点」を順序付け、後段で Add SOP の Polygon 接続を使えば、点を最短経路風に1本の線として描画する流れになります。
- Scatter / Noise などで散布点群を作成
- Sort SOP を接続し
Point SortをClosest Neighbourに設定 Pointパラメータで探索の起点となる座標を指定- Add SOP の Polygon モードで点を順番に連結
- 点数が多い場合は処理負荷を意識し、必要なら点数を間引いてから Sort へ流す
関連オペレータ 🔗
類似機能OP 🔍
- None — TouchDesigner SOP に「点・粒子の並べ替え」に特化した類似 OP は存在しません。順序操作は Sort SOP に集約されています。
組み合わせ推奨OP 🔄
- Copy SOP — Sort で整えた順序のままテンプレートを複製・配置
- Add SOP — Sort 後の点を Polygon / Line で順番に連結する
- Transform SOP — Sort 後の点群全体に Translate / Rotate / Scale を一括適用
- Group SOP — Sort 後の点インデックスをグループ化し、後段で部分処理
- Convert SOP — 並べ替え後のジオメトリを Polygon / Bezier 等の別形式に変換
前処理・後処理SOP 🎯
- 前処理: Add SOP、Point SOP、Group SOP
- 後処理: Copy SOP、Transform SOP、Convert SOP
Info CHOP情報 📊
Sort 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— 直近のクック所要時間 (ミリ秒、Closest Neighbour 使用時はここが大きくなりやすい)cook_frame:cook_frame— このオペレータが最後にクックされたフレーム番号
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: Sort してもジオメトリの見た目が何も変わらない
✅ Solution:
- Sort SOP は点・粒子の順序 (Index) のみを変更し、座標は動かしません。形状の見た目には現れないため、後段で点インデックスを使う処理 (Copy SOP / Add SOP / SOP to CHOP の
P[0]等) で順序が変わっていることを確認 - デバッグ用に Add SOP の Polygon モードで点を順番につなぎ、線の形が変わるか目視確認
Point SortやParticle SortがNo changeのままになっていないか確認
❌ Problem: Random モードで並びが毎フレーム変わってしまう
✅ Solution:
Seedに固定整数を設定する (式や時間関数を入れていると毎フレーム値が変わり、並びも変わる)- 再現性が必要な場面では Seed を Constant CHOP で外部管理し、明示的に切り替え可能にする
- Seed を変えずに見た目だけシャッフルしたい場合は Random モードを再評価せず、上流の点配置を変える方が安定
❌ Problem: Particle Sort が効かない / 結果が変化しない
✅ Solution:
- 入力ジオメトリに Particle Primitive が含まれているか確認 (通常のポイント群には
Particle Sortは効かず、Point Sort側を使う) - Particle SOP 等で粒子化してから Sort SOP に流す
Particle SortがNo changeになっていないか、Page を切り替えて確認
❌ Problem: Closest Neighbour モードでフレームレートが大幅に低下する
✅ Solution:
- Closest Neighbour は点数 N に対して O(N×N) の探索を行うため、点数が多いほど指数的に重くなります。前段で点数を間引く (Scatter の Count を下げる / 部分 Group のみ Sort する)
- 並び順が固定でよい場面では Sort 結果を一度焼き込み (Lock や Cache SOP) して、毎フレーム再計算しない
- Closest Neighbour 以外で代替できないか検討 (例: 軸方向で十分なら
By x/By y/By z)
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Sort SOP
- TouchDesigner公式ドキュメント – Point SOP
- TouchDesigner公式ドキュメント – Add SOP
- TouchDesigner公式ドキュメント – Pattern Matching

