什麼是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能夠作到如下幾點:
一、當調整攝像機的獲取範圍;
二、把一些遮檔住的物品屏蔽,不要顯示;