1. 程式人生 > >UWA發布 | 2017 Unity手遊體檢藍皮書 — ARPG篇

UWA發布 | 2017 Unity手遊體檢藍皮書 — ARPG篇

水平 比較 mat 解決方案 紅米 itl 個性 cpu 資源加載

報告目錄:

一、ARPG手遊總體性能開銷分析

二、ARPG手遊CPU模塊性能開銷分析

三、ARPG手遊內存模塊性能開銷分析

四、ARPG手遊資源管理分析

五、UWA對於ARPG手遊研發團隊的建議

一、ARPG手遊總體性能開銷分析

技術分享

iOS設備的CPU性能普遍高於Android設備,Android設備的CPU均值主體範圍為12.4~66.2 ms,iOS設備的CPU均值主體範圍為7.0~57.5 ms。

我們選擇了測評次數最多的四款機型來進行統計,這四款機型分別是紅米2、紅米Note2、華為6Plus和三星S6。

技術分享

技術分享

1)大部分ARPG手遊在中低端設備的性能開銷較高,在Android設備上,CPU耗時集中在17~50ms區間,而在iOS設備上,CPU耗時集中在33ms以內。
2)相較2016年同期,2017 Q2 ARPG手遊在低端設備上的CPU開銷均值增長5.8 ms。
技術分享

無論是高、中、低端的Android設備,渲染、UI、加載/代碼都是需要研發團隊重點關註的,它們的消耗總和占了總開銷的80%。

下面我們就來具體分析這些主流模塊的開銷情況。

二、ARPG手遊CPU模塊性能開銷分析

1、渲染模塊

嚴重程度:地獄

為了能夠更好地反映出各個性能參數的整體使用情況,我們統計了每種性能參數的主體使用範圍,其範圍區間是[5%~95%],以下數據中P5代表5%,P95代表95%。

技術分享

在Draw Call使用上,ARPG手遊的使用程度略低於MMORPG手遊,且對Draw Call的控制同樣較高,UWA建議Draw Call占用的P95 < 200,76.3%的項目可以將其控制在這個範圍內。
技術分享

技術分享

1)ARPG手遊的場景渲染三角形面片數量普遍較高。且設備性能越高,數量峰值越高。經過統計,在中低端設備中,46.5%的項目能將渲染三角形面片數控制在100K以下。
2)ARPG遊戲的場景復雜程度明顯低於MMORPG遊戲,渲染面片峰值要比MMORPG手遊平均低50K。同時,雖然2016 Q4和2017 Q1渲染面片數量大幅上升,但2017 Q2開始回落趨勢較為明顯。
技術分享

技術分享

Graphics.Bilt操作平均每次調用的CPU耗時主要分布在: 0.1~8.5ms。該項CPU開銷在低端設備上的上升趨勢較為明顯,但在2017 Q1大幅下降。這主要是因為,在2017 Q1後,ARPG項目普遍開啟了多線程渲染功能。

2、UI模塊

嚴重程度:地獄

技術分享

技術分享

使用NGUI作為UI解決方案的項目占據了較高的比例,但從趨勢上來看,UGUI從2016 Q3開始,增速非常明顯。通過進一步分析,我們發現近大半年來的新ARPG手遊中,使用UGUI的項目顯著增加,從而大幅提升了UGUI在ARPG項目中的使用占比。

下面我們將分別說明NGUI和UGUI的CPU耗時和堆內存占用情況。

技術分享

技術分享

技術分享

技術分享

UI模塊的性能開銷依然很高,也是我們統計中的第二大性能殺手。在中低端設備上,超過90%的研發項目在UI端都面臨較為嚴重的性能問題,主要體現方面與MMORPG遊戲類似,功能界面復雜、同一時刻需要更新的Panel多等。但ARPG的平均耗時要略低於MMORPG,這是因為ARPG主要仍以推圖形式為主,其在戰鬥副本中的玩家是預先固定的,大量玩家同屏打怪的情況很少出現。
技術分享

經統計,NGUI中堆內存每10000幀分配的主體範圍為 6.0~81.7 MB,UGUI中堆內存每10000幀分配的主體範圍在12.3 MB以內。從堆內存分配來看,UGUI遠低於NGUI。

3、邏輯代碼

嚴重程度:噩夢

技術分享

技術分享

1)GC觸發頻率很高,是造成卡頓的主要原因之一,目前只有12.5%的項目可以將GC的觸發頻率控制在1000幀/次以上。
2)在2017年GC平均耗時趨勢雖有所上升,但相比於2016年已經大幅降低。
技術分享

技術分享

1)Instantiate實例化操作平均每次調用的CPU耗時主要分布在: 1.2~43.5 ms,且主要集中在10ms以內。
2)Instantiate實例化耗時在2017 Q2之後大幅下降,這說明越來越多的研發團隊開始重視項目運行時的資源管理。
技術分享

技術分享

Shader.Parse 操作是比較突出的性能殺手,目前平均每次調用的CPU耗時主要分布在 4.4~145.2ms。但隨著越來越多團隊了解該項的耗時特性後,該項的CPU耗時呈現出較為明顯的下降趨勢。

4、動畫模塊

嚴重程度:噩夢

技術分享

技術分享

技術分享

1)Animator.Update/Animation.Update的開銷在中低端設備上的耗時普遍較高,但整體耗時在2017年上半年有明顯的下降趨勢。
2)ARPG遊戲的MeshSkinning.Update的耗時明顯高於MMORPG遊戲。這主要體現在角色模型的面片數和骨骼數方面,ARPG更加偏向於動作表現力上。

5、粒子模塊

嚴重程度:普通

技術分享

技術分享

技術分享

技術分享

1)粒子系統的CPU開銷普遍較低,且近一年來下降趨勢較為明顯。
2)粒子系統的數量使用仍然較大,這樣會造成較高的內存占用。UWA建議將粒子系統的使用數量峰值控制在400以下,目前僅21.8%的項目達到。

6、物理模塊

嚴重程度:普通

技術分享

技術分享

物理模塊的性能普遍較好,但呈現出較為明顯的上升趨勢,因此在中低端機上依然需要研發團隊關註。

三、ARPG手遊內存模塊開銷分析

技術分享

內存泄露是研發過程中經常面臨的嚴峻問題,依然有37%的項目存在不同程度的內存泄露。我們可以看到從2016 Q2開始,內存泄露占比大幅下降,但隨著項目新功能的開發以及新項目的湧入,其占比又開始大幅攀升回來。雖然整體趨勢有所下降,但內存泄露問題的有效防範和解決,依然任重道遠。

1、總體內存

嚴重程度:地獄

技術分享

技術分享

1)總體內存峰值主要分布在95.6~573.9 MB區間,且均值在300MB以上。
2)與MMORPG遊戲相比,ARPG內存占用的上線起伏更加明顯。經過進一步分析,我們發現,2016 Q4的內存占用在大多數老項目中的主要資源(紋理、網格和動畫片段等)都得到了較大的內存優化;但隨著2017 Q1新項目不斷湧入,內存占用又大幅回升;而2017 Q2內存的下降則是因為AssetBundle內存的大幅下降,大多數研發團隊開始通過LoadFromFile來加載LZ4格式的AssetBundle,從而讓內存又迅速回落。

2、總體堆內存

嚴重程度:地獄

技術分享

技術分享

1)總體堆內存峰值主要分布為 9.7~109.6 MB,僅37.7%的項目可以把總體堆內存峰值控制在40MB以內。
2)堆內存使用上升趨勢明顯,建議研發團隊重點關註。對此,UWA建議重點關註以下幾點:
  • 嚴格關註配置文件的使用,避免一次性加載過大的配置文件而撐大堆內存;
  • 不少項目的堆內存增大是由於熱更新所致。因此,對於過大的數據Data的使用,建議通過分幀進行,並及時進行GC回收;
  • 避免不必要的代碼堆內存分配,雖然是老生常談,但從趨勢上可以看出,大多數研發團隊仍需加強重視。

項目的內存占用很大一部分來自於資源的使用,下面我們將對項目中主流資源的使用情況進行分析。

3、紋理資源內存

嚴重程度:地獄

技術分享

技術分享

1)紋理內存峰值主要分布為 22.4~198.8 MB,且主要分布在50~100MB區間。
2)內存峰值占用在2016 Q4大幅下降,但在今年後又開始逐步上升,建議研發團隊密切關註自身項目的紋理資源使用情況。

4、網格資源內存

嚴重程度:噩夢

技術分享

技術分享

1)網格資源內存峰值主要分布為 1.0~ 47.5 MB,且主要集中在40MB以內。
2)ARPG遊戲的場景較之MMORPG遊戲普遍較小,場景相對輕量和簡單,因此,其網格資源量明顯低於MMORPG遊戲。

5、動畫資源內存

嚴重程度:噩夢

技術分享

技術分享

動畫資源內存峰值主要分布在38.7 MB以內,且主要集中在15MB以內。

6、Shader資源內存

嚴重程度:噩夢

技術分享

技術分享

1)Shader資源內存峰值主要分布在6.1 MB之內,且主要集中在1MB之內。
2)從內存趨勢上來看,近一年來內存占用下降較為明顯。

7、RenderTexture資源內存

嚴重程度:地獄

技術分享

技術分享

1)RenderTexture資源內存峰值主要控制在67.7 MB以內,且在各個區間都較為平均。
2)內存使用上升趨勢明顯,建議研發團隊對其在自身項目中的使用情況特別關註!

8、粒子系統資源內存

嚴重程度:噩夢

技術分享

技術分享

1)粒子系統資源內存峰值主要分布在 33.7 MB以內,且主要集中在20MB以內。
2)粒子系統的內存占用一直較為平穩,雖然在2011年Q1期間高端機上的內存占用較高,但在2017年Q2則大幅回落到之前水平。
3)目前,粒子系統的內存占用仍然較為“虛高”,即遊戲運行期間Active數量遠小於內存中的總數量,在大部分項目中,Active的粒子系統數量占比不到10%,即粒子系統的內存占用峰值應該在5MB左右。

四、ARPG手遊資源管理分析

技術分享

技術分享

1)在資源加載方面,AssetBundle.Load和Resources.Load是項目中的主要加載方式。
2)通過調用趨勢可以看出,研發團隊對於Resources.Load的使用仍然有明顯的增長趨勢。對此,UWA強烈建議研發團隊盡可能使用AssetBundle作為遊戲資源的主要加載方式。
技術分享

技術分享

1)LoadFromFile(Async)是ARPG項目中AssetBundle的主要加載方式。
2)LoadFromFile(Async)的使用在2017 Q2上大幅增長了46%,這是在UWA DAY 2017上我們非常建議的AssetBundle加載方式(Unity 5.3版本後),研發團隊可以通過UWA Blog()的相關文章查看具體的性能對比。
技術分享

Instantiate/Destroy和Active/Deactive調用次數較高,需要研發團隊根據自身項目情況時刻註意:
1)由於Active/Deactive每次調用的CPU開銷不大,且不會造成崩潰、閃退等問題,所以研發團隊極易忽視這兩項操作所帶來的性能問題,因而出現了遊戲運行1萬幀Active/Deactive上萬次調用的情況。因此,此處存在著很大的性能浪費;
2)Instantiate/Destroy的調用次數同樣較高,雖然不如Active/Deactive頻繁,但每3幀調用1次Instantiate的頻率依然不容忽視,建議研發團隊堅持加強項目的資源管理,避免不必要的頻繁Instantiate/Destroy操作發生。

五、UWA 對於ARPG手遊研發團隊的建議

一、警惕渲染模塊和UI模塊這兩大性能殺手!隨著精品化ARPG項目的日益增多,在日後很長一段時間內,這兩項依然將是研發團隊在性能優化方面的重中之重!

  • 渲染方面,Draw Call的控制技術已被越來越多的團隊所熟練掌握,並且隨著設備的發展,Draw Call的影響將越來越小,反觀渲染Triangle數量將逐步成為渲染模塊的新的性能瓶頸,越來越大的渲染Triangle量會給GPU、耗電和發熱方面帶來巨大的壓力;
  • UI方面,UI網格重建開銷在未來相當長的一段時間內仍然是研發團隊頭痛的問題,UI優化的原則非常簡單:動靜分離,但真實操作起來則是非常困難。90%項目中的UI性能問題是由於動靜元素沒有分離導致,但沒有任何兩個項目的具體原因是一致的。這是UI性能優化方面非常困難的主要原因。

二、邏輯代碼方面,Instantiate實例化開銷雖然在2017 Q2呈現較為明顯的下降趨勢,但仍需要研發團隊持續對資源管理進行監控。同時,GC開銷的上升趨勢明顯,需要研發團隊加強對Mono堆內存的優化意識;

三、在內存優化方面,與MMORPG遊戲類似,Mono和RenderTexture內存占用在2017年的上升趨勢非常明顯,對此,建議研發團隊在接下來的項目研發中密切關註這兩項的內存使用;

四、在動畫模塊方面,ARPG遊戲的CPU耗時明顯高於MMORPG遊戲。對此,我們的建議如下:

  • 嘗試動畫片段的精度縮減技術,該技術在UWA Blog和UWA問答上()都有詳細的講解和代碼分享;
  • 由於ARPG遊戲對於動作表現力的要求很高,因此,相比於Humanoid模式,Generic模式更加適合於ARPG項目,它可以讓你的動畫表現與3DMax、Maya等制作表現更加一致;
  • 隨著ARPG中怪物角色的數量持續增加,GPU Instancing技術會受到更多遊戲團隊的青睞,具體做法可參加UWA Blog相關文章。但同樣需要註意的是,研發團隊需要控制同屏的渲染面片數。

五、資源加載方面,Resources.Load依然是比較主流的資源加載方式。但UWA建議盡可能嘗試通過AssetBundle.Load來加載相關資源。在2017 Q2以後,LoadFromFile(Async)已經成為ARPG研發團隊的主流AssetBundle加載方式,對於仍然沒有使用該方式的研發團隊,建議查看UWA的相關直播信息,並找到對應的性能比較和分析;

六、以上數據是我們對於ARPG手遊性能數據的整體研究和趨勢分析,旨在從宏觀上為大家展現項目中普遍存在的性能瓶頸和研發團隊容易忽視的潛在性能問題。但同樣需要說明的是,優化是一個“抽絲剝繭”的過程,需要研發團隊花費大量的時間和耐心去完成。UWA建議:多做測試,以數據說話,空杯心態,將經驗歸零。

以上就是UWA發布的2016-2017年ARPG手遊性能測評匯總和分析。此次,我們從性能參數上增加了資源加載、資源卸載等數據擴充了報告的完整性,在測評參數上加入了機型、歷史數據等方便研發團隊能及時進行橫向和縱向的比較。我們深信數據是會說話的,總有規律值得我們追溯求實、鑒往知來。同時我們也會不斷細化評析的標準、劃分,以使得這些數據更有代表性和說服力。

關於UWA

由侑虎科技開發的遊戲/VR應用性能優化平臺,目前提供 1)性能檢測與優化 2)資源檢測與分析 3)UWA GOT 三大工具。同時,我們也會為大家開發更省心的功能,希望通過它們可以減少開發者反復測試定位問題的時間,從而將更多的精力集中在項目開發和解決問題中,能為大家項目研發省下的任何一分一秒,都是UWA團隊的驕傲。

UWA發布 | 2017 Unity手遊體檢藍皮書 — ARPG篇