
概要 📖 – ポイントを並べ替える
Sort POPは、入力ポイントの順序をランダム化・ベクトル軸方向・属性値・基準オブジェクトの Z 軸距離などの条件で並べ替えて出力する POPです。No Change / Random / Along Vector / Relative to Object Z-axis のソート基準を切替えられ、Reverse / Shift / Offset で並べ替え後のインデックスを更に微調整できます。GPU 上で並列ソートが走るため、大規模ポイント数でも軽量に処理できます。
主な用途 🎯
- 透過レンダリング用に視点方向 (Z 軸) でポイント順を並べ替え
- パーティクル群の描画順をランダム化して規則性を消す
- 属性値の昇順で並べ替えて段階的アニメーションを作成
- 任意のベクトル軸方向に沿ってポイント順序を整列
- Shift / Offset で並べ替え後のインデックスをずらして循環表現
データフロー 🔄
入力: POP (任意ポイント群)
↓
Sort POP (Point Method で順序基準を選択 → Reverse / Shift / Offset で微調整)
↓
出力: 並べ替え済みポイントを持つ POP
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Point Page 📋
Point Method .ptmethod 🎯
ポイントを並べ替える基準 (ソート方式) を選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| No Change | .none |
並べ替えを行わず入力順をそのまま出力 (Reverse / Shift / Offset のみ適用したいときに使用) |
| Random | .seed |
Seed パラメータの乱数を用いて順序をランダムシャッフル |
| Along Vector | .vector |
原点を通る指定ベクトル上に各点を射影し、その射影位置順で並べ替え |
| Relative to Object Z-axis | .object |
指定 3D オブジェクトのローカル Z 軸方向との距離順で並べ替え (カメラ視点ソートに頻用) |
属性ソート設定 🏷️
Attribute .pointattr 📌
– Attribute (ソート対象属性) — 属性値順に並べ替えたいときに参照する属性名を指定
– 数値属性 (例: weight, P.y) を指定して昇順並べ替えに利用
Attrib is UInt .pointuint 🔢
属性が符号なし整数 (UInt) の場合に最大ビット幅を指定 (小さい最大値ほどソートパスが少なくて済む)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Not UInt Attrib | .notuint |
符号なし整数として扱わない (通常の float/int 属性扱い、最大ビット幅でのソート最適化なし) |
| 4 bits UInt (max 16) | .uint4 |
0〜15 の値域を持つ属性として 4 ビット幅でソート (最小パス数) |
| 8 bits UInt (max 256) | .uint8 |
0〜255 の値域として 8 ビット幅でソート |
| 12 bits UInt (max 4096) | .uint12 |
0〜4095 の値域として 12 ビット幅でソート |
| 16 bits UInt (max 65,536) | .uint16 |
0〜65,535 の値域として 16 ビット幅でソート |
| 20 bits UInt (max 1 M) | .uint20 |
0〜約 100 万 (1,048,575) の値域として 20 ビット幅でソート |
| 24 bits UInt (max 16 M) | .uint24 |
0〜約 1,600 万 (16,777,215) の値域として 24 ビット幅でソート |
| 28 bits UInt (max 268 M) | .uint28 |
0〜約 2.68 億の値域として 28 ビット幅でソート |
| 32 bits UInt (max 4 B) | .uint32 |
0〜約 42 億 (4,294,967,295) の値域として 32 ビット幅でソート (最大パス数) |
ランダム種 🎲
Seed .pointseed 🌱
– Seed (乱数シード) — Random モードで使う乱数生成器のシード値
– 同じ Seed で同じ並びが再現されるため、決定論的なランダムソートを得たいときに利用
近接点参照 📍
Point .pointprox 🎯
– Point (近接点) — 近接ソート時の参照点 (Proximity Point)
– この点との距離を基準にポイント順を並べ替えるシナリオで使用
ベクトル方向 .pointdir ➡️
Vector .pointdir 📐
– Vector (ソート方向ベクトル) — Along Vector モード時にポイントを射影する方向ベクトル
– 原点 (0,0,0) を通り pointdirx / pointdiry / pointdirz の方向に伸びる直線上に各点を射影し、その射影位置でソート
基準オブジェクト 🗺️
Object .pointobj 📦
– Object (基準 3D オブジェクト) — Relative to Object Z-axis モードでソート基準にする 3D オブジェクト
– 通常はカメラ Component を指定して視点深度順 (back-to-front / front-to-back) ソートに利用
並べ替え後調整 🔄
Reverse .pointrev ↩️
– Reverse (順序反転) — 並べ替え後に順序を逆転させるトグル
– 例: Z 軸距離昇順を「奥から手前」から「手前から奥」に切替えるときに使用
Shift .pointshift 🔁
– Shift (オフセット有効化) — 並べ替え後のインデックスを Offset 値だけ循環シフトするトグル
– 並べ替え結果に対し更に「最初の点をずらす」効果を加えたいときに使用
Offset .pointoffset ↪️
– Offset (シフト量) — Shift 有効時に並べ替え結果のインデックスをずらす整数オフセット
– 正の値で前方向、負の値で後方向に循環。総ポイント数を超える値は剰余として扱われる
Common Page 🔧
Bypass .bypass 🚫
POP の処理をスキップして入力をパススルーする設定:
- オン: 最初の入力 (input1) をそのまま出力にパススルー、POP 内部の処理を無効化
- 用途: デバッグ時に特定 POP の効果を一時的に外して比較する際に使用
Free Extra GPU Memory .freeextragpumem 🧠
蓄積した GPU メモリの解放:
- Free Extra GPU Memory パルス: 出力ポイント数が増減を繰り返した際に確保されたままの GPU メモリを明示的に解放するパルスパラメータ
- 用途: 大規模パーティクル系で出力サイズが大きく変動した後、未使用メモリを返却して VRAM を節約
Delete Input Attributes .delinputattrs 🗑️
出力属性の絞り込みパターン:
- Delete Input Attributes パターン: 出力に残したい属性名のパターン (例:
P N Cd) を指定。指定外の属性は破棄される - 用途: 下流で不要な属性を切り落として分岐ブランチを軽量化、メモリ・帯域を節約
実践アイデア 💡
Example 1: 視点深度でソート 🌫️
Particle POP → Sort POP (Relative to Object Z-axis: Camera) → Render TOP (Alpha)
半透明のパーティクルを正しくアルファブレンドするには、カメラから遠い点から手前に向かって順に描画する必要がある。Sort POP の Point Method を Relative to Object Z-axis にしてカメラオブジェクトを参照させると、視点距離順で並び替わり、Reverse トグルで back-to-front / front-to-back を切替えられる。
- Camera Component を Sort POP の
Objectパラメータにドラッグして基準を設定 Point Method= Relative to Object Z-axis を選択- アルファブレンドが正しい場合: そのまま使用、奥が手前を覆って見える場合は
Reverseをオン - 下流の Render TOP で半透明マテリアルを割当ててレンダリング
- 毎フレーム自動でソートが走るため、カメラが動いても深度順は維持される
Example 2: ランダムソート 🎲
Grid POP → Sort POP (Random, Seed=42) → 下流処理
等間隔グリッドのような規則的に並んだポイント群は、下流で順次アニメーション (例: 1 点ずつ点灯) を行うと格子状のパターンが見えてしまう。Sort POP の Random モードで順序をシャッフルしておけば、視覚的にランダムな出現順を簡単に作れる。Seed を変えれば別のランダム並びが得られる。
- 規則的に並んだ 入力 POP (Grid POP / Line POP など) を Sort POP に入力
Point Method= Random を選択Seedパラメータに任意の整数を入力 (例: 42)- 下流で並び順に依存するアニメーション (Accumulate POP で生成したインデックス基準のディレイ等) を組む
- 再現性が必要な場合は Seed を固定、毎回違う並びにしたい場合は時間や乱数を流し込む
Example 3: 属性値順に並べ替え 📊
入力 POP (weight 属性付き) → Sort POP (Attribute=weight, Point Method=Along Vector で代用 or 属性ソート設定) → Accumulate POP で連番化 → 段階表示
ポイントに重み属性 weight を持たせ、その値の昇順で並べ替えた上で連番インデックスを作ると、属性値の小さい順に 1 点ずつ表示するアニメーションを作れる。値の大きい代表点を「最後に登場させる」演出に直結する。
- 前段の Attribute POP / CHOP to POP で各点に
weight属性を付与 - Sort POP の
Attributeパラメータにweightを指定し、属性ソートを有効化 - 属性が整数値なら
Attrib is UIntで適切なビット幅を選んでソートを高速化 - 下流の Accumulate POP で連番インデックスを生成
- GLSL POP で「インデックス < しきい値」のポイントだけ描画する条件を入れて段階表示
関連オペレータ 🔗
類似機能OP 🔍
- Random POP — ランダム値生成 (シャッフル目的なら Sort + Random、ランダム属性生成なら Random POP)
- Quantize POP — 属性値の量子化 (並べ替えではなく値域の離散化)
組み合わせ推奨OP 🔄
- Particle POP — パーティクル生成後に Sort POP で描画順を視点深度ソート
- Accumulate POP — 並べ替え後のポイントに連番インデックスを生成して段階アニメーションに利用
- Attribute POP — ソート対象属性 (weight / 距離など) を作成・リネームしてから Sort POP に渡す
- Lookup Attribute POP — 並べ替え後の順序を別属性のインデックスとして参照
前処理・後処理POP 🎯
Info POP情報 📊
Sort POPは Info CHOP / Info DAT による詳細情報取得に対応しています。
POP固有情報 ✨
num_verts: POP に含まれる頂点 (vertex) 数num_points: POP に含まれるポイント数num_prims: POP に含まれるプリミティブ数
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号cook_abs_frame: 最後にクックされた絶対フレーム番号 (アプリケーション起動からの累積)cook_start_time: 最後のクック開始時刻 (ミリ秒)cook_end_time: 最後のクック終了時刻 (ミリ秒)cooked_this_frame: 現フレームでクックされたか (0 / 1)warnings: 警告数errors: エラー数
出力ポイント・属性情報 🧬
num_points: 並べ替え後の出力ポイント数 (Sort は数を変えないため入力と一致)num_point_attribs: 出力 POP の point 属性数 (Sort は属性を追加しないため入力と一致)num_vertex_attribs: 出力 POP の vertex 属性数num_prim_attribs: 出力 POP の primitive 属性数num_prims: 出力プリミティブ数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 並べ替えても結果が変化しないように見える
✅ Solution:
Point Methodが No Change になっていないか確認 (このモードは並べ替えを行わない)- Common Page の
Bypassがオンになっていないか確認 (オンだと入力をそのままパススルー) - 下流で順序に依存しない処理 (集計・平均など) をしていないか確認 (並べ替え効果は描画順や Accumulate などの順序依存処理で初めて見える)
❌ Problem: Random ソートが毎フレーム同じ並びになる / 逆に毎フレーム変わってしまう
✅ Solution:
Seedが固定整数のままなら毎フレーム同じ並びになる (これは仕様、決定論的シャッフル)- 毎フレーム違う並びが欲しい場合は
SeedにabsTime.frameや$F等の時間依存値をエクスプレッションで流し込む - 逆にアニメ中ずっと固定したい場合は
Seedをエクスプレッションではなく固定整数に設定
❌ Problem: Along Vector で意図と違う方向に並んでしまう
✅ Solution:
pointdirx/pointdiry/pointdirzの符号と大きさを確認 (原点を通る直線への射影なので、方向ベクトルの向きで並び順が決まる)- ポイント群が原点から大きく離れている場合、事前に Transform POP で原点付近に移動してから Sort POP を適用
- 結果が「逆」なら
Reverseトグルで反転
❌ Problem: 視点深度ソート (Relative to Object Z-axis) で透過が正しく描画されない
✅ Solution:
Objectパラメータに正しく現在のレンダリングカメラを指定しているか確認- Render TOP の Alpha ブレンドモードと
Reverseトグルの組合せを確認 (back-to-front 描画なら Reverse オフ、front-to-back なら手前を先に描く設定が必要) - Render TOP の Depth Test / Blending Mode 設定が透過パーティクル向けになっているか確認
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Sort POP
- Sort SOP – ジオメトリ側の対応 OP (同名で SOP 系のポイント並べ替え)
- Sort CHOP – CHOP 側のチャンネルサンプル並べ替え対応 OP

