URP和内建管线的一些编程上的差异

请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com

SubShader代码中的Tags

新增加了RenderPipeline关键字

SubShader的Tags段中需添加 "RenderPipeline" = "UniversalPipeline"语句段

光照模式(LightMode)关键字的对应替换

Built-in URP 作用
ForwardBase UniversalForward
ForwardAdd 开启关键字_ADDITIONAL_LIGHTS解决
ShadowCaster ShadowCaster
MotionVectors 尚未支持
Always 不再支持
PrepassBase 不再支持
PrepassFinal 不再支持
Vertex 不再支持
VertexLMRGBM 不再支持
VertexLM 不再支持
URP新增 DepthOnly
URP新增 Meta 用于烘焙光照贴图
URP新增 Universal2D 用于2D的前向渲染
URP新增 UniversalGBuffer Deferred Rendering(延迟渲染)中使用,目前URP不支持延迟渲染,暂时用以兼容HDRP
URP新增 UniversalForwardOnly 用于在Deferred Rendering(延迟渲染)中,表示这个Pass使用Forward Rendering(前向渲染)

变体相关的指令

内建管线中,提供了multi_compile_fwdbase来编译所有ForwardBasePass所需要的变体,multi_compile_fwdadd来编译ForwardAddPass所需要的所有变体,类似如下代码:

1#pragma multi_compile_fwdbase

而在URP中,需要自己判断需要编辑哪些变体,用户又更大的灵活性,类似如下(参考Lit.Shader):

1#pragma multi_compile _ _MAIN_LIGHT_SHADOWS
2#pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE
3#pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
4#pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS
5#pragma multi_compile _ _SHADOWS_SOFT
6#pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE

参考网页

从 Builtin 管线升级到 URP