概述
在Game视图的右上角可以点开一个渲染统计窗口(Stats按钮),可以查看当前的实时渲染信息。这些统计信息可以用于性能优化的分析,当然不同的目标平台统计信息会有所不同。
Unity版本
Unity2020.3.24
具体的统计项
统计窗口上具体统计信息有下面这些
统计信息 | 描述 |
---|---|
FPS | 帧率(帧/s) |
CPU | Main 处理一帧花费的总时间。这些时间包括Unity处理真正程序运行的一帧所花费的时间、Scene视图更新的时间、其它编辑器窗口的更新花费的时间和其它的一些编辑器任务的一帧花费的时间。所以这个时间会高于程序运行真正所需花费的时间。 Render 渲染一帧花费的总时间。这个时间只是渲染Game视图的花费,没有包括Scene视图或者其它编辑器窗口的渲染所花费的时间,所以用起来会比较准确。 |
Batches 批次总数 |
一帧处理的批次总数。包括了静态批次、动态批次和实例的批次 |
Saved by batching 通过合批节省的批次数量 |
Unity合并的批次数量 为了比较好的合批,不同的物体应该尽可能的使用相同的材质,更改渲染状态会导致会打断合批分成多个相同状态的组内合批 |
Tris 三角面总数 |
一帧内处理的三角面总数 控制同屏面数对于低端设备的性能优化非常重要 |
Verts 顶点总数 |
一帧内处理的顶点总数 和三角面数量类似,控制同屏顶点数对于低端设备的性能优化非常重要 注意顶点和面数并不一定等于看到的模型的顶点和面数,在一些情况下使用了一些特殊的处理,可能会导致重复处理顶点和面数,这个时候数量会增加。 |
Screen | 屏幕分辨率及其占用的内存 |
SetPass calls | 在一帧内切换渲染对象的Pass次数 一个Shader可能包含多个Pass,每个Pass在场景中渲染的对象是不同的,每个Pass需要Unity绑定新的Shader,这会导致CPU的消耗 |
Shadow casters | 在一帧内投射阴影的对象数量 |
Visible skinned meshes | 在一帧内渲染的SkinnedMeshRenderers(蒙皮网格渲染器)数量 |
Animation components playing | 在一帧内播放的Animation组件数量 |
Animator components playing | 在一帧内播放的Animator组件数量 |
Batches、Saved by batching和SetPass calls
最容易搞混的应该就是这三项了
Saved by batching是一帧内通过合批节省的批次数量
Batches是最终一帧内处理的总批次,是已经减去了合批节省的批次数量
SetPass call是在一帧内切换Pass的数量,主要是在不同材质、相同材质不同Pass间切换的次数
我们可以做个测试
搭建几个Cube,Sphere,Cube使用一个材质,Sphere使用一个材质,并且开启动态合批
通过查看FrameDebuger我们可以看到,最终的批次是3
3个Cube动态合批了,球由于顶点数量超过300所以没有动态合批
因此我们在统计面板上最终看到的是
Saved by batching:2,3个cube通过动态合批只产生了一个批次,因此节约了2个批次
Batches:3个Cube一个批次,两个球各一个批次
SetPass calls:只有两个材质球,并且shader中也只有一个Pass,因此只是在绘制球和cube之间进行了Pass的切换
我们可以先取消动态合批,此时SetPass calls依然是2
我们再次开启动态合批,并且多复制几个球,由于球无法合批,总批次增加到了6,但我们可以看到由于没有新增材质或者Pass的增加,SetPass calls仍然是2
加深SetPass calls的理解
SetPass calls最关键的就是切换,切换了Pass(不同材质间的Pass切换、相同材质的不同Pass切换),渲染状态进行了切换。
一个Batch批次包括了提交VBO(Vertex Buffer Object)顶点缓冲对象,IBO(Index Buffer Object,有些地方也叫EBO,Element Buffer Object)索引缓冲对象,提交Shader,设置好硬件渲染状态,设置好光源属性等
如果Batch批次之间使用的是不同的材质或者是不同的Pass,就会触发一次SetPass call来重新设定渲染状态。
本文
https://blog.csdn.net/ithot/article/details/122386147?spm=1001.2014.3001.5501
参考
本文主要由Unity官方文档整理而来
https://docs.unity3d.com/Manual/RenderingStatistics.html
还有大佬的文章: