【Unity】URPにおけるシェーダのLightModeの用途を整理する

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については以下の記事に詳しくまとめていますので、こちらも参照してください。

light11.hatenadiary.com

関連

light11.hatenadiary.com

参考

docs.unity3d.com