【unity學習筆記】unity優化DrawCall 及動態批處理的約束

參考自《Unity3D腳本編程》-陳嘉棟

DrawCall優化方案:

(1)使用Draw Call Batching,也就是描繪調用批處理。Unity3D再多次運行時可以將一些物體進行合併,從而用一個描繪來渲染他們。

(2)通過把紋理打包成圖集儘量減少材質的使用。

(3)儘量少的使用反光、陰影之類的效果,因爲那會使物體多次渲染。

批處理分爲靜態批處理和動態批處理。

動態批處理相對靜態批處理有許多約束條件:

(1)批處理動態物體需要在每個頂點進行一定的開銷,所以動態批處理僅支持小於900頂點的網格物體。

(2)如果着色器使用頂點位置、法線和UV值三種屬性,那麼只能批處理300頂點以下的物體;如果着色器需要使用頂點位置、法線、UV0、UV1和切向量,那隻能批處理180頂點以下的物體。

(3)不要使用縮放。分別擁有縮放大小(1,1,1)和(2,2,2)的兩個物體將不會進行批處理。

(4)統一縮放的物體不會與非統一縮放的進行批處理。

(5)使用縮放尺度(1,1,1)和(1,2,1)的兩個物體將不會進行批處理,但是使用縮放尺度(1,2,1)和(1,3,1)的兩個物體將可以進行批處理。

(6)使用不同材質的實例化物體(instance)將會導致批處理失敗。

(7)擁有lightmap的物體含有額外(隱藏)得材質屬性,例如lightmap的偏移和縮放係數等,所以,擁有lightmap的物體將不會進行批處理(除非他們指向lightmap的同一部分)。

(8)多通道的shader會妨礙批處理操作。比如幾乎Unity3D中所有的着色器在前向渲染中都支持多個光源,併爲他們有效的開闢多個通道。

(9)預設體的實例會自動地使用相同的網格模型和材質。

發佈了42 篇原創文章 · 獲贊 63 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章