美文网首页
SRP Batching & GPU Instance

SRP Batching & GPU Instance

作者: 烂醉花间dlitf | 来源:发表于2021-07-27 21:06 被阅读0次

    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

    相关文章

      网友评论

          本文标题:SRP Batching & GPU Instance

          本文链接:https://www.haomeiwen.com/subject/sbaomltx.html