UnityのUniversal Render PipelineにおけるシェーダのLightModeの用途を整理しました。
Unity2021.2b
はじめに
Universal Render Pipeline(URP)のシェーダを書く際には、各パスのTagsにLightModeを記述する必要があります。
Tags{"LightMode" = "DepthOnly"}
これはそのパスの用途を定義するためのものなので、適切に指定しないと意図した通りに動作しません。
さらにUnity2021.2ではDeferred Renderingもリリースされ、GBuffer関連のLightModeが増えたことでより複雑になりました。
そのためこの記事では一度URPにおけるLightModeの用途について整理します。
LightModeまとめ
それでは以下に各LightModeとその説明をまとめます。
LightMode | 説明 |
---|---|
UniversalForward | ・Forward Rendering設定の場合に使われるパス ・Deferred Renderingにも対応する場合、UniversalGBufferのパスも作る |
UniversalGBuffer | ・Deferred Rendering設定の場合にG-Bufferを描画するのに使われる ・Forward Renderingにも対応する場合、UniversalForwardのパスも作る |
UniversalForwardOnly | ・Deferred RenderingのG-Bufferでは処理しきれないものに使う ・このLightModeを持つものはレンダラがDeferred Rendering設定だったとしてもFowardパスで描画される ・したがってこれを定義する場合にはUniversalForwardやUniversalGBufferは作らない ・CompledLitシェーダなどがこれを使っている |
DepthNormalsOnly | ・UniversalForwardOnlyのLightModeを使う場合にこのパスも作る ・Deferred Rendering設定の時にForwardレンダリングにしか対応していないマテリアルのDepthやNormalを書くためのもの ・UniversalForwardOnlyがあるのにこれがない場合、SSAOが生成できない |
SRPDefaultUnlit | ・アウトラインなど追加パスを描画する時に使う ・Forward RenderingでもDeferred Renderingでも使われる LightModeが記述されていないパスはこれになる |
Universal2D | ・2Dライティング用 |
ShadowCaster | ・ライトからの深度をシャドウマップに描画する |
DepthOnly | ・カメラからの深度をデプステクスチャに描画する |
DepthNormals | ・_CameraNormalsTextureに法線情報を描き込む |
Meta | ・ライトマップをベイクする際に使用する ・エディタでのみ使用 |
SceneSelectionPass | ・シーンビューで選択した時にアウトラインが表示される領域を決めるために使われる |
Picking | ・シーンビューでクリックしたら選択可能となる領域を決めるために使われる |
最後のSceneSelectionPassとPickingについては以下の記事に詳しくまとめていますので、こちらも参照してください。