1. 利用UsePass可以帮助投影pass合批。相同网格、不同材质、不同shader,只要这些shader使用UsePass引用了同一个pass,并且材质的属性和宏都一样,那么这些物体的投影pass就可以合批(包括GPU Instancing和SRP Batcher)。注:这个投影pass的特殊处理可能是context.DrawShadows带来的,其他的pass享受不到这个好处。
2. 想要shader兼容SRP Batcher,就需要该shader的所有pass的UnityPerMaterial cbuffer的layout(排列和大小)都一样。注1:实际上unity会对齐cbuffer的大小,也就是说一个pass有1个half,另一个pass有4个half,那这个shader还是兼容SRP Batcher的;注2:还不确定排列顺序影不影响,待测试。
3.想要同时实现1和2,就需要所有想利用UsePass的shader的所有pass的UnityPerMaterial cbuffer的排列大小都一样,并且UnityPerMaterial cbuffer里的所有变量都要在所有shader的属性表里声明。
4.SHADER_API_MOBILE这个shader宏在编辑器下不同版本表现不一致。目前可以确定的是Windows编辑器安卓平台2020.3.17及之前都是关闭的。在3.17到3.22之间的某个版本发生了改变,Windows编辑器安卓平台DX11下是关闭的,Vulkan和OpenGLES3是开启的。而Application.IsMobilePlatform这个接口在编辑器安卓平台下一直是false。这就导致Windows编辑器安卓平台下的显示效果会有问题,比如URP的多光源渲染就与这个问题有关。从2020.3.17之后的某个版本开始,Windows编辑器安卓平台Vulkan或OpenGLES3下,URP的多光源一直是坏的。
5.2021为了解决4这个问题,脚本中改用接口GraphicsSettings.HasShaderDefine(BuiltinShaderDefine.SHADER_API_MOBILE)来判断是否是移动平台。但是2020在这里又出毛病了,还是3.17到3.22之间的某个版本开始,这个接口在DX11下也返回true!
标签:cbuffer,记录,Windows,安卓,Unity,更新,shader,编辑器,pass From: https://www.cnblogs.com/vkensou/p/16644680.html