# Unity Ui 合批学习
# Stats 统计面板
stats 面板可以展示摄像机范围内,所有游戏对象元素的顶点、面片、批处理次数、CPU 耗时等。
参数 | 说明 | 备注 |
---|---|---|
tris | 三角形面数 | |
verts | 顶点数 | |
Batches | 批处理个数 | |
Saved By batching | 批处理被合并后的批处理个数 | 实际执行的批处理个数 Draw Call |
CPU | cpu 执行耗时 | |
FPS | 时间段执行次数 | 流畅度 |
# 天空盒子
新建一个场景发现,有 1.7k 的三角和 5k 的顶点。
++ 这些顶点和三角面其实来源于天空盒,天空盒也是一个模型。 ++
修改为适用纯色背景:
可以看到此时,降低到了 2 个三角面和 4 个顶点。如下图所示的分割情况.
# 批处理
我们最常看到的优化技术大概就是批处理了。批处理的实现原理就是为了减少每一帧需要的 draw call 数目。为了把一个对象渲染到屏幕上,CPU 需要检查哪些光源影响了该物体,绑定 Shader 被设置它的参数,再把渲染纹理发送给 GPU。当场景中包含了大量对象时,这些操作就会非常耗时。一个极端的例子是,
如果我们需要渲染一千个三角形,把它们按一千个单独的网格进行渲染所花费的时间要远远大于渲染一个包含了一千个三角形的网格。在这两种情况下,GPU的性能消耗其实并没有多大的区别,但CPU的draw call数目就会成为性能瓶颈。
因此,批处理的思想很简单,就是在每次面对 draw call 时尽可能多地处理多个物体。
使用同一个材质的物体可以一起处理。对于使用同一个材质的物体,它们之间的不同仅仅在于顶点数据的差别。我们可以把这些顶点数据合并在一起,再一起发送给 GPU,就可以完成一次批处理。
# Batches 和 Saved by batching
- Batches 表示批处理次数
- Saved byBatching 表示节省的批处理次数
# 动态批处理和静态批处理
将物体标记为 Static
可以大幅优化批处理。—— 静态批处理
# 参考资料
Unity3D UGUI 系列之合批_WangShade 的博客 - CSDN 博客_ugui 合批
Unity3D 客户端项目优化总结之 Stats 统计面板_WangShade 的博客 - CSDN 博客
Unity3D 客户端项目优化总结之静态批处理 Static Batching_WangShade 的博客 - CSDN 博客