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能夠作到如下幾點:

一、當調整攝像機的獲取範圍;

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

相關文章
相關標籤/搜索