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

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

Normal POP の法線・接線計算機能を示す図

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

概要 📖 – 点や頂点に法線と接線を計算

Normal POPは、入力ジオメトリの位置属性から法線と接線を GPU 上で計算し、シェーディングや法線マッピングに使える属性として出力する POPです。Normals Action と Tangents Action でそれぞれ計算の有無や条件を切り替え、点法線の重み付けや頂点法線を分離する角度しきい値を細かく制御します。

主な用途 🎯

  • インポートしたジオメトリに欠けている法線 (N) を計算してシェーディングを正しく表示
  • 面の角度しきい値で頂点法線の共有/分離を切り替えてハードエッジとスムーズシェーディングを作り分け
  • テクスチャ座標を基準に接線 (Tangent) を計算してノーマルマップ・法線マッピングに対応
  • 点・頂点・プリミティブのどの属性クラスに法線を持たせるかを指定して下流処理に最適化
  • 出力属性のデータ型・要素数・既定値を手動指定してカスタム属性として法線・接線を生成

データフロー 🔄

入力: 位置属性 (P) を持つジオメトリ

Normals Action / Tangents Action で計算方法を選択 + 角度・重み付けを設定

出力: 法線 (N) と接線が付与されたジオメトリ

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Normals Page 📋

Normals Action .nml 🎛️

Normals Action (法線の処理方法) — 法線をどう扱うかを決定するメニューパラメータ

項目 内部名 説明
No Action .noaction 法線の計算を行わず、入力をそのまま通過させる
Always Compute .alwayscompute 既存の法線の有無にかかわらず、常に法線を計算し直す
Compute if it doesn’t exist .computeifnone 入力に法線が存在しない場合のみ計算する (既存の法線は温存)
Remove .remove 入力に含まれる法線属性を削除する

法線の入力と属性クラス 🏷️

Input Position Attribute .inputposattrn 📍
Input Position Attribute (入力位置属性) — 法線の計算に使う位置属性を指定
– 既定では位置属性 (P) を使うが、別の座標属性から法線を求めたい場合に切り替える

Attribute Class .attrclass 🗂️
Attribute Class (属性クラス) — 点属性・頂点属性・プリミティブ属性のどれに対して処理するかを指定
– 該当する属性クラスがあるジオメトリでのみ有効になります

Normals Weighting .nmlweighting ⚖️

Normals Weighting (法線の重み付け) — 点法線を求める際、その点が属する面の法線をどう加重平均するかを選ぶメニューパラメータ

項目 内部名 説明
Average .average 隣接する面の法線を単純平均する
Angle Weighted .angleWeighted 各面が点でなす角度の大きさで重み付けして平均する
Area Weighted .areaweighted 各面の面積の大きさで重み付けして平均する

Compute Normals Technique .compnmltech ⚙️

Compute Normals Technique (点法線の計算手法) — 点法線を計算する GPU 上のアルゴリズムを選ぶメニューパラメータ

項目 内部名 説明
Atomic Float (if supported) .atomicfloat 対応 GPU でアトミック浮動小数演算を使う手法 (利用可能な場合に高速)
Atomic Comp Swap .atomiccompswap アトミック比較交換 (compare-and-swap) を使う互換性重視の手法

計算範囲としきい角度 📐

Max Number of Primitives per Point .maxprimsperpoint 🔢
Max Number of Primitives per Point (点ごとの最大プリミティブ数) — 点ごとの一時作業領域を確保するための上限値
– 1 つの点が属し得るプリミティブ数の最大値に合わせて設定する

Angle .angle 📐
Angle (しきい角度) — 頂点法線で、共有エッジの両側の面がなす角度がこの値を超えると頂点法線を共有しない
– 値を小さくするとハードエッジが増え、大きくするとスムーズシェーディング寄りになる

Normal Output Attribute Scope .outputattrscopen 🎯

Normal Output Attribute Scope (法線の出力属性スコープ) — 計算した法線をどの属性スロットに書き出すかを選ぶメニューパラメータ

項目 内部名 説明
P .P 位置属性 (P) に出力
N .N 法線属性 (N) に出力 (標準的な法線スロット)
Color .Color 色属性 (Cd) に出力
Color.i012 .Color.i012 色属性の 0・1・2 番目の要素に出力
Tex .Tex テクスチャ座標属性に出力
PointScale .PointScale 点スケール属性に出力
LineWidth .LineWidth 線幅属性に出力

出力属性の手動指定 🛠️

Override Automatic Attribute .overrideautoattrn
Override Automatic Attribute (自動属性の上書き) — 入力とパラメータから自動決定される属性の種類を手動で上書きする
– オンにすると下記の型・要素数・既定値を自分で指定できます

Attribute Type (法線) .attrtypen 🔠

Attribute Type (属性のデータ型) — 法線出力属性のデータ型を選ぶメニューパラメータ (既定は float)

項目 内部名 説明
float .float 単精度浮動小数 (既定)
double .double 倍精度浮動小数
int .int 符号付き整数
uint .uint 符号なし整数
dir .dir 方向ベクトル型 (単精度)
dbl dir .ddir 方向ベクトル型 (倍精度)

Components (法線) .attrnumcompsn 🔢

Components (要素数) — 新しいカスタム属性の要素数を選ぶメニューパラメータ

項目 内部名 説明
1 .1 1 要素 (スカラー)
2 .2 2 要素 (2 次元ベクトル)
3 .3 3 要素 (法線の標準: XYZ)
4 .4 4 要素 (XYZW)

Default Value (法線) .attrdefaultvaln 🔧

計算不能時の出力属性既定値:

  • Default Value (法線): Default Value (既定値) — 計算できなかった場合に出力属性の各要素へ入れる既定値。要素ごとに最大 4 つ (attrdefaultvaln0attrdefaultvaln3) を指定

Tangents Page 📋

Tangents Action .tang 🎛️

Tangents Action (接線の処理方法) — 接線をどう扱うかを決定するメニューパラメータ

項目 内部名 説明
No Action .noaction 接線の計算を行わず、入力をそのまま通過させる
Always Compute .alwayscompute 既存の接線の有無にかかわらず、常に接線を計算し直す
Compute if it doesn’t exist .computeifnone 入力に接線が存在しない場合のみ計算する
Remove .remove 入力に含まれる接線属性を削除する

接線計算の入力属性 📥

Input Position Attribute .inputposattrt 📍
Input Position Attribute (入力位置属性) — 接線の計算に使う位置属性を指定

Input Normal Attribute .inputnormalattr 🧭
Input Normal Attribute (入力法線属性) — 接線の計算に使う法線属性を指定

Input Texture Coord Attribute .inputtexattrib 🗺️
Input Texture Coord Attribute (入力テクスチャ座標属性) — 接線の計算に使うテクスチャ座標属性を指定
– ノーマルマップ用の接線はテクスチャ座標の張り方に依存します

Compute Tangents Technique .comptangtech ⚙️

Compute Tangents Technique (接線の計算手法) — 接線を計算する GPU 上のアルゴリズムを選ぶメニューパラメータ

項目 内部名 説明
Atomic Float (if supported) .atomicfloat 対応 GPU でアトミック浮動小数演算を使う手法 (利用可能な場合に高速)
Atomic Comp Swap .atomiccompswap アトミック比較交換 (compare-and-swap) を使う互換性重視の手法

Tangent Output Attribute Scope .outputattrscopet 🎯

Tangent Output Attribute Scope (接線の出力属性スコープ) — 計算した接線をどの属性スロットに書き出すかを選ぶメニューパラメータ

項目 内部名 説明
P .P 位置属性 (P) に出力
N .N 法線属性 (N) に出力
Color .Color 色属性 (Cd) に出力
Color.rgb .Color.rgb 色属性の RGB 要素に出力
Tex .Tex テクスチャ座標属性に出力
PointScale .PointScale 点スケール属性に出力
LineWidth .LineWidth 線幅属性に出力

接線出力属性の手動指定 🛠️

Override Automatic Attribute .overrideautoattrt
Override Automatic Attribute (自動属性の上書き) — 入力とパラメータから自動決定される接線属性の種類を手動で上書きする
– オンにすると下記の型・要素数・既定値を自分で指定できます

Attribute Type (接線) .attrtypet 🔠

Attribute Type (属性のデータ型) — 接線出力属性のデータ型を選ぶメニューパラメータ (既定は float)

項目 内部名 説明
float .float 単精度浮動小数 (既定)
double .double 倍精度浮動小数
int .int 符号付き整数
uint .uint 符号なし整数
Color .color 色型 (単精度)
Color (double) .dcolor 色型 (倍精度)
Direction .dir 方向ベクトル型 (単精度)
Direction (double) .ddir 方向ベクトル型 (倍精度)

Components (接線) .attrnumcompst 🔢

Components (要素数) — 新しいカスタム接線属性の要素数を選ぶメニューパラメータ

項目 内部名 説明
1 .1 1 要素 (スカラー)
2 .2 2 要素 (2 次元ベクトル)
3 .3 3 要素 (接線の標準: XYZ)
4 .4 4 要素 (XYZW、利き手符号を含む接線で使用)

Default Value (接線) .attrdefaultvalt 🔧

計算不能時の接線出力属性既定値:

  • Default Value (接線): Default Value (既定値) — 計算できなかった場合に接線属性の各要素へ入れる既定値。要素ごとに最大 4 つ (attrdefaultvalt0attrdefaultvalt3) を指定

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: インポートメッシュの法線復元 🧱

Alembic In POP → Normal POP (Normals Action=computeifnone) → Attribute POP → Render TOP

外部 DCC からインポートしたジオメトリには法線 (N) が欠けていることがあり、そのままだと表面が真っ黒になったり陰影が破綻したりする。Normal POP の Compute if it doesn't exist で法線が無い場合のみ計算し、正しいシェーディングを取り戻す基本フロー。

  1. Alembic In POP でメッシュを読み込み
  2. Normal POP の Normals Action を computeifnone に設定
  3. Normals Weighting を average または areaweighted に設定
  4. Render TOP に接続して表面が正しく陰影付けされていることを確認

Example 2: 角度でハードエッジ表現 💎

Box POP → Normal POP (Normals Action=alwayscompute, angle=30) → Render TOP

デフォルトでスムーズに陰影付けされるジオメトリに対し、Normal POP の Angle しきい値を下げて鋭角エッジで頂点法線を分離することで、ロウポリゴン風のシャープな面表現を作るフロー。値を上げ下げするだけで丸みとシャープさを調整できる。

  1. Box POP で立方体ジオメトリを生成
  2. Normal POP の Normals Action を alwayscompute に設定
  3. Angle を 30 度程度に設定 (小さいほどシャープ、大きいほど丸く)
  4. Render TOP で面の境界がハードエッジとして見えることを確認

Example 3: ノーマルマップ用の接線計算 🗺️

File In POP → Normal POP (Tangents Action=alwayscompute) → Attribute POP → Render TOP

ノーマルマップで凹凸を表現するには、テクスチャ座標を基準にした接線 (Tangent) が必要になる。Normal POP の Tangents Action で接線を計算し、入力テクスチャ座標属性を基準にノーマルマッピングが正しく機能する状態に整えるフロー。

  1. File In POP でテクスチャ座標を持つメッシュを読み込み
  2. Normal POP の Normals Action を computeifnone にして法線を確保
  3. Tangents Action を alwayscompute に設定
  4. Input Texture Coord Attribute に使用するテクスチャ座標属性を指定
  5. Render TOP のマテリアルでノーマルマップを割り当てて凹凸が出ることを確認

関連オペレータ 🔗

類似機能OP 🔍

  • Attribute POP — 属性の生成・編集を広く扱う POP。Normal が「法線・接線に特化」するのに対し Attribute は「任意属性の汎用編集」
  • Facet POP — ポイント共有関係を整理する際に法線の再計算も行える POP。エッジの共有/分離という観点で機能が近い

組み合わせ推奨OP 🔄

  • Attribute POP — 法線・接線の計算後に色 (Cd) や独自属性を追加・編集
  • Transform POP — 法線付与後のジオメトリ全体を移動・回転・スケールして配置
  • POP to SOP — 法線・接線を付与したジオメトリを SOP ワークフローへ受け渡し

前処理・後処理POP 🎯


Info POP情報 📊

Normal POP は Info CHOP 経由で法線・接線付与後のジオメトリの統計情報を取得できます。

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: エラー数

POP 汎用情報 📡

  • num_points: 出力ジオメトリのポイント数
  • num_prims: 出力プリミティブ数
  • num_point_attribs: 出力ジオメトリのポイント属性数 (法線 N が追加されたかの確認に使用)
  • num_vertex_attribs: 出力ジオメトリの頂点属性数
  • num_prim_attribs: 出力ジオメトリのプリミティブ属性数
  • gpu_memory_used: この POP が使用している GPU メモリ量

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: 法線を計算してもシェーディングが真っ黒・破綻する
✅ Solution:

  • Normals Action が noaction のままになっていないか確認 (computeifnonealwayscompute に設定)
  • Normal Output Attribute Scope が N になっているか確認 (別スロットだとマテリアルが法線を認識しない)
  • 前段で属性が壊れている場合は Facet POP で重複ポイントを統合してから法線を計算

❌ Problem: ハードエッジにしたいのにスムーズなまま陰影付けされる
✅ Solution:

  • Angle パラメータが大きすぎないか確認 (90 度等にすると大半のエッジが共有のまま残る、30 度前後から試す)
  • Normals Action を alwayscompute にして既存法線を計算し直す
  • Attribute Class が処理したい属性クラス (点 / 頂点) と一致しているか確認

❌ Problem: ノーマルマップ用の接線が正しく出ない
✅ Solution:

  • Tangents Action が noaction のままになっていないか確認 (alwayscompute に設定)
  • Input Texture Coord Attribute に正しいテクスチャ座標属性が指定されているか確認 (接線はテクスチャ座標の張り方に依存)
  • Input Normal Attribute に有効な法線が指定されているか確認 (接線計算には法線が必要)

参考資料 📚

その他 🔗

公式リソース 📖

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