SRP Batching & GPU Instance

2021-07-27  本文已影响0人  烂醉花间dlitf

SRP Batching

将属性写在 UnityPerMaterial 中,就可以对 相同 材质的物体进行 DrawCall 合并。

3 个球,一个 Call
使用 MaterialPropertyBlock 对属性进行更改之后,不再合并。
5 个球,5 个 Call
如果在合并过程中插进来一个其他材质的物体,那么会打破合并,下图粉色球是第二种材质,打破了其他三个球的合并。
中间那次 SPR Batch 是粉色球
解决方法一种是将粉色球向前移动或者向后移动,保证它的深度不会在另外三个球之间;第二种是修改任意一个材质的 Queue,让其偏移 1。

GPU Instance

GPU Instance 也可以将属性写在 UnityPerMaterial 中,并且 SRP Batching 优先级比 GPU Instance 高,所以如果没有通过 MaterialPropertyBlock 修改属性的话,会优先使用 SRP Batching。如果属性写在自定义名称中,则不会启用 SRP Batching。
GPU Instance 有两种用法。一是直接修改个别物体的属性,比如基色、Cutoff 阈值等,如项目中的 PerObjectWithUnlitShader.cs。效果如下:

5 个球,1 个 Call

二是使用 Graphics.DrawMeshInstanced 一次性绘制出许多只有些许不同的物体,如项目中的 DrawMesh.cs。效果如下:

512 个球

参考

https://catlikecoding.com/unity/tutorials/custom-srp/draw-calls/
https://docs.unity3d.com/Manual/GPUInstancing.html
Unlit.shader in URP

项目链接

https://gitee.com/zhangqrr/CustomRP/tree/master/

image
上一篇 下一篇

猜你喜欢

热点阅读