POPsについて勉強したことのメモとして、自分への備忘録も兼ねてこちらに書き記して行こうと思います。
ご覧頂いている方の参考にもなれば幸いです。
TsumikiRoomさんの記事
https://labs.1-10.com/2025/06/24/5242
SleepJamさんの記事
https://note.com/orangejam/n/nb4eeb81b0224
Learning About POPs
https://touchdesigner.notion.site/Learning-About-POPs-3f7645a368a043f99cd143e2382b8ab0
主にこちらの記事の内容と自分で試した内容を元に、AIなども使って自分用のメモとしてまとめていこうと思います。
POPsについて
まずPOPs(Point Operators)とは、
TouchDesignerの新しい3Dジオメトリ用のオペレータ群。
最大の特徴は、GPU上で高速に動くところで、名前は「Point Operators」、
ただ実際に扱うのは点だけではなくて、
・プリミティブ(線・ポリゴン)
・ポリゴンメッシュ
・パーティクル
・ポイントクラウド
のように、 「点をベースにしたあらゆる3Dデータ」 が操作可能になる。
MEMO
いままでInstancingしたものをGLSLやCHOPsなどと組み合わせて行っていたパーティクルやメッシュの操作が、POPsを使うことで扱いやすくなったりやりづらかった表現が試せるようになる、ということな気がする
POPsのデータ構造
POPsは大きく3つの要素でできてる。
Points(ポイント)
すべてのPOPにはポイントのリストがある。
ポイントは「属性の集合体」で、代表的なのは:
- P(Position):XYZ座標
- Color:RGBAカラー
- N(Normal):法線ベクトル
ほかにも、
- ユーザー定義の属性
- オペレータが自動生成する属性
を自由に持てる。
このポイントたちが、あらゆる形状の元ネタになる。
Vertices(頂点)
Vertices(頂点) とは、Point を参照する Vertex のリストで、
Vertexとは「どの Point を使うか」を示す番号が入った箱のようなもの。
POPs におけるデータ構造は、概念的に次のような階層になっている。
Point(点の実体・属性を持つ)
↑
Vertex(Point を参照する番号・必要なら独自属性を持つ)
↑
Primitive(Vertex の並びで形状を定義)
例えば、Quad(四角ポリゴン)が
6, 7, 8, 9 というVertices(頂点のリスト)を持っていたら、
それは「7番目〜10番目のポイントを使って四角形を作る」って意味。
Primitives(プリミティブ)
Primitive(プリミティブ) とは、Vertices(頂点)の並びによって定義される「形状の最小単位」 。
前提としてポイントだけでは点しか表示されないので、他の情報がないとただの点で線や面にならない。
そこで登場するのが Primitive(プリミティブ)で、プリミティブはその素材をどう組むかの定義。
種類はこんな感じ:
- Point:点を描く
- Line:2点で1本の線
- Line Strip:点列で1本の連続線(折れ線)
- Triangle:3点で面(最小のポリゴン)
- Quad:4点で面(四角ポリゴン)
プリミティブ自体にも属性を持てて、
たとえば Color を持たせると「その面全体の色」になる。
そして、プリミティブは「点を持つ」んじゃなくて、正確には
プリミティブは “頂点のリスト” を持つ、
頂点は “ポイント配列への参照(インデックス)” という構造。
レンダリングの流れ
POPs単体では描画されない。
- POPを Geometry COMP に入れる
- MAT(マテリアル)を割り当てる
- Render TOP に渡す
この流れでレンダリングされる。
ここらへんはSOPsと同じ感じっぽい。
CHOPs的なこともできる
POPsは、
- 計算
- ロジック
- ミックス
- 数学処理
みたいな、CHOPsっぽい処理も内部でできる。
MEMO
いままでボトルネックになっていた頂点に対する演算がGPU内部で行えるのはめちゃくちゃメリットある