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

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

Sort POP によるポイント順序の並べ替え処理を示す図

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

概要 📖 – ポイントを並べ替える

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

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 を切替えられる。

  1. Camera Component を Sort POP の Object パラメータにドラッグして基準を設定
  2. Point Method = Relative to Object Z-axis を選択
  3. アルファブレンドが正しい場合: そのまま使用、奥が手前を覆って見える場合は Reverse をオン
  4. 下流の Render TOP で半透明マテリアルを割当ててレンダリング
  5. 毎フレーム自動でソートが走るため、カメラが動いても深度順は維持される

Example 2: ランダムソート 🎲

Grid POP → Sort POP (Random, Seed=42) → 下流処理

等間隔グリッドのような規則的に並んだポイント群は、下流で順次アニメーション (例: 1 点ずつ点灯) を行うと格子状のパターンが見えてしまう。Sort POP の Random モードで順序をシャッフルしておけば、視覚的にランダムな出現順を簡単に作れる。Seed を変えれば別のランダム並びが得られる。

  1. 規則的に並んだ 入力 POP (Grid POP / Line POP など) を Sort POP に入力
  2. Point Method = Random を選択
  3. Seed パラメータに任意の整数を入力 (例: 42)
  4. 下流で並び順に依存するアニメーション (Accumulate POP で生成したインデックス基準のディレイ等) を組む
  5. 再現性が必要な場合は Seed を固定、毎回違う並びにしたい場合は時間や乱数を流し込む

Example 3: 属性値順に並べ替え 📊

入力 POP (weight 属性付き) → Sort POP (Attribute=weight, Point Method=Along Vector で代用 or 属性ソート設定) → Accumulate POP で連番化 → 段階表示

ポイントに重み属性 weight を持たせ、その値の昇順で並べ替えた上で連番インデックスを作ると、属性値の小さい順に 1 点ずつ表示するアニメーションを作れる。値の大きい代表点を「最後に登場させる」演出に直結する。

  1. 前段の Attribute POP / CHOP to POP で各点に weight 属性を付与
  2. Sort POP の Attribute パラメータに weight を指定し、属性ソートを有効化
  3. 属性が整数値なら Attrib is UInt で適切なビット幅を選んでソートを高速化
  4. 下流の Accumulate POP で連番インデックスを生成
  5. 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 が固定整数のままなら毎フレーム同じ並びになる (これは仕様、決定論的シャッフル)
  • 毎フレーム違う並びが欲しい場合は SeedabsTime.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 設定が透過パーティクル向けになっているか確認

参考資料 📚

その他 🔗

公式リソース 📖

この記事は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をコピーしました