2 / 4 Draw Eventと描画資源の対応
一つのDraw Eventを構成するMesh、Material、Shader、Passの役割を理解し、画面上の物体から使用資源を追跡します。
Draw Eventは複数の資源を結び付ける
描画イベントには、形を示すデータと、表面を計算する方法の両方が必要です。UnityではMesh、Material、Shader、Passが役割を分担しています。
Meshは形状の入力
Meshは頂点、三角形、Normal、UVなどを持つ形状データです。Meshだけでは最終的な色や透明度は決まりませんが、どの位置に頂点があり、どのような面を作るかをShaderへ渡します。
MaterialはShaderへ渡す設定
Materialは、使用するShaderと、Texture、色、強さなどのPropertyを組み合わせた設定です。同じShaderを使っていても、MaterialのPropertyが違えば異なる見た目を作れます。
ShaderとPass
Shaderは、頂点やFragmentをどのように計算するかを定義します。PassはShader内の一つの描画目的です。本体色を描くPass、Shadow Mapへ形を描くPass、Depthだけを書くPassなど、同じShaderが複数のPassを持つ場合があります。
画面上の物体から資源をたどる
Frame Debuggerで目立つオブジェクトのDraw Eventを選びます。Event情報とInspectorを往復し、GameObjectからRenderer、Mesh、Material、Shader、Passへつながる経路を確認します。
Rendererは、GameObjectの形状をどのMaterialで描くかをUnityへ伝えるComponentです。Mesh RendererやSkinned Mesh Rendererなどがあり、描画資源をScene内のObjectへ結び付けます。
名前ではなく役割を見る
Pass名やイベント名はShaderやUnityのVersionによって異なる場合があります。名前だけで判断せず、そのPassがどのRender Targetへ何を書いているかを見ます。Color Bufferへ書くのか、Depth Bufferへ書くのか、Shadow用Textureへ書くのかで役割を判断できます。
Materialを変更したときの影響
Material Propertyを一つ変更すると、Meshは同じままでもFragmentの出力が変わります。Meshを変更すれば形が変わり、Shaderを変更すれば計算方法が変わります。変更した入力と画面の変化を対応させます。
実習:一つのオブジェクトを追跡する
- Hierarchyで
Field > Capsuleを選びます。 Mesh FilterのMeshと、Mesh Renderer > MaterialsのRedを確認します。- Frame Debuggerで対応するDraw Eventを探します。
- Event情報からShaderとPassを確認します。
- Shadow用のイベントと本体色のイベントを探し、使用するPassを比較します。
- Frame Debuggerを
Disableにし、RedのBase Map横の色を一つ変更します。再度Enableにし、本体色の変化と影の形を比較します。
Material Assetの変更は、Playを止めても残ることがあります。変更前の値を控えてください。比較後はFrame DebuggerをDisableにし、Undoで色を戻します。
| 画面の対象 | GameObject | Material | Shader |
|---|---|---|---|
| 左の赤い物体 | Field > Capsule | Red | Universal Render Pipeline/Lit |
| 中央の緑の物体 | Field > Cube | Green | Universal Render Pipeline/Lit |
| 右の青い物体 | Field > Sphere | Blue | Universal Render Pipeline/Lit |
| 市松模様の床 | Field > Quad | Grid | UNSLOW/EffectPractice/CheckerFloor |
| 手前の透明なウサギ | Stanford Bunny | Refraction | Shader Graphs/Refraction |
Capsule、Cube、Sphereは同じLit Shaderを使い、Materialの色などの設定を変えています。床とウサギは別のShaderです。床は市松模様を計算し、ウサギは背景を保存したTextureを使って屈折を描きます。
SRP Batcherなどにより複数の描画がまとまって見える場合は、その項目を開き、内側の描画を選びます。Object名だけで見つからないときはMaterial名やShader名も手掛かりにします。
関係を一文で説明する
観察後は「Meshの頂点を、Materialが指定するShaderのPassで描いた」のように、資源同士の関係を一文へまとめます。専門用語を列挙するだけでなく、どのデータがどの役割を担当したかを動詞で結ぶことが重要です。
- Mesh、Material、Shader、Passの役割を区別できる
- 対象オブジェクトのDraw Eventを見つけた
- Draw Eventから使用したShaderとPassを確認した
- 同じ物体が使うShadow用Passと本体用Passを比較した
- 四つの資源の関係を一文で説明できる