Unity GPU瓶颈一定能用上的降低Draw Calls方法----2D和3D

前言:Draw Calls是影响GPU性能的主要因素之一,过多的Draw Calls会严重影响渲染效率。

文章目录

2D UGUI

首先,按照一定策略打图集肯定是必须的

在这里插入图片描述

新建空场景运行,是两个dc,如图所示,两个图集,一个字体,需要三个dc绘制,说明这样排列不会打断批处理
一旦某个UI打断批处理,就会从该UI开始单独渲染,然后下面的从新开始合批
打断批处理的情况有

  1. 修改某个UI的X或Y的旋转

在这里插入图片描述

  1. 增加Mask或者Rect Mask2D

在这里插入图片描述

优先使用RectMask2D:
RectMask2D比Mask更高效,因为它只裁剪矩形区域。
如果不需要复杂的遮罩效果,尽量使用RectMask2D。
减少Mask的使用:
尽量避免嵌套使用Mask组件。
如果必须使用Mask,确保其影响范围尽可能小。

  1. 增加Canvas

在这里插入图片描述
4.父子关系之间遮挡
在这里插入图片描述
在这里插入图片描述

5.某个UI的Z轴不同
在这里插入图片描述
等等…

利用好Frame Debugger,你就会明白为什么没有合批
在这里插入图片描述

3D

渲染顺序调整
比如这种情况
在这里插入图片描述

三个规格一样深度不同的物体,如果他们的渲染顺序都是3000,那么,渲染顺序就是
物体1,特效1,物体2,特效2,物体3,特效3
只需要调整一下特效的Render Queue为3001,渲染顺序就是
三个物体一起,三个特效一起

如果材质球相同,但是在实例化的时候修改了属性(比如material.SetFloat),这时候,即使相同的材质也会被Instance出来,被认为是不同的材质,有些时候可以用这样的方法代替

MaterialPropertyBlock mpb = new MaterialPropertyBlock();
Renderer renderer = cube.GetComponent<Renderer>();
mpb.SetFloat(...)
renderer.SetPropertyBlock(mpb);