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

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

Normalize POP の属性値正規化機能を示す図

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

概要 📖 – 属性値を範囲に正規化

Normalize POPは、入力ジオメトリの属性値をバイアスや指数曲線を介して指定範囲にリマップ・正規化する POPです。成分ごとに独立したバイアス・指数・ルックアップカーブを設定でき、計算エラー値の置換にも対応します。

主な用途 🎯

  • ポイント位置 (P) の値域を [0,1] や [-1,1] 等に正規化
  • 色属性 (Cd) や法線 (N) を任意の範囲にリマップ
  • バイアス・指数曲線・ルックアップカーブで非線形マッピング
  • inf / nan などの計算エラー値を安全な置換値に変換
  • パーティクル属性をシェーダで扱いやすい値域へ整形

データフロー 🔄

入力: POP ジオメトリ(属性付き)

属性スコープ・モード・バイアス曲線に基づく正規化処理

出力: 同形状ジオメトリ(リマップ後の属性値)

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Normalize Page 📋

属性クラス .attrclass 🧱

正規化対象とする属性の所属クラス (点・頂点・面) を指定

項目 内部名 説明
Point .point ポイント属性 (位置 P や色 Cd 等、点ごとに持つデータ) を対象に正規化
Vertex .vertex 頂点属性 (Tex 等、プリミティブ別に持つデータ) を対象に正規化
Primitive .primitive プリミティブ属性 (面単位で持つ法線や色 等) を対象に正規化

入力スコープと縦横比 🔍

Input Attribute Scope .inputattrscope 🎯
Input Attribute Scope (入力属性スコープ) — 指定した属性クラスの中で、どの属性 (例 PCd) のどのコンポーネントを正規化対象にするかをパターンで絞り込みます。

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 として直接参照したい場面で多用するフロー。

  1. Box POP で立方体ジオメトリを生成 (P 範囲はおおよそ [-1, 1])
  2. Normalize POP の Input Attribute Scope と Output Attribute Scope に P を指定
  3. Map to Low を 0、Map to High を 1 に設定し成分ごとに同じ範囲へリマップ
  4. 下流のシェーダで 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 環境への適合に利用。

  1. Particle POP でパーティクル群を生成し色属性 (Cd) を持たせる
  2. Math POP で Cd の中間値を計算
  3. Normalize POP の Input/Output Attribute Scope に Cd を指定し Parameter Size を 3 に設定
  4. 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 を有効化して安全な代替値に変換する保護フロー。下流のシェーダや量子化処理での破綻を防ぐ用途で使う。

  1. 上流の Math POP で 1 / A 等の演算を実行 (除数 0 で inf が発生)
  2. Normalize POP の Input Attribute Scope に対象属性を指定
  3. 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 を回避
  • ExponentLookup Curve で極端な値を出力していないか見直す

❌ Problem: 色や法線の縦横比が崩れる
✅ Solution:

  • Aspect Correct をオンにして縦横比を保ったまま正規化
  • Output Attribute ScopeColor.rgbN 等のベクトル単位で指定し成分を混ぜない
  • Parameter Size を成分数 (3 / 4) に合わせて成分ごとに同じカーブを適用

❌ Problem: Bias や Exponent の効果が見えない
✅ Solution:

  • Mode が Performance 以外の正規化モードに設定されているか確認
  • Parameter Size を 1 から増やし成分ごとに独立カーブを掛けられる状態にする
  • Lookup Curve 選択時はカーブが線形プリセットになっていないか確認

参考資料 📚

その他 🔗

公式リソース 📖

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