渲染统计窗口(Rendering Statistics Window)

时间:2023-03-08 22:55:57
渲染统计窗口(Rendering Statistics Window)

FPS(Timer per frame and FPS)

  frames per seconds表示引擎处理和渲染一个游戏帧所花费的时间,该数字主要受到场景中渲染物体数量和GPU性能的影响,FPS数值越高,游戏场景的动画显示会更加平滑和流畅。一般来说,超过30FPS的画面人眼不会感觉到卡。另外,Unity中的FPS数值仅包括此游戏Scene里更新和渲染的帧,编辑器中绘制的Scene和其它监视窗口的进程不包括在内。

CPU

  获取到当前占用CPU进行计算的时间绝对值,或时间点,如果Unity主进程处于挂断或休眠状态时,CPU time 将会保持不变。

render thread

  GPU渲染线程处理图像所花费的时间,具体数值由GPU性能来决定。

Batches

  即Batched Draw Calls,是Unity内置的Draw Call Batching技术。

  CPU每次通知GPU发出一个glDrawElements(OpenGl中的图元渲染函数)或者DrawIndexedPrimitive(DirectX中的顶点绘制方法)的过程称为一次Draw Call,一般来说,引擎每对一个物体进行一次Draw Call,就会产生一个Batch,这个Batch里包含着该物体所有的网格和顶点数据,当渲染另一个相同的物体时,引擎会直接调用Batch里的信息,将相关顶点数据直接送到GPU,从而让渲染过程更加高效,即Batching技术是将所有材质相近的物体进行合并渲染。

  对于含有多个不同Shader和Material的物体,渲染你的过程比较耗时,因为会产生多个Batches。每次对物体的材质或者贴图进行修改,都会影响Batches里数据集的构成。因此,如果场景中有大量材质不同的物体,会很明星的影响到GPU的渲染效率。

  关于Batches优化相关的方案:

    虽然Unity引擎自带Draw Call Batching技术,也可以通过手动的方式合并材质接近的物体。

    尽量不要修改Batches里物体的Scale,因为这样会生成新的Batch。

    为了提升GPU的渲染效率,应当尽可能的在一个物体上使用较少的材质,减少Batches过多的开销。

    对于场景中不会运动的物体,考虑设置Static属性,Static声明的物体会自动进行内部批处理优化。

Verts

  摄像机视野(field of view)内渲染的顶点总数。

Tris

  摄像机视野(field of view)内渲染的三角面总数。

  注:尽可能的合并物体,会很大程度的提高性能。例如,场景一中有1000个不同的物体,每个物体都有10个Tris;场景二中有10个不同的物体,每个物体有1000个Tris。在渲染处理中,场景一种会产生1000个Draw Calls,它的渲染时间明显比场景二慢。

    Unity不会把模型拆分,这个模型哪怕只有1个顶点需要渲染,unity也会把整个模型渲染出来。

Screen

  获取当前Game屏幕的分辨率大小

SetPass calls

  之前讲到Batches,比如说场景中有100个GameObject,它们拥有完全一样的Material,那么这100个物体很可能会被Unity里的Batching机制结合成一个Batch。所以用"Batches"来描述Unity的渲染性能是不太合适的,它只能反映出场景中需要批处理物体的数量。那么可否用"Draw calls"来描述呢?答案同样是不合适。每一个"Draw calls"是CPU发送给GPU个一个渲染请求,请求中包括渲染对象所有的顶点参数、三角面、索引值、图元个数等,这个请求并不会占用过多的消耗,真正消耗渲染资源的是在GPU得到请求指令后,把指令发送给对应物体的Shader,让Shader读取指令并通知相应的渲染通道(Pass)进行渲染操作。如场景上有一个GameObject,希望能显示很酷炫的效果,它的Material上带有许多特定的Shader。为了实现相应的效果,Shader里或许会包含很多的Pass,每当GPU即将去运行一个Pass之前,就会产生一个"SetPass call",因此在描述渲染性能开销上,"SetPass calls"更有说服力。

Shadow casters

  表示场景中有多少个可以投射阴影的物体,一般这些物体都作为场景中的光源

Visible skinned meshes

  渲染皮肤网格的数量

Animations

  正在播放动画的数量