Unity優化技巧(上)
什麼是優化
- 為了達成相同目標,尋求並採用消耗更少資源的辦法的過程
對遊戲來說通過特別的技巧,在實現相同的表現效果、流暢度的前提下對硬體機能的需求更低、更平民化。或者在相同性能的平台上,實現更好的畫面表現效果、流暢度。
是追求極致。
- 包括CPU,GPU,內存,快閃記憶體,網路等
一般來說優化主要針對硬體因此分類也和硬體相關。此外優化也和職責相關,程序需要對代碼優化,美術需要對資源優化,策劃也需提供一些策划上的方案避免性能開銷。
- 一個永恆不變的話題
人的慾望是無止境的,玩家的需求和項目的需求永遠在不斷增長。優化永無止境。
優化方法
- 根據性能指標設定優化目標
沒有目標就沒有方向我們首先就是設立優化目標,這也是一種通用的優化方式。不僅僅針對Unity。
一般遊戲的性能指標有:幀率,穩定性(卡頓),等待時間(Loading),內存佔用(手機上最重要指標,絕大部分閃退的原因,理想值是內存佔用低於150M),安裝包大小,網路延遲,網路流量,耗電量(手機比較重要,限幀)等等。
例如可以訂我們的目標是在低配機型紅米上可以穩定30幀運行內存200M以內,在中配機型上穩定在45幀運行實現主流遊戲效果內存300M以內,高配機型上60幀穩定運行實現次世代效果內存。
- 根據性能指標設定優化目標
一般來說遊戲優化也遵循28原則,遊戲優化又是很費時費力的一件事,我們需要找出性能瓶頸。按照優先順序來進行優化。
望聞:根據優化目標,先大概分析一下性能指標。包括幀數多少,是否穩定,是否存在卡頓。較長時間運行,發熱量如何,是否存在閃退。安裝包多大。網路流量多大等。找到最優先需要解決的點。
問:詢問相關開發人員性能熱點大概從什麼時候開始出現。我們之前的項目在開發到中後期會找測試同學測試每日構建的版本,及時監控性能指標,第一時間發現性能瓶頸,發現越早越容易優化。
切:通過一些工具分析來進行深度的分析,必要時需要自己開發分析工具,定位熱點。
- 優化性能熱點
找到性能熱點指點之後工作就已經完成一大半了,然後針對熱點指定方案優化。下面先介紹一些常用的分析工具。
優化工具
- Unity Profile
最常用的性能分析工具,官方自帶可編輯器可連真機,不做過多介紹。
- Xcode
蘋果的性能分析工具,在IOS平台上是最好的選擇。
- UWA
有本地工具(詳見使用使用UWA
GOT優化Unity性能和內存)和在線版。它通過自動化工具收集UnityProfile的數據,並結合人工進行測試分析。可以提供一些採集分析過的性能數據和優化建議。
- ADB & AndroidStudio
有時也會在Android設備上直接查看性能數據,日誌等。
- Unity Frame Debugger
Unity自帶的圖形調試工具。功能相對較弱,不過因為集成在了Unity中,使用方便。
- Xcode GPU Frame Caputre
蘋果平台下圖形調試最好的選擇。
- Adreno Profiler
高通的GPU調試工具。使用Mono開發,特別介紹一下,這是唯一可以比較方便導出渲染資源的工具,可以在不破解的情況下扒取遊戲貼圖,模型,Shader等資源。不過導出的資源會丟失一些信息需要工具還原。提供記錄渲染API和回放分析,小米2小米4都可以使用,需要安裝AndroidSDK,使用Adb連接。
- GPA
Intel的開發工具,DX版本的工具就非常強大(詳見使用英特爾GPA優化《軒轅傳奇》遊戲的性能),現在也有OpenGL版本,使用方法類似。和DX版本兼容性非常好一樣,各種GPU的手機基本都可以使用,不過一些深層次的性能分析只有Intel自家晶元才支持。。
- NVIDIA Tegra Graphics Debugger
Nvidia公司的分析工具,前身是大名鼎鼎的PerfHud,代替了PerfHud
ES。功能強大使用方便,和PerfHud一樣使用的時候不是抓一幀而是實時凍結手機上一幀的顯示,支持實時修改Shader並在手機上顯示最終效果。缺點是使用Tegra的設備比較少,小米3和小米平板。- Memprofile
Unity官方出的內存分析插件。
- 其他
每個顯卡廠商都有自己的分析工具:一般都是基於驅動層。另外開發過程中還會開發很多自己開發的性能分析工具和集成一些插件,例如BuildReport,WeTest
Cube,Emmagee等等。- 最後使用這些工具能幹什麼
- 實時顯示遊戲運行時CPU,OpenGL runtime以及GPU上的性能數據。同時支持多種3D流水線的override模式。
- 可以看到3D流水線的渲染過程,API的調用過程,Shader的源代碼和指令個數,使用的貼圖格式等信息,mesh信息
- 可以分析DC是否過多,渲染狀態是否調用過多,是否可以合併或者排序,地形,場景,角色,UI,後期處理等佔比來定位性能熱點。
- 可以分析貼圖是否過多過大,是否使用顯卡支持的壓縮格式
- Override模式下。Null Driver, Null Hardware,看定位性能是否在GPU上。關閉渲染或者一些相關API來定位性能瓶頸。例如ps,1像素貼圖等
- 可以看一些工具提供的Shader優化建議,也可以修改Shader實時發送到設備,既可以分析其他遊戲shader也可以自己調試。
- 分類開關不同類型的對象定位性能瓶頸。監控內存,當前引用資源數據,網路延遲,內存池開銷等
- 等等
未完待續...
推薦閱讀:
※Android應用內存泄露分析、改善經驗總結
※關於Unity渲染優化,你可能遇到這些問題
※#每天一個小目標#Unity技術分享(九)
※Cloud Performance Platform:基於PProf的性能分析雲平台