1. 程式人生 > >【U3D效能優化教程——CPU篇】之二:靜態批處理&靜態批處理

【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數量的方法。