洪流學堂,讓你快人幾步。你好,我是大智。
遇到卡頓效能問題,可以從以下幾個方面依次檢查最佳化。
SetPass Call太高
Draw Call造成的效能問題大部分出在SetPass Call上面。
可以從以下幾個方面入手。
減小相機的視距(增加霧效消除斷層的感覺)
開啟材質的GPU Instancing(需要GPU支援,如果想最佳化到極致,可以程式碼呼叫DrawMeshInstanced 批次繪製或使用外掛:GPU Instancer)
開啟Static Batching(不適用於大量重複的物體,會大幅增加硬碟及記憶體佔用)
開啟Dynamic Batching(僅適用於頂點小於900的物體,同時會消耗更多CPU,比較雞肋)
以上三個生效順序:Static Batching > GPU Instancing > Dynamic Batching
遮擋剔除Oculusion Culling(場景遮擋很少的情況不適用)
合併材質和Mesh(合併貼圖到一張圖集,最好是美術同學最佳化,Unity外掛:Simplygon、MeshBaker、Poly Few,也可以使用各個建模軟體中的工具,比如Blender中的BakeTool)
按需製作LOD(自動生成LOD外掛:Poly Few、Mantis LOD Editor、Ultimate LOD System MT)
如果有地形記得開啟地形設定中的Draw Instanced,如果地形太大記得拆分開(外掛:Terrain Slicing & Dynamic Loading Kit),也可以替換內建地形shader解鎖更高效能(外掛:Relief Terrain Pack v3。3)
Batches太高
Batches資料和常說的Draw Call資料比較接近。
合併Mesh(合併Mesh的時候注意僅合併相近的物體,否則可能會起反作用,導致其他效能問題。外掛:Simplygon、MeshBaker、Poly Few)
CPU太高
CPU太高很大一部分問題是上述的渲染造成的,如果上述都最佳化完畢後,可以檢查程式碼問題。
程式碼問題(使用Profiler定位後,自行修改程式碼,計算量大的可以隔幀計算)
記憶體佔用太高
模型減面(外掛:Poly Few、Simplygon,極端情況還可以用Imposter(Simplygon、Amplify Imposter))
貼圖壓縮(可以在Unity的貼圖匯入中設定)
音訊壓縮(設定為單聲道)
檢查程式碼中佔用大量記憶體的問題
GPU太高
模型減面(每個模型頂點都要透過頂點著色器處理)(外掛:Poly Few、Simpolygon,極端情況還可以用Imposter(Simpolygon、Amplify Imposter))
減小輸出解析度(每個螢幕輸出畫素都要透過片元著色器處理)
減少Shader複雜度
本文將持續更新,最新版請在
洪流學堂
公眾號中回覆獲取。
本文僅是非常簡略小抄,後續公眾號中會更新效能最佳化的各種方法、原理、工具等教程。
你那有什麼效能最佳化小技巧?歡迎留言分享給大家。
截至8月18日中午12點留言點贊最高的第1、5、9名共3名同學,我們將送出Unity周邊盲盒。