Unity URP渲染管线中的SRP Batcher合批
Unity的URP管线中不同于之前的Building-In管线,提供了额外的一种性能优化方式:SRP Batcher合批。
SRP Batcher的优势是,不需像静态、动态合批那种,必须使用相同的材质球,但相对于的Shader中也做了些改变,增加了CBuffer。我们可以选择自己的Shader文件查看此Shader是否已支持SRP Batcher。
要使用SRPBatcher时,必须将定义的变量放在CBUFFER_START(UnityPerMaterial)/CBUFFER_END语义块中。
由于一般自己写的Shader都会有自己特殊的变量需要定义,所以一般建议自定义hlsl文件用来专门存放CBUFFER_START(UnityPerMaterial)/CBUFFER_END中的内容。
查看官方说明法线,要使用SRPBatcher,若有多pass,则必须每个Pass的CBUFFER_START中的内容一致。将自定义的hlsl文件include到其他的pass中。
此报错是由于自己定义的变量和unity自身定义的hlsl有冲突。检查所有pass中的hlsl,发现主要是LitInput.hlsl和ShadowCasterPass.hlsl中有重复定义。注释掉相关pass的重复定义。
最后注意根据提示说明,要使用SPR必须将所有定义在Cbuffer中的变量都写在property中,若我们不需要暴露此变量可以加上[HideInInspector]。需要用脚本控制的变量都不可加入到property和Cbuffer中,可能会出现奇奇怪怪的现象。