Draw call就是CPU調(diào)用圖像編程接口(OpenGL中的glDrawElements命令),命令GPU進(jìn)行渲染操作的過程。
命令緩沖區(qū)
如果CPU要等到GPU完成上一個(gè)渲染任務(wù)才能再發(fā)送渲染命令,顯然會(huì)造成效率低下,因此為了讓CPU和GPU可以同時(shí)工作命令緩沖區(qū)就此產(chǎn)生了。
命令緩沖區(qū)包含里一個(gè)命令隊(duì)列,CPU向其中添加命令,而GPU從中讀取命令,添加和讀取過程是相互獨(dú)立的,這使得CPU和GPU可以相互獨(dú)立工作。
命令緩沖區(qū)除了Draw call以外還有其他命令(改變使用的著色器,使用不同的紋理等)。

Draw call對(duì)幀率的影響
在每次調(diào)用draw call之前,CPU需要向GPU發(fā)送很多內(nèi)容,其中包括數(shù)據(jù)、狀態(tài)、命令等。在這一階段,CPU需要完成很多工作,列如檢查渲染狀態(tài)等。而一旦CPU完成了這些準(zhǔn)備工作,CPU就可以開始本次的渲染。GPU的渲染能力很強(qiáng),渲染200個(gè)和2000個(gè)三角網(wǎng)格通常沒有什么區(qū)別,因此渲染速度往往快于CPU提交命令的速度。如果Draw Call太多,CPU往往就會(huì)把大量的時(shí)間花費(fèi)在提交Draw Call上,造成CPU的過載。

如何減少Draw Call
靜態(tài)批處理——(Static復(fù)選框打勾)
如果使用大量很小的網(wǎng)格時(shí),可以考慮是否合并它們。
避免使用過多的材質(zhì)。盡量在不同的網(wǎng)格中使用共同的材質(zhì)。

參考書籍《Unity Shader入門精要》