【U3D效能優化教程——CPU篇】之二:靜態批處理&靜態批處理
這篇文章由唐三胖ヾ(•ω•`)o網路整理總結,針對DrawCall概念的系列優化教程。
通過這篇文章,你可以知道
1)動態/靜態批處理的概念
2)什麼時候會動態批處理
3)如何設定靜態批處理
動態批處理
顧名思義:U3D自發的渲染批次處理
U3D會檢測模型紋理,相同的放在一起渲染,此時DC僅為1,不需要我們做任何操作。
但是注意一點
動態批處理僅支援小於900頂點的網格物體。
再加上著色器使用頂點位置,法線和UV值三種屬性,那麼你只能批處理300頂點以下的物體
具體應用:一個對稱的圖片咱們只需要美術給一半就夠了
靜態批處理
上面動態批處理可以很好地修改遊戲,那麼
當大於900的呢???動態處理不了的,咱們靜態處理
原理:設定為static的物體相同材質的物體的網格會進行合併,你可以看做是多個物體變成1個大物體
未啟動前設定所有靜態物體為static,執行以後你會發現減少為
一定要執行,不然看不到效果
建議場景下的石子啊什麼的咱們弄一個石頭節點,所有的石頭都放在節點下
如果你需要通過指令碼來控制單個材質屬性,需要注意改變Renderer.material將會造成一份材質的拷貝。因此,你應該使用Renderer.sharedMaterial來保證材質的共享狀態。
有一個合併模型材質不錯的外掛叫Mesh Baker,大家可以考慮試下。
另外,用燈光將會取消(break)引擎的DRAW CALL BATCH,至於為什麼,檢視以下:
Forward Rendering Path Details:
http://docs.unity3d.com/Documentation/Components/RenderTech-ForwardRendering.html
好在手遊由於效能原因不使用光照,所以一般不擔心這個問題。
下一章將介紹剔除模型數量直接減少Draw Call數量的方法。