
概要 📖 – 属性値を段階値に丸める
Quantize POPは、入力ジオメトリの属性値を有限個の離散レベルに変換する POPです。切り捨て・四捨五入・切り上げによる段階化や、閾値比較による 0/1 化を、点・頂点・プリミティブの各属性クラスごとに 1 ノードで適用します。
主な用途 🎯
- ポイント位置 (P) を一定間隔のグリッドにスナップさせる量子化
- 色 (Cd) の階調を減らしてポスタリゼーション風の表現を作る
- 連続値を切り捨て・四捨五入・切り上げで離散レベルに変換
- 閾値比較 (大なり・等しい 等) による属性値の 0/1 マスク生成
- 出力属性のキャスト変換 (float / int) とコンポーネント数調整
データフロー 🔄
入力: POP ジオメトリ(属性付き)
↓
属性スコープと量子化方式に基づく丸め処理
↓
出力: 同形状ジオメトリ(離散化された属性値)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Quantize Page 📋
属性クラス .attrclass 🧱
量子化の対象とする属性の所属クラス (点・頂点・面) を指定
| 項目 | 内部名 | 説明 |
|---|---|---|
| Point | .point |
ポイント属性 (位置 P や色 Cd 等、頂点共有データ) を対象に量子化 |
| Vertex | .vertex |
頂点属性 (Tex 等、プリミティブ別に持つデータ) を対象に量子化 |
| Primitive | .primitive |
プリミティブ属性 (面単位で持つ法線や色 等) を対象に量子化 |
グループとスコープ 🎯
Group .group 🗂️Group (グループ名) — 入力にグループがある場合、ここで名前を指定するとそのグループ内の要素のみを対象に処理します。空欄なら全体に適用。
Input Attribute Scope .inputattrscope 🔍Input Attribute Scope (入力属性スコープ) — 指定した属性クラスの中で、どの属性 (例 P や Cd) のどのコンポーネントを処理対象にするかをパターンで絞り込みます。
パラメータサイズ .parsize 🔢
Value Step・Value Offset などのスカラパラメータを何成分まで独立に持つかを指定
| 項目 | 内部名 | 説明 |
|---|---|---|
| 1 | .1 |
1 成分 (スカラ値) で全コンポーネントに同じ値を適用 |
| 2 | .2 |
2 成分 (例 UV 座標) を独立に制御 |
| 3 | .3 |
3 成分 (XYZ / RGB 等) を独立に制御 |
| 4 | .4 |
4 成分 (XYZW / RGBA 等) を独立に制御 |
量子化方式 .quantize 📏
連続値を有限個の離散レベルに変換、または閾値比較で 0/1 化する方式を選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
量子化を行わない (素通し) |
| Floor | .floor |
切り捨て (床関数) で離散化 |
| Round | .round |
四捨五入で離散化 |
| Ceiling | .ceiling |
切り上げ (天井関数) で離散化 |
| > | .gt |
比較値より大なら 1、それ以外 0 |
| >= | .gteq |
比較値以上なら 1、それ以外 0 |
| == | .eq |
比較値と等しいなら 1、それ以外 0 |
| != | .neq |
比較値と異なるなら 1、それ以外 0 |
| <= | .lteq |
比較値以下なら 1、それ以外 0 |
| < | .lt |
比較値未満なら 1、それ以外 0 |
量子化パラメータ 🎚️
離散化のステップ幅・オフセット、および比較演算時の比較値を指定
Value Step .quantstep 📐Value Step (ステップ幅) — 量子化に使う段階の刻み幅。例えば 0.25 を指定すると 0 / 0.25 / 0.5 … の格子に値が丸められます。
Value Offset .quantoffset ↔️Value Offset (オフセット) — 量子化に使うオフセット値。格子の基準位置をずらして、丸め先のレベルを平行移動します。
Value Compare .quantcompare ⚖️Value Compare (比較値) — 比較演算 (大なり・等しい 等) を選んだ際に、入力値と突き合わせる基準となる比較値を設定します。
キャスト .castto 🔀
出力属性の型を別の型にキャスト
| 項目 | 内部名 | 説明 |
|---|---|---|
| Automatic | .auto |
入力型と処理結果から自動決定 |
| Float | .float |
単精度浮動小数点 (float) に強制 |
| Int | .int |
整数 (int) に強制 |
出力属性スコープ .outputattrscope 📤
処理結果を書き出す出力属性の指定
| 項目 | 内部名 | 説明 |
|---|---|---|
| P | .P |
ポイント位置 (3 成分 float) |
| N | .N |
法線ベクトル (3 成分 float) |
| Color | .Color |
色 (RGBA 4 成分) |
| Color.rgb | .Color.rgb |
色の RGB 3 成分のみ (アルファ除外) |
| Tex | .Tex |
テクスチャ座標 (UV) |
| PointScale | .PointScale |
ポイントスケール属性 |
| LineWidth | .LineWidth |
ラインの太さ属性 |
出力属性オーバーライド 🛡️
出力属性の型・コンポーネント数・デフォルト値を手動で上書き
Override Automatic Attribute .overrideautoattr 🔓Override Automatic Attribute (自動属性上書き) — オンにすると、入力とパラメータから自動決定される属性型を以下の Attribute Type / Components / Default Value で手動上書きできます。
Attribute Type .attrtype 🏷️Attribute Type (属性型) — 出力属性のデータ型 (float / double / int / uint / Color / Direction 等) を選択します。
- float (単精度浮動小数点)
- double (倍精度浮動小数点)
- int / uint (整数 / 符号なし整数)
- Color / Color (double) (色、float / double 版)
- Direction / Direction (double) (方向ベクトル、float / double 版)
Components .attrnumcomps 🧮Components (コンポーネント数) — 新規カスタム属性のコンポーネント数 (1〜4) を指定します。
Default Value .attrdefaultval 🎁Default Value (デフォルト値) — 処理で算出できないケースに使用される属性の初期値 (コンポーネントごとに最大 4 個指定可能)。
Common Page 🔧
Bypass .bypass 🚫
POP の処理をスキップして入力をパススルーする設定:
- オン: 最初の入力 (input1) をそのまま出力にパススルー、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: ポイントをグリッドにスナップ 🧲
Grid POP → Quantize POP (Floor on P + Value Step) → Render TOP
Grid POP の各ポイント位置 (P) を Quantize POP の Floor 方式と Value Step で一定間隔の格子に丸め、ボクセル風・ピクセルアート風の整列したジオメトリを生成する構成。デジタルな質感の演出に向く。
- Grid POP で連続的なポイント群を生成
- Quantize POP の Attribute Class を Point、Output Attribute Scope に P を指定
- Quantize を Floor に設定し、Value Step に格子の刻み幅 (例 0.25) を入力
- 下流でレンダリングすると位置が一定間隔にスナップした見た目になる
Example 2: 色のポスタリゼーション 🎨
Noise POP → Quantize POP (Round on Color + Value Step) → Render TOP
Noise POP で生成した連続的な色属性 (Color) を Quantize POP の Round 方式で階調数を減らし、ポスタリゼーション (色数を絞ったイラスト調) の表現を作る例。Value Step を変えると階調の細かさを調整できます。
- Noise POP でなめらかなグラデーション状の色を生成
- Quantize POP の Output Attribute Scope に Color を指定
- Quantize を Round、Value Step を 0.2 程度に設定して階調を 5 段階に削減
- 下流のシェーダで色数を絞ったフラットな見た目を確認
Example 3: 閾値で 0/1 マスク生成 🎯
In POP → Quantize POP (>= + Value Compare) → Math POP
上流から流れてきた属性値を Quantize POP の比較演算 (>=) と Value Compare で 0/1 のマスク値に変換し、後段の Math POP でマスクを使った選択的な処理に繋げるフロー。属性ベースの条件分岐の起点になる。
- In POP で上流ジオメトリを受け取る
- Quantize POP の Quantize を >= に設定し、Value Compare に閾値を入力
- 閾値以上のポイントが 1、それ以外が 0 のマスク属性を出力
- 後段の Math POP でマスクを乗算して領域を選択的に処理
関連オペレータ 🔗
類似機能OP 🔍
- Math POP — 量子化を含む汎用的な属性数学演算
- Limit POP — 属性値を範囲内にクランプ
- ReRange POP — 属性値の範囲を別の範囲へ線形リマップ
- Convert POP — ジオメトリ種別の変換に特化
組み合わせ推奨OP 🔄
- Noise POP — ノイズで生成した連続値を Quantize POP で階段状に丸める
- Attribute POP — 新規属性を追加してから Quantize POP で離散化
- Math POP — Math POP で前処理した値を Quantize POP で段階化
- Lookup Attribute POP — 量子化したインデックス値をキーにテーブル参照
- Math CHOP — チャンネル側の量子化と組み合わせて GPU/CPU を跨いだ制御
前処理・後処理POP 🎯
Info情報 📊
POP ファミリには専用の Info OP が存在しません。Quantize POP の出力情報は下流の Null POP で値を確認したり、Python から POP クラスメンバーで取得します。
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: エラー数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 量子化結果が反映されない
✅ Solution:
Attribute Classが対象属性のクラス (Point / Vertex / Primitive) と一致しているか確認Input Attribute Scope/Output Attribute Scopeに対象属性名 (P / N / Color 等) が含まれているか確認- 上流に同名属性が存在しない場合は Attribute POP で先に属性を追加
❌ Problem: 刻み幅が思った通りにならない
✅ Solution:
Value Stepが 0 になっていないか確認 (0 だと量子化が機能しない)Value Offsetで格子の基準位置を入力データの範囲に合わせて調整Quantize方式が Floor / Round / Ceiling のいずれかになっているか確認
❌ Problem: 比較演算でマスクが全て 0 または 1 になる
✅ Solution:
Value Compareの値が入力データの値域の内側にあるか確認- 下流の Math POP で入力値を正規化してから比較
Quantize方式が意図した比較 (大なり・以上 等) になっているか確認
❌ Problem: 出力型がシェーダ側で扱いにくい
✅ Solution:
Cast toで Float / Int に明示的に変換- ベクトル属性なら
Override Automatic Attributeを有効化しAttribute Typeを Direction に固定 Componentsでコンポーネント数を明示しシェーダ側の vec3 / vec4 と合わせる
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Quantize POP
- TouchDesigner公式ドキュメント – Points, Vertices and Primitives in POPs

