本文首發於公眾號"侑虎科技",遊戲葡萄已獲轉載授權。
正值UWA成立兩周年之際,借著ChinaJoy蓄勢待發之勢,UWA發佈2016-2017年Unity手遊性能測評數據分析藍皮書,希望能為遊戲行業的從業人員提供詳實的信息和針對性的建議。
此份藍皮書收集瞭提交到http://www.uwa4d.com上的所有項目,我們從總體性能數據、引擎各模塊開銷、內存占用等方面進行瞭匯總分析,這呈現Unity手遊行業現狀。
報告目錄:
一、MMORPG手遊總體性能開銷分析
二、MMORPG手遊CPU模塊性能開銷分析
三、MMORPG手遊內存模塊性能開銷分析
四、MMORPG手遊資源管理分析
五、UWA對於MMORPG手遊研發團隊的建議
一、MMORPG手遊總體性能開銷分析
iOS設備的CPU性能普遍高於Android設備,Android設備的CPU均值主體范圍為14.4~73.6 ms,iOS設備的CPU均值主體范圍為9.2~43.5 ms。在Android設備上,CPU耗時集中在17~50ms區間,而在iOS設備上,CPU耗時集中在33ms以內。
我們選擇瞭測評次數最多的四款機型來進行統計,這四款機型分別是紅米2、紅米Note2、華為6Plus和三星S6。
1)大部分MMORPG手遊在中低端設備的性能開銷較高,大於33ms的耗時占比范圍在60%~70%。
2)精品化過程中的MMORPG手遊在低端移動設備上的CPU開銷明顯增大。相較2016年同期,2017 Q2 MMORPG手遊的CPU開銷均值增長超過50%。
無論是高、中、低端的Android設備,渲染、UI、加載/代碼都是需要研發團隊重點關註的,它們的消耗總和占瞭總開銷的80%。
下面我們就來具體分析這些主流模塊的開銷情況。
二、MMORPG手遊CPU模塊性能開銷分析
1. 渲染模塊
嚴重程度:地獄
為瞭能夠更好地反映出各個性能參數的整體使用情況,我們統計瞭每種性能參數的主體使用范圍,其范圍區間是[5%~95%],以下數據中P5代表5%,P95代表95%。
MMORPG手遊的Draw Call數量普遍較高,且設備性能越好,數量峰值越高。這主要有以下幾方面原因:
1)研發團隊普遍開始針對不同機型來制定自適應的渲染LOD策略,主要包括模型LOD和Shader LOD等。
2)除LOD外,研發團隊同樣會對一些渲染效果進行有針對性的設置,最常見的是陰影的處理,高端機上開啟實時陰影,而低端機上則通過較為簡單的陰影面片或Projector來處理。另外,水體模擬也越來越多地在項目中被使用,高端設備上開啟水面反射效果,也會增加一定量的Draw Call。
但就目前數據表明,研發團隊已經開始有意地對Draw Call進行控制,UWA建議Draw Call占用的P95 < 200,72.3%的項目可以將其控制在這個范圍內。
1)MMORPG手遊的場景渲染三角形面片數量普遍較高。且設備性能越高,數量峰值越高。經過統計,在中低端設備中,40.4%的項目能將渲染三角形面片數控制在100K以下。
2)場景復雜程度明顯增加,雖然2017 Q2數量有所回落,但相較於去年同期,仍然增幅33%。同時,較高的渲染面片數量也大幅增加瞭中低端設備的GPU渲染壓力和耗能壓力。
Graphics.Bilt操作平均每次調用的CPU耗時主要分佈在: 0.1~5.1ms。與Instantiate開銷類似,該項CPU開銷在低端設備上的上升趨勢較為明顯,但在2017 Q2大幅下降。這主要是因為,在2017 Q1後,MMORPG項目普遍開啟瞭多線程渲染功能。
2. UI模塊
使用NGUI作為UI解決方案的項目占據瞭相當高的比例,NGUI目前仍然是MMORPG研發團隊對於UI系統使用的主要解決方案。MMORPG是目前手遊中工程技術難度最為復雜的遊戲品類之一,對於UI模塊的選擇,大多數團隊仍然傾向於從穩定性和把控性兩方面出發,這也是NGUI占比持續較高的主要原因。
下面我們將分別說明NGUI和UGUI的CPU耗時和堆內存占用情況。
UI模塊的性能開銷依然很高,也是我們統計中的第二大性能殺手。在中低端設備上,超過90%的研發項目在UI端都面臨較為嚴重的性能問題,主要體現在以下幾個方面:
(1)MMORPG遊戲的界面復雜,功能多(技能、背包、角色、任務、商城等),數量大(血條、名稱、飄字等HUD)。
(2)同一時刻存在大量需要更新的Panel,比如,移動中血條等HUD、NPC不斷更新的提示icon、面板中(任務、首充等)的提醒動畫、聊天框和彈幕中隨機出現的滾動文字等。
以上情況都是MMORPG項目研發團隊每天面對的主要UI問題,可能一個Widget的使用疏忽,就能讓研發團隊的UI模塊性能開銷飆升一個量級。
註意:從重要函數上來看,UGUI的CPU占用大幅低於NGUI。需要說明的是,Unity 5.2版本之後已經開始將UI的部分計算操作移到子線程中進行,而主線程中的表現則為WaitingForJob、PutGeometryJobFence等,在本次報告中,我們並沒有將這兩項開銷統計在內。
經統計,NGUI中堆內存每10000幀分配的主體范圍為 6.1~103.3 MB,UGUI中堆內存每10000幀分配的主體范圍在10.9 MB以內。從堆內存分配來看,UGUI遠低於NGUI。
3. 邏輯代碼
嚴重程度:噩夢
1)GC觸發頻率很高,是造成卡頓的主要原因之一,目前隻有10%的項目可以將GC的觸發頻率控制在1000幀/次以上。
2)隨著MMORPG遊戲越來越重度化,GC平均耗時在逐步上升。GC耗時會逐漸成為遊戲運行時的主流性能殺手,需要研發團隊時刻註意!
1)Instantiate實例化操作平均每次調用的CPU耗時主要分佈在: 1.4~33.1 ms,且主要集中在10ms以內。
2)Instantiate實例化耗時在2017 Q2之前一直處於上升趨勢,但在2017 Q2中大幅下降,這說明越來越多的研發團隊開始重視項目運行時的資源管理。
Shader.Parse 操作是比較突出的性能殺手,目前平均每次調用的CPU耗時主要分佈在 5.8~134.4ms。但隨著越來越多團隊瞭解該項的耗時特性後,該項的CPU耗時呈現出較為明顯的下降趨勢。
4. 動畫模塊
1)Animator.Update/Animation.Update的開銷在中低端設備上的耗時普遍較高,但整體耗時在2017年上半年明顯降低。
2)MeshSkinning.Update的耗時普遍較低。
5. 粒子模塊
嚴重程度:普通
1)粒子系統的CPU開銷普遍較低,且近一年來下降趨勢較為明顯。
2)粒子系統的數量使用仍然較大,這樣會造成較高的內存占用。UWA建議將粒子系統的使用數量峰值控制在400以下,目前僅24.8%的項目達到。
6. 物理模塊
物理模塊的性能普遍較好,但呈現出較為明顯的上升趨勢,因此在中低端機上依然需要研發團隊關註。
三、MMORPG手遊內存模塊開銷分析
內存泄露是研發過程中經常面臨的嚴峻問題,依然有將近半數的項目存在不同程度的內存泄露。但我們可以看到,內存泄露的比例正在逐步降低,相較於去年同期,2017 Q2的內存泄露占比已經下降瞭6%。
總體內存
嚴重程度:地獄
1)總體內存峰值主要分佈在146.8~576.9 MB區間,且均值在350MB以上;
2)隨著MMORPG遊戲的精品化趨勢,其內存占用也逐步增加,雖然2016 Q4稍有回落,但整體內存的上升趨勢較為明顯。
總體堆內存
1)總體堆內存峰值主要分佈為 18.3~117.2 MB,僅34.2%的項目可以把總體堆內存峰值控制在40MB以內;
2)堆內存使用上升趨勢明顯,建議研發團隊重點關註。對此,UWA建議重點關註以下幾點:
(1)嚴格關註配置文件的使用,避免一次性加載過大的配置文件而撐大堆內存;
(2)不少項目的堆內存增大是由於熱更新所致。因此,對於過大的數據Data的使用,建議通過分幀進行,並及時進行GC回收;
(3)避免不必要的代碼堆內存分配,雖然是老生常談,但從趨勢上可以看出,大多數研發團隊仍需加強重視。
項目的內存占用很大一部分來自於資源的使用,下面我們將對項目中主流資源的使用情況進行分析。
1. 紋理資源內存
嚴重程度:地獄
1)紋理內存峰值主要分佈為 27.8~174.6 MB,且主要分佈在50~100MB區間。
2)內存峰值占用在2016 Q4大幅下降,但在今年後又開始逐步上升,建議研發團隊密切關註自身項目的紋理資源使用情況。
2. 網格資源內存
嚴重程度:噩夢
1)網格資源內存峰值主要分佈為 8.5~ 70.4 MB,且主要集中在40MB以內;
2)MMORPG遊戲的場景普遍較大、角色普遍較多,因此,其網格資源量明顯高於其他類型遊戲。但從使用趨勢上來看,其最近一年的使用趨勢較為平穩,均值均在30MB上下浮動。
1)動畫資源內存峰值主要分佈在: 3.5~ 58 MB,且主要集中在15MB以內。
2)內存使用趨勢較為平穩,平均峰值內存長期控制在20~25MB區間之內。
3. Shader資源內存
嚴重程度:噩夢
1)Shader資源內存峰值主要分佈為 0.1~ 5.6 MB,且主要集中在1MB之內。
2)從內存趨勢上來看,2016年內存占用下降較為明顯,2017年略有上升。
4. RenderTexture資源內存
1)RenderTexture資源內存峰值主要分佈為 0.1~ 100.9 MB,且在各個區間都較為平均;
2)內存使用上升趨勢明顯,建議研發團隊對其在自身項目中的使用情況特別關註!
5. 粒子系統資源內存
嚴重程度:噩夢
1)粒子系統資源內存峰值主要分佈為 1.3~ 34.8 MB,且主要集中在20MB以內。
2)粒子系統的內存占用在2016年Q3期間較高,而後在2016年Q4大幅下降,但仍然還有較大的下降空間。目前,粒子系統的內存占用較為"虛高",即遊戲運行期間Active數量遠小於內存中的總數量,在大部分項目中,Active的粒子系統數量占比不到10%,即粒子系統的內存占用峰值應該在5MB左右。
四、MMORPG手遊資源管理分析
1)在資源加載方面,AssetBundle.Load和Resource.Load是項目中的主要加載方式;
2)通過調用趨勢可以看出,研發團隊對於Resources.Load的使用仍然有增加的趨勢。對此,UWA強烈建議研發團隊盡可能使用AssetBundle作為遊戲資源的主要加載方式。
1)LoadFromFile和New WWW是項目中AssetBundle的主要加載方式;
2)LoadFromFile的使用在2017 Q2上升瞭6%,這是在UWA DAY 2017上我們非常建議的AssetBundle加載方式(Unity 5.3版本後),研發團隊可以通過UWA Blog的相關文章查看具體的性能對比。
Instantiate/Destory和Active/Deactive調用次數較高,需要研發團隊根據自身項目情況時刻註意:
1)由於Active/Deactive每次調用的CPU開銷不大,且不會造成崩潰、閃退等問題,所以研發團隊極易忽視這兩項操作所帶來的性能問題,因而出現瞭遊戲運行1萬幀Active/Deactive上萬次調用的情況。因此,此處存在著很大的性能浪費;
2)Instantiate/Destory的調用次數同樣較高,雖然不如Active/Deactive頻繁,但每5幀調用1次Instantiate的頻率依然不容忽視,建議研發團隊堅持加強項目的資源管理,避免不必要的頻繁Instantiate/Destory操作發生。
五、UWA 對於MMORPG手遊研發團隊的建議
第一,警惕渲染模塊和UI模塊這兩大性能殺手!隨著精品化MMORPG項目的日益增多,這兩項在接下來很長一段時間內依然是研發團隊在性能優化時的重中之重!
渲染方面,Draw Call的優化技巧已被越來越多的團隊所熟練掌握,並且隨著設備的發展,Draw Call的影響將越來越小,反觀渲染Triangle數量將逐步成為渲染模塊新的性能瓶頸,越來越大的渲染Triangle量會給GPU、耗電和發熱等帶來巨大的壓力;
UI方面,UI網格重建開銷在未來相當長的一段時間內仍然是研發團隊頭痛的問題,目前手遊MMORPG仍然處於"端遊手遊化"的轉變初期階段,大多數研發團隊考慮更多的仍是功能上的遷移和與移動端的結合,在UI技術上的沉淀較為薄弱。
第二,邏輯代碼方面,Instantiate實例化開銷雖然在2017 Q2呈現較為明顯的下降趨勢,但仍需要研發團隊持續對資源管理進行監控。同時,GC開銷上升趨勢明顯,需要研發團隊加強對Mono堆內存的優化意識;
第三,內存泄露占比持續下降,但內存占用持續升高。雖然移動設備的內存量逐年增大,但對於希望覆蓋面廣闊的遊戲團隊來說,內存的控制仍然刻不容緩;
第四,在內存優化方面,大部分研發團隊都將精力放在紋理、網格和動畫片段等主要資源上,但通過上述分析發現,Mono堆內存和RenderTexture內存占用在2017年的上升趨勢非常明顯,對此,建議研發團隊在接下來的研發中密切關註這兩項的內存使用;
第五,動畫資源和粒子系統的內存優化空間依然很大。對於前者,建議研發團隊關註以下技術:
動畫片段的精度縮減技術,該技術在UWA Blog和UWA問答上都有詳細的講解和代碼分享;
關註Retargeting技術,該技術可以大幅降低多角色的動畫片段內存占用,預測隨著MMORPG項目的進一步重度化,該技術會得到越來越多團隊的青睞。
對於後者,則建議研發團隊關註粒子系統的資源配表,結合UWA線上性能報告,對不常使用的Particle System進行合理規劃。
六、資源加載方面,New WWW、Resources.Load依然是研發團隊非常常用的資源加載方式。但UWA建議盡可能嘗試通過LoadFromFile(Async)和AssetBundle.Load來加載相關資源,從而獲得更好的性能。研發團隊可在UWA Day 2017的相關Blog中找到對應的性能比較和分析;
七、以上數據是我們對於MMORPG手遊性能數據的整體研究和趨勢分析,旨在從宏觀上為大傢展現項目中普遍存在的性能瓶頸和研發團隊容易忽視的潛在性能問題。但同樣需要說明的是,優化是一個"抽絲剝繭"的過程,需要研發團隊花費大量的時間和耐心去完成。UWA建議:多做測試,以數據說話,空杯心態,將經驗歸零。
以上就是UWA發佈的2016-2017年MMORPG手遊性能測評匯總和分析。此次,我們從性能參數上增加瞭資源加載、資源卸載等數據擴充瞭報告的完整性,在測評參數上加入瞭機型、歷史數據等方便研發團隊能及時進行橫向和縱向的比較。我們深信數據是會說話的,總有規律值得我們追溯求實、鑒往知來。同時我們也會不斷細化評析的標準、劃分,以使得這些數據更有代表性和說服力。