
概要 📖 – デプスバッファ専用のシャドウ・マスク用マテリアル
Depth MATは、カラーを一切書き込まず、デプス値のみをデプスバッファに書き込む特殊な MATです。シャドウマップ生成・デプスプリパス・オクルージョン判定など、「デプス情報だけを取り出したい」レンダリングパスに使用します。Phong MAT / PBR MAT のようなカラー出力を一切持たないため、後段でカラー描画と組み合わせるパイプラインで使用されます。
主な用途 🎯
- シャドウマップ生成のための光源視点デプスレンダリング
- デプスプリパス (Z pre-pass) によるオーバードロー削減と後段シェーダの高速化
- オクルージョン判定用のデプスバッファ単独取得
- カスケードシャドウマップ (CSM) 等の複数解像度シャドウパスの個別生成
- デプスのみマスクとして後段の
Render Pass TOPでジオメトリを遮蔽する用途
データフロー 🔄
入力: SOP ジオメトリ + Geometry COMP の Material 指定
↓
ライティング計算を一切スキップしデプス値のみフラグメントシェーダから出力
↓
出力: Render TOP の Depth-Buffer (カラーバッファには書き込まない)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Deform Page 🦴
Deform .dodeform 🦴
ボーンによるジオメトリ変形をこのマテリアル上で有効化:
- Deform トグル:
dodeformこのマテリアル上でスケルトン変形を有効化
Get Bone Data .deformdata 📍
デフォームボーンデータの取得元
| 項目 | 内部名 | 説明 |
|---|---|---|
| From SOP | .fromsop |
SOP の capture 属性から取得 |
| From MAT | .frommat |
別の参照元 MAT (capture 属性を持つ SOP 由来) からデフォームデータを継承 |
Bone Capture 設定 .bonecapture 🦴
Capture 属性とスケルトンルートの指定:
- SOP with Capture Data:
targetsoppCaptPath/pCaptData属性を持つ SOP のパスを指定 - pCaptPath Attrib:
pcaptpath使用する pCaptPath 属性名 (Bone Group SOP 通過後はpCaptPath0/pCaptPath1等に分割される) - pCaptData Attrib:
pcaptdata使用する pCaptData 属性名 (pCaptPath と対になる) - Skeleton Root Path:
skelrootpathスケルトンのルート COMP のパス - MAT:
matGet Bone DataがFrom MAT時に参照する他 MAT または参照元 MAT (capture 属性を持つ SOP 由来) のパス
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 比較) によるオクルージョン制御。Depth MAT の中核となる設定群
| 項目 | 内部名 | 説明 |
|---|---|---|
| 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 |
デプステストを通過したピクセルのデプス値をデプスバッファに書き込む (Depth MAT では原則オン) |
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 🔺
ポリゴンの表裏どちらを描画するか (カリング) の選択。シャドウマップでは Front Faces カリングが定石
| 項目 | 内部名 | 説明 |
|---|---|---|
| Use Render Setting | .userender |
Render TOP 側の設定に従う |
| Neither | .neither |
両面とも描画 (カリングなし) |
| Back Faces | .backfaces |
裏面をカリング、表面のみ描画 |
| Front Faces | .frontfaces |
表面をカリング、裏面のみ描画 (シャドウマップで Peter Panning 対策) |
| 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: シャドウマップ生成 (光源視点のデプスレンダリング) 🌑
Light COMP → Camera (light POV) → Render TOP (MAT Override = Depth MAT) → Depth-Buffer 出力
シャドウマップを自前で組む場合、光源視点でシーンをレンダリングしてデプスバッファだけを取り出す必要があります。Depth MAT は色を一切書かないため、シャドウマップ生成パスの理想的なオーバーライド先になります。
- Light COMP の位置を光源として配置する
- 光源を Camera COMP として複製し、Light COMP と同じ Transform を参照させる
- Render TOP の Material Override に Depth MAT のパスを指定 (シーン全体に強制適用)
- Render TOP の Color Output Format を
None/ Depth Output を32-bit floatにしてデプスのみ出力 - 後段のメインレンダラの GLSL シェーダでこのデプスバッファをサンプルしシャドウ判定に使う
Example 2: デプスプリパス (Z pre-pass) によるオーバードロー削減 ⚡
Geometry COMP → Render Pass 1 (Depth MAT) → Render Pass 2 (Phong MAT, depthfunc=Equal)
重いシェーダ (PBR / GLSL) を走らせる前に、軽い Depth MAT でデプスだけ先に描画し、ピクセル単位の重なりを早期に確定させることで、後段で見えないピクセルにフラグメントシェーダを走らせない最適化テクニックです。
- 1 パス目: シーン全体に Depth MAT を割り当て、
Write Depth Valuesオンでデプスバッファを構築 - 2 パス目: 通常のマテリアル (Phong MAT / PBR MAT) で同じシーンを描画
- 2 パス目側のマテリアルで
Depth Test FunctionをEqualに設定 → 最前面のピクセルだけがフラグメントシェーダを通過 - 後段の重いシェーダがオーバードローピクセルでスキップされ、フィルレートを節約
Example 3: デプスマスクとしてのオクルージョン書き込み 🎭
Foreground SOP → Depth MAT (mask geometry) → Render TOP → Background pass のオクルージョン
前景の隠蔽ジオメトリを Depth MAT で「カラーには出ないが奥行きは持つ」プレースホルダーとして描画することで、背景レンダリングを自動的に切り抜く用途。AR / MR のオクルージョン処理でも頻出のパターンです。
- 前景に置きたい隠蔽オブジェクトに Depth MAT を割当
- Render TOP のカラー出力では Depth MAT を割当たジオメトリは 不可視 として扱われる
- ただしデプスバッファには書き込まれるため、後続のジオメトリは Depth Test でカリングされる
- 結果として「見えないが遮蔽する」マスクボリュームとして機能
関連オペレータ 🔗
類似機能OP 🔍
- Constant MAT — ライティング非依存のフラット色描画。デプスは書くがカラーも書く点が違い
- Phong MAT — Diffuse / Specular / Ambient のライティング計算を行う標準マテリアル
- PBR MAT — 物理ベースレンダリング (PBR) のメタリック・ラフネス系シェーディング
- Wireframe MAT — ジオメトリのエッジ (線) のみを描画するマテリアル
組み合わせ推奨OP 🔄
- Geometry COMP — Depth MAT を割り当てるレンダリング対象 COMP、必須の組み合わせ
- Render TOP — Depth MAT を割当たジオメトリを描画しデプスバッファを取得
- Render Pass TOP — デプスプリパスや複数パス描画で Depth MAT を最初のパスに使用
- Light COMP — 光源視点のシャドウマップ生成で Depth MAT を組み合わせる
- Camera COMP — 光源位置と同じ Transform を持つカメラを介してシャドウマップを生成
- GLSL MAT — Depth MAT が出力したデプスバッファをサンプルしてカスタムシャドウ計算
前処理・後処理MAT 🎯
Info情報 📊
MAT は Info CHOP / Info DAT に接続することで、シェーダコンパイル状況やクック情報を取得できます。
汎用オペレータ情報 🔄
total_cooks: プロセス開始からの累計クック回数cook_time: 直近クックに要した時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 現在の警告数 (シェーダコンパイル警告含む)errors: 現在のエラー数 (シェーダコンパイルエラー含む)
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: Depth MAT を割り当てたら何も見えなくなった
✅ Solution:
- Depth MAT は意図的にカラーバッファに書き込まない仕様。シーンに割り当てた瞬間その面はカラーレンダリングから消える
- シャドウマップ生成や Z pre-pass 用途で使うのが正しい。通常レンダリングでカラー表示したい場合は Constant MAT 等に変更
- 確認手段として Render TOP の Depth Output を
32-bit floatにして TOP として可視化すると、デプス情報が書き込まれていることが分かる
❌ Problem: シャドウマップに自己シャドウ (シャドウアクネ) が発生する
✅ Solution:
Polygon Depth OffsetをオンにしOffset Factor/Offset Unitsでデプスバイアスを加えるCull FaceをFront Facesに切り替えると Peter Panning の代わりに自己シャドウアクネを軽減できる定石- Render TOP のデプス精度を
32-bit floatに上げることでも軽減 (精度不足が原因のことが多い)
❌ Problem: デプスプリパスで 2 パス目が表示されない / Z-fighting する
✅ Solution:
- 2 パス目のマテリアルで
Depth Test FunctionをEqualまたはLess Than or Equalに設定 - 1 パス目と 2 パス目のジオメトリ・カメラ・行列が完全一致しているか確認 (1 ピクセルでもずれると Equal 比較が失敗)
- Render TOP 設定の Anti-Aliasing が 1 パス目と 2 パス目で同じか確認 (MSAA がずれるとデプスが微妙に変わる)
❌ Problem: デプスバッファの値が想定とスケールが違って見える
✅ Solution:
- OpenGL のデプスは
[0, 1]の非線形値。線形デプスが欲しい場合は GLSL シェーダでznear/zfarを使った再射影が必要 - Camera COMP の
Near/Farを狭めるとデプス精度が改善 (Far を不必要に大きくしない) - Render TOP の Depth Output Format を
32-bit floatに上げて精度を確保
参考資料 📚
その他 🔗
- TouchDesigner Wiki — MAT 概要
- TouchDesigner Wiki — Category:MATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group


