Unity Shader URP 学习 ShadowCaster
参考资料
问题阐述
在URP管线下,需要投影,会采用直接调用官方的ShadowCaster pass(UsePass “Universal Render Pipeline/Lit/ShadowCaster”)。这样会出现问题,会让该shader无法进行SRP Batcher。如下图:
SRP Batcher
什么是SRP Batcher?
下面是官方的相关文档:
SRP 全称为Scriptable Render Pipeline,其中一部分就是SRP Batcher,主要用途在渲染过程中加速CPU。加速的原因如下:
- Each material content is now persistent in GPU memory
- A dedicated code is managing a large “per object” GPU CBUFFER
如何使用SRP Batcher?
- 可以使用C#进行开启
1
GraphicsSettings.useScriptableRenderPipelineBatching = true;
- 材质兼容的要求
- The object must be in a mesh. It cannot be a particle or a skinned mesh.(对象不能是粒子或者蒙皮mesh)
- You must use a Shader that is compatible with the SRP Batcher. All Lit and Unlit Shaders in HDRP and LWRP fit this requirement.(必须使用兼容的SHADER)
- Shader的要求
- All built-in engine properties must be declared in a single CBUFFER named “UnityPerDraw”. For example, unity_ObjectToWorld, or unity_SHAr.
- All Material properties must be declared in a single CBUFFER named “UnityPerMaterial”.
ShadowCaster的问题
通过SRP Batcher的学习,可以猜测出官方默认ShadowCaster 并没有符合SRP Batcher的要求,为了解决这个问题,我们可以自己重写 ShadowCaster 这个pass。
1 | pass |
关于本文
本文作者 Master Gong Sheng, 许可由 CC BY-NC 4.0.