unity優化之項目優化策略

1.Draw Call

原理:一個模型的數據經過CPU傳輸到GPU,並命令GPU進行繪製,稱爲一個DrawCall

降低Draw Call的原理:基於DrawCall 是CPU調用底層圖形接口,主要工作量就是儘量減少CPU在調用圖形接口上的開銷而努力。

降低Draw Call的思路:每個遊戲對象儘量減少渲染的次數,多個遊戲對象儘量一起渲染

降低Draw Call的主要途徑:

(1):Draw Call 批處理技術(DrawCall Batching)

核心:在可見性測試之後,檢查所有要繪製的對象材質,把相同材質分爲一組,然後把它們組合成一個對象,這樣一次Draw Call就可以處理對個對象

動態批處理:完全自動進行

靜態批處理:需要指出哪些是靜態的,再屬性窗口中將“Static”複選框勾選

(2):使用圖集(Texture Packing或者Texture Atlasing)減少材質的使用

儘量減少場景中使用的材質數量,儘量共享材質,對於僅紋理不同的材質,可以把紋理組合到一張更大的紋理中(稱爲圖集Texture Packing 或者Texture Atlasing),然後把不會移動的物體標記爲“Static”

(3):儘量減少使用反光,陰影,因爲那會使物體多次渲染

(4):視錐體合理剪輯(FrustumCulling )

  視錐體合理剪輯是Unity內建的功能,一般來說,對於大型場景中的大量遊戲對象進行合理的分層,對於大型建築物使用較大裁剪距離,而對於小遊戲對象可以使用較小裁剪距離,場景中的粒子系統等可以使用更小的裁剪距離

(5)遮擋剔除方法

(6)網格渲染器

  只有處於攝像機視錐體內,且添加了網格渲染器(Mesh Renderer)組件的對象纔會產生渲染的開銷,其他不產生,這樣我們可以對暫時無需顯示的遊戲對象通過腳本的方式進行控制,不進行渲染,需要的時候再渲染即可

(7)減少遊戲對象的縮放

  統一縮放的對象不會與非統一縮放的對象進行批處理

(8)減少多通道Shader的使用

  多通道的Shader會妨礙批處理操作:幾乎Unity中所有的着色器在前向渲染中都支持多個光源,因爲它們開闢多個通道,所以對批處理有影響

(9)腳本訪問材質的方法

  如果需要腳本訪問複用材質屬性,如使用Renderer.material改變貼圖,則將會造成一份材質。因此一般使用Renderer.ShaderMaterial來保證材質的共享狀態

(10)儘量多使用預設

  使用預設生成的對象會自動的使用相同的網格模型和材質,因此會自動被批處理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章