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

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

Phong MAT の Diffuse / Specular シェーディングを示す図

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

概要 📖 – Diffuse / Specular ライティングの標準シェーダ

Phong MATは、Diffuse / Specular / Ambient の古典ライティングモデルでオブジェクトを陰影付けし、各種テクスチャマップを合成する TouchDesigner 標準の MATです。PBR が物理ベースの新世代モデルである一方、Phong はパフォーマンス重視 / 軽量シェーディング向け。アーティスティックなコントロールが必要なケースで今でも広く使われます。

主な用途 🎯

  • Diffuse + Specular + Ambient による標準的なライティングシェーディング
  • Color Map / Normal Map / Specular Map 等の各種テクスチャマップ適用
  • Bump / Parallax / Displacement マッピングによる擬似 3D 凹凸
  • Environment Map による疑似反射 (Sphere Map / Cube Map)
  • Two-Sided Lighting でポリゴンの両面ライティング制御

データフロー 🔄

入力: Diffuse / Specular / Ambient カラー + 各種マップ TOP + Light COMP

古典 Phong シェーディング計算 (Diffuse + Specular + Ambient + Emit)

出力: Geometry COMP の Material 入力へ

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

RGB Page 🎨

Base Colors .basecolors 🎨

Diffuse / Ambient / Specular / Emit / Constant のライティング色設定

項目 内部名 説明
Ambient uses Diffuse .ambdiff オンのとき AmbientDiffuse 値を流用する
Diffuse .diff ディフューズ (拡散光) として反射される色。最も基本的なマテリアル色
Ambient .amb アンビエント (環境光) として反射される色
Specular .spec スペキュラ (鏡面反射) の色。光沢のあるハイライト部分の色味
Emit .emit ライトが当たっていなくても自発的に発する色 (自己発光)
Constant .constant 最終色に加算される定数色。finalcolor += Point Color * Constant Color
Shininess .shininess スペキュラハイライトの収束度。高いほどプラスチック / 金属のように鋭い光沢

Maps Overview .mapsoverview 🖼️

Phong MAT は多数のマップ TOP を受け付けます。各マップに対し独立した Extend / Filter / Sampling Mode パラメータが提供されます (詳細は公式 docs):

  • Color Map: ライティング結果に乗算される TOP テクスチャ
  • Normal Map (Bump): 法線マップ。タンジェント属性を持つジオメトリが必要
  • Height Map / Parallax / Displacement: 高さマップで凹凸 / パララックス / 実頂点変位を表現
  • Diffuse / Specular / Emit Map: Diffuse / Specular / Emit カラーに個別に乗算される TOP
  • Environment Map: 疑似反射用のスフィアマップ / キューブマップ

Alpha Page 🌫️

Alpha Settings .alphasettings 🌫️

アルファマップとビューイングアングル依存のアルファ制御

項目 内部名 説明
Alpha Map .alphamap オブジェクトのアルファに乗算される TOP マップ。Red チャンネルのみ使用
Uniform Alpha .alphamode オフのとき、ポリゴン法線とカメラの角度でアルファが変化する
Alpha Front .alphafront 法線がカメラを向いているピクセルのアルファ値
Alpha Side .alphaside 法線がカメラに対して横向きのピクセルのアルファ値 (非 Uniform 時)
Alpha Rolloff .rolloff Front / Side 間のアルファ補間の急峻さ

Lighting Page 💡

Two-Sided Lighting .twosidedlighting 💡

ポリゴンの表裏それぞれをどうライティングするか

項目 内部名 説明
Polygon Front Faces .frontfacelit 表面の法線をどうライティングに使うか
Polygon Back Faces .backfacelit 裏面の法線をどうライティングに使うか

Shader Generation .shadergen 🛠️

Phong 相当の GLSL シェーダコードを書き出すユーティリティ:

  • Output Shader …: ボタン。現在の Phong 設定と同等の GLSL MAT + Text DAT を生成。シェーダはレンダリングされた構成に依存して選択肢が変わる

Deform Page 🦴

Deform .dodeform 🦴

ボーン変形 (スキニング) の設定群:

  • Deform トグル: ボーン変形をマテリアル上で有効化
  • SOP with Capture Data: pCaptPath / pCaptData 属性を持つ SOP
  • Skeleton Root Path: スケルトンのルート COMP のパス

Common Page 🔧

Blending .blending 🎨

色のブレンディング (透過合成) に関する設定群

項目 内部名 説明
Add .add ソースとデスティネーションを加算
Subtract .subtract ソースからデスティネーションを減算
Reverse Subtract .revsubtract デスティネーションからソースを減算
Minimum .minimum 両者の最小値を採用
Maximum .maximum 両者の最大値を採用
Blending (Transparency) .blending 透過効果のためのカラーブレンディングを有効化するトグル
Separate Alpha Function .separatealphafunc アルファチャンネルのブレンド設定を RGB と独立させる
Blend Constant Color .blendconstant constantcol 系オプション選択時に使用する RGB 定数カラー
Blend Constant Alpha .blendconstanta constanta 系オプション選択時に使用する定数アルファ値
Legacy Alpha Behavior .legacyalphabehavior 旧バージョンのアルファ処理との後方互換を有効化
Post-Mult Color by Alpha .postmultalpha ブレンド演算完了後に RGB を計算後アルファで乗算

Depth Test .depthtest 📏

デプステスト (Z 比較) によるオクルージョン制御

項目 内部名 説明
Less Than .less 新ピクセルのデプスが既存より小さい (手前) なら描画
Less Than or Equal .lessorequal 新ピクセルが既存以下なら描画
Equal .equal デプスが完全一致時のみ描画
Greater Than .greater 新ピクセルが既存より大きい (奥) なら描画
Greater Than or Equal .greaterorequal 新ピクセルが既存以上なら描画
Not Equal .notequal デプスが一致しない場合のみ描画
Always .always デプス比較を行わず常に描画
Depth Test .depthtest デプスバッファとの比較によるオクルージョンを有効化
Write Depth Values .depthwriting デプステストを通過したピクセルのデプス値をデプスバッファに書き込む

Alpha Test .alphatest 🔍

アルファ値に基づくピクセル単位の破棄判定

項目 内部名 説明
Less Than .less アルファが閾値より小さいピクセルを残す
Less Than or Equal .lessorequal アルファが閾値以下のピクセルを残す
Greater Than .greater アルファが閾値より大きいピクセルを残す
Greater Than or Equal .greaterorequal アルファが閾値以上のピクセルを残す
Discard Pixels Based on Alpha .alphatest ピクセル単位でアルファによる破棄判定を有効化
Alpha Threshold .alphathreshold アルファ比較の閾値。条件外のピクセルは破棄される

Wire Frame .wireframe 🕸️

ジオメトリをワイヤーフレーム表示する設定

項目 内部名 説明
Off .off 通常のソリッド描画 (ワイヤーフレーム無効)
OpenGL Tesselated Wire Frame .tesselated OpenGL が三角形分割した状態でワイヤーを描画
Topology Wire Frame .topology 元のポリゴントポロジ (四角形等) のままワイヤーを描画
Line Width .wirewidth ワイヤーフレームの線の太さ (ピクセル単位)

Cull Face .cullface 🔺

ポリゴンの表裏どちらを描画するか (カリング) の選択

項目 内部名 説明
Use Render Setting .userender Render TOP 側の設定に従う
Neither .neither 両面とも描画 (カリングなし)
Back Faces .backfaces 裏面をカリング、表面のみ描画
Front Faces .frontfaces 表面をカリング、裏面のみ描画
Both Faces .bothfaces 両面をカリング (= 何も描画されない)

Polygon Depth Offset .polygonoffset ↔️

Z-fighting 対策としてポリゴンのデプス値をオフセット

項目 内部名 説明
Polygon Depth Offset .polygonoffset ポリゴンのデプス値オフセット機能を有効化
Offset Factor .polygonoffsetfactor デプス勾配に対するオフセットの乗数
Offset Units .polygonoffsetunits デプス単位の固定オフセット量

Color Space .parmcolorspace 🌈

カラーパラメータの色空間 / 基準白色の解釈

項目 内部名 説明
sRGB .srgb SDR sRGB トランスファ関数 (一般的なディスプレイ標準)
sRGB – Linear .srglinear SDR リニアトランスファ
Rec.601 (NTSC) .rec601ntsc SDR NTSC 規格 (旧テレビ放送)
Rec.709 .rec709 SDR ビデオ規格 (HD テレビ)
Rec.2020 .rec2020 HDR 放送規格 (4K/8K UHD)
DCI-P3 .dcip3 HDR シネマ規格 (D65 ホワイトポイント)
DCI-P3 (D60) .dcip3d60 HDR シネマ規格 (D60 ホワイトポイント)
Display-P3 (D65) .displayp3d65 HDR sRGB ガンマ (Apple ディスプレイ等)
ACES2065-1 .aces2065-1 HDR リニアシネマ規格 (アーカイブ用)
ACEScg .acescg HDR リニアシネマ作業用色空間
Passthrough .passthrough 色空間変換を行わずそのまま渡す

実践アイデア 💡

Example 1: Diffuse + Color Map によるテクスチャマッピング 🖼️

Movie File In TOP → Phong MAT (Color Map) → Geometry COMP → Light COMP → Render TOP

最も基本的なテクスチャ付きライティング。Color Map にテクスチャを貼り、Light COMP の Diffuse 計算で陰影をつけます。

  1. Movie File In TOP で画像を読み込み
  2. Phong MAT の Color Map に TOP を指定、Diffuse を白に設定
  3. Geometry COMP に SOP + Phong MAT、シーンに Light COMP を 1 つ配置
  4. Render TOP で確認、テクスチャに陰影が乗った状態で表示される

Example 2: Normal Map による擬似的な凹凸表現 🪨

Normal Map TOP → Phong MAT (Normal Map + Color Map) → Geometry COMP (tangent 属性必須) → Render TOP

平面ジオメトリでも、Normal Map を貼ることで凹凸があるように見せられます。Attribute Create SOP でタンジェント属性を生成しておくのが必須。

  1. Attribute Create SOP でジオメトリに tangent (T[4]) 属性を生成
  2. Phong MAT の Normal Map に法線テクスチャ TOP を割当
  3. Bump Scale で凹凸の強度を調整
  4. Light COMP の方向を変えると、平面でも凹凸表現が動的に見える

Example 3: Environment Map による疑似反射 🪞

Render TOP (Render Cube Map) → Phong MAT (Environment Map) → Geometry COMP → Render TOP

Sphere Map または Cube Map で疑似的な周囲反射を実現。完全な反射ではないが、リアルタイムでそれっぽい質感を得るには十分です。

  1. 別 Render TOP で Cube Map を生成 (Render Cube Map 設定)
  2. Phong MAT の Environment Map にその TOP を割当
  3. 純反射的に見せたい場合は Diffuse / Specular を 0 に
  4. オブジェクトの動きや回転に応じて反射が変化する

関連オペレータ 🔗

類似機能OP 🔍

  • PBR MAT — Metallic / Roughness ベースの新世代物理レンダリング
  • Constant MAT — ライティングを行わないフラットシェーディング
  • GLSL MAT — カスタム GLSL シェーダを書く際の上位互換 MAT

組み合わせ推奨OP 🔄

  • Geometry COMP — Phong MAT を割り当てるレンダリング対象
  • Light COMP — Phong の Diffuse / Specular 計算に必要なライト光源
  • Render TOP — Phong マテリアル付きジオメトリを最終 2D 画像に描画
  • Camera COMP — ビュー視点を提供。Specular ハイライトの位置はカメラ位置に依存
  • Attribute Create SOP — Normal Map 用のタンジェント属性を生成

前処理・後処理MAT 🎯


Info情報 📊

MAT は Info CHOP / Info DAT に接続することで、シェーダコンパイル状況やクック情報を取得できます。

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からの累計クック回数
  • cook_time: 直近クックに要した時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 現在の警告数 (シェーダコンパイル警告含む)
  • errors: 現在のエラー数 (シェーダコンパイルエラー含む)

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

よくある問題と解決策 🔧

❌ Problem: Phong MAT を当てても真っ黒で何も見えない
✅ Solution:

  • シーンに Light COMP が存在し、Render TOP の Light 入力に接続されているか確認 (Phong はライトが無いと真っ黒)
  • Ambient 色を一時的に上げる (例: 0.2, 0.2, 0.2) と最低限のベース色が確認できる
  • デバッグとして一度 Constant MAT に切り替えてジオメトリ / カメラ / Render TOP の構成が正しいか確認

❌ Problem: Normal Map を貼っても凹凸表現にならない
✅ Solution:

  • ジオメトリに tangent 属性 (T[4]) が存在するか確認、無ければ Attribute Create SOP で生成
  • Bump Scale が 0 になっていないか確認
  • Normal Map TOP のカラースペースが linear として解釈されているか確認 (sRGB だと法線情報が歪む)

❌ Problem: Specular ハイライトが見えない / 動かない
✅ Solution:

  • Specular 色が黒になっていないか確認
  • Shininess を下げる (例: 10〜30) とハイライトが広がって見えやすくなる
  • Camera COMP の位置とライト位置が同方向だとハイライトが見えない、ライトとカメラの角度を変えて検証

❌ Problem: テクスチャマップを貼ったのに反映されない
✅ Solution:

  • ジオメトリに UV 属性が存在するか確認 (uv attribute)、なければ Texture SOP 等で生成
  • 対象マップパラメータ (Color Map / Diffuse Map / Specular Map 等) のサンプリング座標 (SOP Texture Coord) が正しいか確認
  • Filter が Nearest になっていてピクセル化していないか確認

参考資料 📚

公式リソース 📖

コミュニティ 💬

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