什么是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能够作到如下几点:
一、当调整摄像机的获取范围;
二、把一些遮档住的物品屏蔽,不要显示;