Unity对象与Draw Calls的关系

什么是Draw Calls?spa

首先咱们先来了解一下,什么叫作“Draw Calls”:一个Draw Call,等于呼叫一次 DrawIndexedPrimitive (DX) or glDrawElements (OGL),等于一个 Batch。3d

摸过 DirectX 或 OpenGL 的人来讲,对 DrawIndexedPrimitive 与 glDrawElements 这 API 必定不陌生。当咱们准备好资料 (一般为三角面的顶点资讯) 要 GPU 划出来时,必定得呼叫这个函式。换句话说,若是在画面上有一张 “木" 椅子、一张 “铁" 桌子,那理论上就会有两个 Draw Call。code

有看到特别点出 “木" 与 “铁" 吗?这表明两物件是使用不一样材质球或者不一样的 Shader。在 DirectX 或 OpenGL 里,对不一样物件指定不一样贴图或不一样 Shader 的描述,就会须要呼叫两次Draw Call。Procedure code以下:对象

SetShader(“Diffuse");
SetTexture(“铁");
DrawPrimitive(DeskVertexBuffer);

SetShader(“VertexLight");
SetTexture(“木");
DrawPrimitive(ChairVertexBuffer);

每次对 Shader 的更动或者贴图的更动,基本上就是对 Rendering Pipeline 的设定作修改,因此须要不一样的 Draw Call 来完成物件的绘制。如今了解为何 Unity 官方文件里,总是要你尽可能使用一样材质球,以减小 Draw Call 数量了吧!blog

摄像机看到的对象与Draw Calls数值的关系:ip

现象一:因此对象均可见,都在摄像机范围内。it

Draw Calls:27class

 

现象二:后方的圆球被挡住。im

Draw Calls仍是为27,其余数值也没变过。总结

 

现象三:把一个对象[圆柱]移动到摄像机外面,完看不见。

此次的Draw Calls少了2,也就是当一个物体不在摄像机范围内,就不会产生Draw Calls,也就是GPU不会去画这个物品。

现象三:后面被挡住的圆球屏蔽,不显示;

这时候Draw Calls为20

 

数据比较:

 

 

总结:

咱们要减小Draw Calls能够作到如下几点:

一、当调整摄像机的获取范围;

二、把一些遮档住的物品屏蔽,不要显示;

相关文章
相关标签/搜索