Skip to content
第13回 レンダリングパイプライン入門

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を変更すれば計算方法が変わります。変更した入力と画面の変化を対応させます。

実習:一つのオブジェクトを追跡する ​

  1. HierarchyでField > Capsuleを選びます。
  2. Mesh FilterのMeshと、Mesh Renderer > MaterialsのRedを確認します。
  3. Frame Debuggerで対応するDraw Eventを探します。
  4. Event情報からShaderとPassを確認します。
  5. Shadow用のイベントと本体色のイベントを探し、使用するPassを比較します。
  6. Frame DebuggerをDisableにし、RedのBase Map横の色を一つ変更します。再度Enableにし、本体色の変化と影の形を比較します。

Material Assetの変更は、Playを止めても残ることがあります。変更前の値を控えてください。比較後はFrame DebuggerをDisableにし、Undoで色を戻します。

画面の対象GameObjectMaterialShader
左の赤い物体Field > CapsuleRedUniversal Render Pipeline/Lit
中央の緑の物体Field > CubeGreenUniversal Render Pipeline/Lit
右の青い物体Field > SphereBlueUniversal Render Pipeline/Lit
市松模様の床Field > QuadGridUNSLOW/EffectPractice/CheckerFloor
手前の透明なウサギStanford BunnyRefractionShader 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を比較した
  • 四つの資源の関係を一文で説明できる