
概要 📖 – 属性値を範囲に正規化
Normalize POPは、入力ジオメトリの属性値をバイアスや指数曲線を介して指定範囲にリマップ・正規化する POPです。成分ごとに独立したバイアス・指数・ルックアップカーブを設定でき、計算エラー値の置換にも対応します。
主な用途 🎯
- ポイント位置 (P) の値域を [0,1] や [-1,1] 等に正規化
- 色属性 (Cd) や法線 (N) を任意の範囲にリマップ
- バイアス・指数曲線・ルックアップカーブで非線形マッピング
- inf / nan などの計算エラー値を安全な置換値に変換
- パーティクル属性をシェーダで扱いやすい値域へ整形
データフロー 🔄
入力: POP ジオメトリ(属性付き)
↓
属性スコープ・モード・バイアス曲線に基づく正規化処理
↓
出力: 同形状ジオメトリ(リマップ後の属性値)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Normalize Page 📋
属性クラス .attrclass 🧱
正規化対象とする属性の所属クラス (点・頂点・面) を指定
| 項目 | 内部名 | 説明 |
|---|---|---|
| Point | .point |
ポイント属性 (位置 P や色 Cd 等、点ごとに持つデータ) を対象に正規化 |
| Vertex | .vertex |
頂点属性 (Tex 等、プリミティブ別に持つデータ) を対象に正規化 |
| Primitive | .primitive |
プリミティブ属性 (面単位で持つ法線や色 等) を対象に正規化 |
入力スコープと縦横比 🔍
Input Attribute Scope .inputattrscope 🎯Input Attribute Scope (入力属性スコープ) — 指定した属性クラスの中で、どの属性 (例 P や Cd) のどのコンポーネントを正規化対象にするかをパターンで絞り込みます。
Aspect Correct .aspectcorrect 📐Aspect Correct (縦横比補正) — オンにすると入力属性の縦横比 (アスペクト比) を保ったまま正規化を行い、ベクトル形状の歪みを防ぎます。
パラメータサイズ .parsize 🔢
Mode / Bias / Exponent / Map to Low / Map to High などを何成分まで独立に設定するかを指定
| 項目 | 内部名 | 説明 |
|---|---|---|
| 1 | .1 |
1 成分 (スカラ値) で全コンポーネントに同じ正規化を適用 |
| 2 | .2 |
2 成分 (例 UV) を独立に正規化 |
| 3 | .3 |
3 成分 (XYZ / RGB 等) を独立に正規化 |
| 4 | .4 |
4 成分 (XYZW / RGBA 等) を独立に正規化 |
エラー処理 🚨
正規化計算中に発生する inf / nan を安全な値に置換
Replace Errors .replace 🔁Replace Errors (エラー置換) — オンにすると inf / nan が発生した成分を Error Value で指定した値に置き換え、下流シェーダや計算ノードでの破綻を防ぎます。
Error Value .errval 💠Error Value (エラー置換値) — Replace Errors が有効な時、inf / nan を検出した成分に出力する代替値。デフォルトは 0。
正規化モード .mode 🎚️
成分ごとに正規化方式を選択 (Parameter Size の成分数だけ表示)
Mode .mode 🎛️Mode (正規化モード) — Parameter Size で設定した成分ごとに、入力値域から出力値域へどう写像するかの方式を選択します。Performance モードはレガシー扱い。
バイアスと指数 📈
正規化カーブの中央点や曲率を成分ごとに調整
Bias .bias ⚖️Bias (バイアス) — 正規化後の値のバイアスを前方・後方に移動させ、出力分布の中心点を調整します。Parameter Size の成分ごとに独立指定。
Exponent .exp 📊Exponent (指数) — 内部値を指数で累乗して非線形カーブを作成。1.0 で線形、>1 で暗部圧縮、<1 で明部圧縮になります。
ルックアップカーブ .lookupcurve 📉
あらかじめ定義されたカーブから選択して非線形マッピング
Lookup Curve .lookupcurve 🌀Lookup Curve (ルックアップカーブ) — 線形以外のマッピング (S 字曲線・指数曲線等) を行うため、プリセットカーブから選択します。Parameter Size の成分ごとに独立指定。
出力範囲リマップ 🎚️
正規化後の値域を別の範囲に線形変換
Map to Low .tolow ⤵️Map to Low (出力下限) — 正規化結果の最小値をどの値に対応させるかを指定します。
Map to High .tohigh ⤴️Map to High (出力上限) — 正規化結果の最大値をどの値に対応させるかを指定します。
出力属性スコープ .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 で手動上書きできます。
属性タイプ .attrtype 🏷️
上書きする出力属性のデータ型
| 項目 | 内部名 | 説明 |
|---|---|---|
| float | .float |
単精度浮動小数点 |
| double | .double |
倍精度浮動小数点 |
| int | .int |
符号付き整数 |
| uint | .uint |
符号なし整数 |
| Color | .color |
色 (float 版) |
| Color (double) | .dcolor |
色 (double 版) |
| Direction | .dir |
方向ベクトル (float 版) |
| Direction (double) | .ddir |
方向ベクトル (double 版) |
コンポーネント数 .attrnumcomps 🧮
上書きする出力属性のコンポーネント数
| 項目 | 内部名 | 説明 |
|---|---|---|
| 1 | .1 |
1 成分 (スカラ) |
| 2 | .2 |
2 成分 (例 UV) |
| 3 | .3 |
3 成分 (XYZ / RGB) |
| 4 | .4 |
4 成分 (XYZW / RGBA) |
デフォルト値 .attrdefaultval 🎁
計算で算出できないケースに使用される属性の初期値
Default Value .attrdefaultval 💠Default Value (デフォルト値) — 正規化処理で値が算出できなかった成分に対する初期値。Components で指定した数だけ独立に設定可能 (最大 4 個)。
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: 位置を範囲に正規化 📐
Box POP → Normalize POP (Scope P, Map to 0-1) → Render TOP
Box POP の頂点位置 (P) を Normalize POP に通し、シェーダで扱いやすい [0,1] の正規化座標へ落とし込む基本例。シェーダ内で P を UV として直接参照したい場面で多用するフロー。
- Box POP で立方体ジオメトリを生成 (P 範囲はおおよそ [-1, 1])
- Normalize POP の Input Attribute Scope と Output Attribute Scope に
Pを指定 - Map to Low を 0、Map to High を 1 に設定し成分ごとに同じ範囲へリマップ
- 下流のシェーダで P を直接 UV 座標として利用
Example 2: 色を非線形にリマップ 🎨
Particle POP → Math POP (Cd 計算) → Normalize POP (Scope Cd + Exponent) → Render TOP
Particle POP で生成したパーティクル色 (Cd) を Math POP で計算した後、Normalize POP の Exponent を 2.2 に設定してガンマカーブ的な暗部圧縮を行う構成。暗部の階調を活かしたシェーディングや HDR 環境への適合に利用。
- Particle POP でパーティクル群を生成し色属性 (Cd) を持たせる
- Math POP で Cd の中間値を計算
- Normalize POP の Input/Output Attribute Scope に
Cdを指定し Parameter Size を 3 に設定 - Exponent を 2.2、Map to Low/High を 0/1 にして RGB それぞれを非線形にリマップ
Example 3: 計算エラー値を安全に置換 🛡️
Math POP (1/A) → Normalize POP (Replace Errors) → Render TOP
上流で除算や対数演算を行うと inf / nan が発生しやすいため、Normalize POP の Replace Errors を有効化して安全な代替値に変換する保護フロー。下流のシェーダや量子化処理での破綻を防ぐ用途で使う。
- 上流の Math POP で
1 / A等の演算を実行 (除数 0 で inf が発生) - Normalize POP の Input Attribute Scope に対象属性を指定
- Replace Errors をオンにし、Error Value に安全な代替値 (例 0) を設定
関連オペレータ 🔗
類似機能OP 🔍
- Math POP — Map from/to による線形リマップを含む汎用数学演算
- Limit POP — 属性値を範囲内にクランプ (はみ出しを切詰)
- Math Mix POP — 重み付きで複数属性をブレンド
- Quantize POP — 連続値を離散段階に量子化
組み合わせ推奨OP 🔄
- Attribute POP — 新規属性を追加してから Normalize POP で値域を整形
- Math POP — 前段で数学演算後 Normalize POP で値域を [0,1] に揃える
- Noise POP — ノイズで生成した値を Normalize POP で安全な範囲にリマップ
- Lookup Attribute POP — 後段で正規化結果を別属性のキーとしてテーブル参照
前処理・後処理POP 🎯
Info情報 📊
POP ファミリには専用の Info OP が存在しません。Normalize 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:
Map to Low/Map to Highの値が意図通りか確認Parameter Sizeが成分数に合っているか確認 (3 成分の色を 1 で処理すると全成分同じカーブ)- 下流に Limit POP を挟んで値域を確実にクランプ
❌ Problem: inf / nan が下流に伝播する
✅ Solution:
Replace ErrorsをオンにしてError Valueに安全な代替値 (例 0) を設定- 上流の Math POP 等で除算・対数を使っていないか確認し、可能なら除数 0 を回避
ExponentやLookup Curveで極端な値を出力していないか見直す
❌ Problem: 色や法線の縦横比が崩れる
✅ Solution:
Aspect Correctをオンにして縦横比を保ったまま正規化Output Attribute ScopeをColor.rgbやN等のベクトル単位で指定し成分を混ぜない- Parameter Size を成分数 (3 / 4) に合わせて成分ごとに同じカーブを適用
❌ Problem: Bias や Exponent の効果が見えない
✅ Solution:
Modeが Performance 以外の正規化モードに設定されているか確認Parameter Sizeを 1 から増やし成分ごとに独立カーブを掛けられる状態にするLookup Curve選択時はカーブが線形プリセットになっていないか確認
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Normalize POP
- TouchDesigner公式ドキュメント – Points, Vertices and Primitives in POPs

