Unity渲染性能指标

转载请注明出处 何文西

 

官方解释:

Batches : “Batching” is where the engine attempts to combine the rendering of multiple objects into a chunk of memory in order to reduce CPU overhead due to resources switching.

Saved by batching : Number of batches that was combined. To ensure good batching, you should share materials between different objects as often as possible. Changing rendering states will break up batches into groups with the same states.

SetPass : The number of rendering passes. Each pass requires Unity runtime to bind a new shader which may introduce CPU overhead.

 

DrawCalls和Batches的关系

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

什么是SetPass

在GPU得到请求指令后,把指令发送给对应物体的Shader,让Shader读取指令并通知相应的渲染通道(Pass)进行渲染操作,这个过程称之为SetPass Call。CPU方面的性能开销主要是由于在DrawCall之间进行的状态切换(例如切换不同的材质)。

渲染指标主要看Batches和SetPass,实际上Batches的数值就是DrawCall的数值。最优情况下,SetPass和场景内可渲染物体的材质球数量相同(假设每个材质的shader只有一个pass)。减少材质球的方式,主要有合并相似材质类型物体的纹理,例如:场景内的小物件可以用一个材质球,让美术把这些小物件全部画在一张纹理上。减少Batches,可以通过静态或动态批处理来实现,硬件允许的话,还可以通过GPU Instancing技术。

举个简单的例子

场景内有5个木箱,5个金属球,5个塑料板。三种类型的物体材质球不同,这些物体都在相机的可视范围内且都可见。假设没有使用批处理技术,没有灯光等其它渲染影响。在传统的渲染管线上,那么要渲染这些物体,最优的情况下会有15次DrawCall和3次SetPass,也就是渲染完木箱再渲染金属球最后在渲染塑料板。最坏的情况下会有15次DrawCall和15次SetPass,也就是三种类型的物体交替渲染。Unity引擎内部在做渲染排序的时候已经帮我做了很多优化,包括动态批处理等技术都是帮助我们减少状态切换和DrawCall。

 

引用:http://www.cnblogs.com/zhaoqingqing/p/6288154.html

posted @ 2018-05-15 11:43  何文西  阅读(...)  评论(...编辑  收藏