unite 2017 乾貨整理 優化篇
2023年05月16日
將unite 2017的一些演講做了整理。
本篇有記憶體,cpu、gc、ui、渲染效能指標、tips幾個小節。
內容持續整理中。
記憶體:1.model import setting:read/write enable
2.fbx import setting : animation type generic ->none
3.texture import setting:generate mipmap
4.audio import setting: ios -> ***, android ->vorbis (force to mono)
5.animation clip 60 fps ->30 fps
6.audio clip sampling rate : 40k ->20k
7.小的音訊檔案採用decompress on load
8.model import setting : normals & tangents -> none
9.去掉不必要的alpha通道
10.**二進位製化
11.string使用intern處理
12.刪除相同關鍵幀,自動以關鍵幀壓縮
13.避免一些臨時資源重複建立,例如www.texture
14.拆分alpha,對於沒有漸變過度的alpha圖進行尺寸壓縮
15.控制object池的使用,lru演算法
16.android機必須使用etc,ios(pvrtc)
17.聲音削減取樣,盡量使用單聲道或ogg格式
18.etc1不支援帶alpha通道壓縮紋理,拆分成2張etc
19.模型壓縮
cpu:
1. 使用api預先編譯shader:shader.warmupallshader(shader variant collection)
2. 減少更新
·unity animator optimize game object
·及時停止不必要的update
·animator
·particlesystem
·減少billboard和animation的update操作
3.載入
·使用載入佇列
·人物分幀非同步載入
·平衡預載入和即時載入的數量和大小
4.耗時操作分散離散到各幀
5.主動隱藏不在鏡頭內的動畫物件
gc1.盡可能地減少new
2.優化不合適的new
3.使用object pool
4.自定義的陣列分配池,重寫容器類
5.減小記憶體碎片
6.減少c#語言特性上的記憶體分配
·foreach
·重用函式delegate
·string combine/split
·減少反射的使用
·封包拆包操作
7.每幀gc建議在100k以內
ui1.優化panel,動靜分離,降低draw call
2.針對飄字做特別優化
·控制頻率
·控制數量
3.適當降低某些ui的更新頻率
4.ui可以多執行緒合批,效能跟手機核心數有關
5.uicanvas劃分一般準則
·乙個canvas包含所有靜態和不會改變的ui元件
·另乙個canvas存放所有動態ui元件,如果動態ui數量較大,可以繼續細分
6.射線(raycast)優化
·必要的ui元件才開啟"raycast target"
·開啟"raycast targets"的ui元件越少,層級越淺,效能越好
·對於複雜的元件,盡量在根節點開啟「」raycast targets"
·overridesorting屬性會打斷射線,可以降低層級遍歷的成本
7.字型優化
·預留足夠的空間,避免字型出框(影響體驗)
·避免字型打斷批處理
·一般不建議使用best fit
渲染:1.減少shader map大小(自定義實現)
2.減少後處理等需要的rt數量和大小
3.按需重寫預設的shader
4.優化複雜的shader
·複雜特效的shader需要特別優化(去除cutout,合併blend,優化指令數)
·使用數學手段
·使用shader lod 顯示不同的效果,按機型使用vertex light和pixel light
5.避免使用alphatest
6.適當增加面數,儘量減少後處理
7.削減ps指令數,轉移到vs
8.注意不透明物體渲染順序
9.pc平台建議選擇延遲渲染模式
10.移動平台如果不追求極限畫質,建議選擇前向渲染模式
11.如果移動平台追求畫質,建議選擇延遲渲染模式
·要注意移動裝置解析度影響
·給低配機器再寫一條渲染管線
12.ios讀取裝置機型,安卓讀取顯示卡型號決定渲染質量等級(可建立配置表)
·未知型號建立渲染等級判斷方案(cpu主頻,視訊記憶體,fps)
·可根據此等級決定shader和特效的渲染效果
13.用乙個圖集處理所有粒子
14.控制半透明物件數量
15.多通道shader不會合批
16.記得剔除不必要的背面繪製
17.zwrite會占用頻寬
18.混合(blend)可能會導致overdraw問題
19.盡量自己寫shader
20.控制頻寬
·貼圖過濾選項
·mipmap
·貼圖大小
·自定義的buffer
21.合併全屏濾鏡
22.盡量使用unity巨集
23.預載入shader
24.透明
25.自己寫剔除**
26.自己實現陰影
27.不再建議使用grab pass
效能指標
1.android 2g 低端機型 20-25 fps 記憶體不超過350mb
2.ios 1g 低端機型執行20-25fps 記憶體不超過300mb
3.啟動過場景速度盡量控制在5秒以內
tips:
1.輸出2800*2000以上解析度遊戲截圖
void capturescreenshot(string filename,int supersize = 0)
2.並不是上pbr就會比之前效果好
3.要出好效果需要美術和程式坐在一起細心除錯
4.pbr需要美術調整美術製作流程
5.pbr並不會大幅度增加硬體開銷
6.配置受光面(光源方向自己傳入)
7.自己算反射源(環境光自己計算)
8.調整shader lod的api:
shader.globalmaximumlod
shader.maximumlod
9.使用靜態分析器優化**
·使用方法(vs2015以後版本)
1.tools->nuget package manager ->manage nuget packages for solution
2.browse -> unityengineanalyzer
Unite 2017 乾貨整理 優化篇
將unite 2017的一些演講做了整理。本篇有記憶體,cpu gc ui 渲染效能指標 tips幾個小節。內容持續整理中。1.model import setting read write enable 2.fbx import setting animation type generic non...
Unite 2017 乾貨整理 同步篇
unite 2017 乾貨整理 同步篇 2017年05月17日 unite 2017的一些演講做了整理。本篇有幀同步和狀態同步兩個部分。內容持續整理中。幀同步優點 1.開發效率較高 注 特別是對一些操作細節表現要求較高的遊戲 2.能實現更強的打擊感 3.流量消耗穩定 4.原生支援離線戰鬥 5.錄影檔...
Unite 2017 乾貨整理 優化篇
unite 2017 乾貨整理 優化篇 2017年05月16日 將unite 2017的一些演講做了整理。本篇有記憶體,cpu gc ui 渲染效能指標 tips幾個小節。內容持續整理中。記憶體 1.model import setting read write enable 2.fbx impor...