第十五章 Unity中的渲染优化技术(2)

Unity中的渲染分析工具

Unity内置了一些工具,来帮助我们方便的查看和渲染相关的各个统计数据。这些数据可以帮助我们分析游戏渲染性能,从而更有针对性进行优化。在Unity5中,这些工具包含了渲染统计窗口(Rendering Statistics Window)、性能分析器(Profiler),以及帧调试器(Frame Debugger)。需要注意的是,在不同的目标平台上,这些工具中显示的数据也会发生变化。

1.认识Unity 5的渲染统计窗口

Unity 5提供了一个全新的窗口,即渲染统计窗口(Rendering Statistics Window)来显示当前游戏的各个渲染统计变量,我们可以通过Game视图右上方的菜单中单击Stats按钮来打开它,如下图所示:
在这里插入图片描述
从图中可以看出,渲染窗口主要包含了3个方面的信息:音频(Audio)、图像(Graphics)和网络(Network)。我们在这里只关注第二个方面,即图像相关的渲染统计结果。
渲染统计窗口显示了很多重要的渲染数据,例如FPS、批处理数目、顶点和三角网格的数目等。下表列出了渲染统计窗口中显示的各个信息:

信息名称 描述
每帧的时间和FPS 在Graphic的右侧显示,给出了处理和渲染一帧所需的时间,以及FPS数目
Batches 一帧中需要进行的批处理数目
Saved by batching 合并的批处理数目,这个数字表明了批处理为我们节省了多少draw call
Tris和Verts 需要绘制的三角面片和顶点数目
Screen 屏幕的大小,以及它占用的内存的大小
SetPass 渲染使用的Pass的数目,每个Pass都需要Unity的runtime来绑定一个新的Shader,这可能造成CPU的瓶颈
Visible Skinned Meshes 渲染的蒙皮网格的数目
Animations 播放的动画数目
Unity 5的渲染统计窗口相较于之前版本中的有了一些变化,最明显的就是去掉了draw call数目的显示,而添加了批处理数目的显示。Batches和Saved by batching更容易让开发者理解批处理的优化结果。当然,如果我们想要查看draw call的数目等其它更加详细的数据,可以通过Unity编辑器的性能分析器来查看。 ## 2. 性能分析器的渲染区域 我们可以通过单击Window->Profiler来打开Unity的性能分析器(Profiler)。性能分析器中的渲染区域(Rendering Area)提供了更多关于渲染的统计信息,下图给出了对上图场景的渲染分析结果: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190512174932530.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NTYyMzU1,size_16,color_FFFFFF,t_70) 性能分析器显示了绝大部分在渲染统计窗口中提供的信息,例如,绿线显示了批处理数目、蓝线显示了Pass数目等,同时还给出了许多其它非常有用的信息,例如draw call数目、动态批处理/静态批处理的数目、渲染纹理的数目和内存占用等。 结合渲染统计窗口和性能分析器,我们可以查看与渲染相关的绝大多数重要的数据。一个值得注意的现象是,性能分析器给出的draw call数目和批处理数目、Pass数目并不相等,并且看起来好像要大于我们估算的数目,这是因为Unity在背后需要进行很多工作,例如初始化各个缓存、为阴影更新深度纹理和阴影映射纹理等,因此需要花费比预期更多的draw call。一个好消息是,Unity5引入了一个新的工具来帮助我们查看每一个draw call的工作,这个工具就是帧调试器。 ## 3.再谈帧调试器 我们在前面已经多次看到帧调试器(Frame Debugger)的作用。我们可以通过Window->Frame Debugger来打开它。在这个窗口中,我们可以清楚的看到每一个draw call的工作和结果,如下图所示。

在这里插入图片描述
帧调试器的调试面板上显示了渲染这一帧所需要的所有渲染事件,在本例中,事件数目为14,而其中包含了10个draw call事件(其它渲染事件多为清空缓冲等)。通过单击面板上的每个事件,我们可以在Game视图查看该事件的绘制结果,同时渲染统计面板上的数据也会显示成截止到当前事件为止的各个渲染统计数据。以本例为例,要渲染一帧共需要花费10个draw call,其中4个draw call用于更新深度纹理(对应UpdateDepthTexture),4个draw call用于渲染平行光的阴影映射纹理,1个draw call用于绘制动态批处理后的3个立方体模型,1个draw call用于绘制球体。
在Unity的渲染统计窗口、分析器和帧调试器这3个利器的帮助下,我们可以获得很多有用的优化信息。但是,很多诸如渲染时间这样的数据是基于当前的开发平台得到的,而非真机上的结果。

猜你喜欢

转载自blog.csdn.net/qq_34562355/article/details/90143196