Sort SOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Sort SOP の点・粒子並べ替え機能を示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – 点と粒子を並べ替える

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 (座標は変化なし)

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

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 SortRandom のときに使われる乱数シード
– 同じ Seed なら同じ並び順が再現される (アニメーションの再現性確保に有用)

Offset .pointoffset ↕️
Point SortShift のときに点の順序を何個分ずらすかを指定
– 正の値で前方シフト、負の値で後方シフト

Vector基準パラメータ 📐

Point .pointprox 📍
Along VectorClosest 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 SortShift のときに粒子の順序を何個分ずらすかを指定
– 正の値で前方シフト、負の値で後方シフト

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 で点インデックス順に何かを複製・配置する基本フロー。順序を整えることで「左から右へ順次出現」のような演出が組みやすくなります。

  1. Grid SOP で点群を生成
  2. Sort SOP を後段に接続し Point SortBy x に設定
  3. 後段の Add SOP や Copy SOP で点インデックス順に処理
  4. Geometry COMP で表示し、点の処理順序が左から右に揃ったことを確認

Example 2: 粒子をランダム順に並べる 🎲

Particle SOP → Sort SOP (Particle Sort=No change→各粒子) / Sort SOP (Point Sort=Random, Seed=値) → Render TOP

粒子描画の重ね順 (描画オーダー) が並びに依存して見栄えに影響する場合、Sort SOP の Random モードに固定 Seed を与えて並べ替えると、フレーム間で描画順が安定したまま「ランダムっぽい重なり」を演出する形にまとまります。

  1. 粒子データを Sort SOP の入力に接続
  2. Point SortRandom に設定
  3. Seed を任意の整数に固定し、フレーム間で同じ並びが維持されることを確認
  4. 後段の描画パイプライン (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本の線として描画する流れになります。

  1. Scatter / Noise などで散布点群を作成
  2. Sort SOP を接続し Point SortClosest Neighbour に設定
  3. Point パラメータで探索の起点となる座標を指定
  4. Add SOP の Polygon モードで点を順番に連結
  5. 点数が多い場合は処理負荷を意識し、必要なら点数を間引いてから 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 🎯


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 SortParticle SortNo 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 SortNo 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)

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました