drawcall是CPU對底層圖形繪制接口的調用命令GPU執行渲染操作,渲染流程采用流水線實現,CPU和GPU並行工作,它們之間通過命令緩沖區連接,CPU向其中發送渲染命令,GPU接收並執行對應的渲染命令。
這里drawcall影響繪制的原因主要是因為每次繪制時,CPU都需要調用drawcall而每個drawcall都需要很多准備工作,檢測渲染狀態、提交渲染數據、提交渲染狀態。而GPU本身具有很強大的計算能力,可以很快就處理完渲染任務。
當DrawCall過多,CPU就會很多額外開銷用於准備工作,CPU本身負載,而這時GPU可能閑置了。
解決DrawCall:過多的DrawCall會造成CPU的性能瓶頸:大量時間消耗在DrawCall准備工作上。很顯然的一個優化方向就是:盡量把小的DrawCall合並到一個大的DrawCall中,這就是批處理的思想。下面是一些具體實施方案:
合並的網格會在一次渲染任務中進行繪制,他們的渲染數據,渲染狀態和shader都是一樣的,因此合並的條件至少是:同材質、同貼圖、同shader。最好網格頂點格式也一致。
盡量避免使用大量小的網格,當確實需要時,進行合並。
避免使用過多的材質,盡量共享材質。
合並本身有消耗,因此盡量在編輯器下進行合並
確實需要在運行時合並的,將靜態的物體和動態的物體分開合並:靜態的合並一次就可以,動態的只要有物體發生變換就要重新合並。
---------------------
作者:String_Kun
來源:CSDN
原文:https://blog.csdn.net/srk19960903/article/details/73457321
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
