《聚爆Implosion》性能精析:这是我们测过性能最棒的手游
今天侑虎科技為大家帶來由臺灣雷亞游戲研發、龍淵網絡發行的3DARPG移動游戲《聚爆Implosion》的UWA測評報告分析。從畫面表現力上來看,該游戲無疑為一款重度3D ARPG移動游戲,而且,它在各種檔次移動設備上的性能效率幾乎無可挑剔。可以毫不夸張地說,《聚爆Implosion》是目前UWA測評過的所有游戲中性能最棒的一款!在此,我們將對該款游戲的性能數據進行深度剖析,希望通過這篇文章可以讓大家對移動游戲各個模塊的運行效率有更為深刻的認知,并對大家的項目研發有所幫助。
?
________________________________________
CPU性能
該游戲在CPU占用方面的性能非常優異。我們在紅米2和華為6Plus兩款中低端設備上按照劇情進行測試,下圖則為對應的運行性能數據。
紅米2:
?
?
華為6Plus:
?
可以看出,在紅米2上運行的18143幀中,超過33ms的幀數占比為11.1%,超過50ms的幀數占比為1.3%。在華為6Plus上運行的16026幀中,超過33ms的幀數占比為8.7%,超過50ms的幀數占比為3.3%。目前,在我們測評過的重度ARPG游戲中,能在紅米2上達到這樣如此高效的運行效率,只此一款!
其整體CPU性能的優秀表現與其各個模塊的合理使用是分不開的。下面,我們就詳細講解一下其CPU性能方面的亮點之處。
1)渲染模塊
通過UWA性能測評報告,我們可以看到該游戲詳盡的渲染模塊性能開銷。該游戲在紅米2上運行時的渲染模塊CPU開銷如下圖所示。通過統計,半透明物體渲染的CPU消耗均值為 1.3 ms,主要集中在 0.0~3.7ms 范圍內(5%~95%)。不透明物體渲染的CPU消耗均值為 4.2 ms,主要集中在 0.0~13.9ms范圍內(5%~95%)。Draw Call峰值為 142,且主要集中在 4~115 范圍內(5%~95%),均屬于合理范圍之內。
?
?
該游戲在華為6Plus上運行時的渲染模塊CPU開銷如下圖所示。可以看出,雖然是中低端機,但較之紅米2,其渲染模塊的性能開銷已經大幅下降。通過統計,半透明物體渲染的CPU消耗均值為 1.0 ms,主要集中在 0.0~1.9ms 范圍內(5%~95%)。不透明物體渲染的CPU消耗均值為 2.7 ms,主要集中在 0.0~5.9ms范圍內(5%~95%)。Draw Call峰值為 154,且主要集中在 5~120 范圍內(5%~95%),均屬于合理范圍之內。
?
下圖為該游戲在紅米2上的具體CPU性能堆棧。可以看到,該游戲在紅米2上開啟了實時陰影功能,且僅ShadowMap的渲染一項則占據了總渲染開銷的7%,考慮到渲染ShadowMap時接收陰影物體的重繪,實時陰影帶來的真實開銷可能占據10%左右。這也是該游戲在紅米2這種低端機上不透明渲染開銷較大的主要原因之一。
?
同時,從性能堆棧中可以看到,該游戲同樣開啟了圖像后處理特效功能,占據總體渲染性能的13%。這是因為圖像后處理特效在戰斗副本中全程開啟。下圖為Graphics.Blit在游戲運行時的CPU占用情況。
?
在低端設備上開啟了實時陰影功能和圖像后處理,并達到了如此高的渲染效率,這足以說明了研發團隊對于移動設備渲染底層的深刻理解和深厚的功底!
2)動畫模塊
在UWA測評報告中,該游戲運行時的動畫模塊CPU開銷如下圖所示。通過統計,MeshSkinning.Update的CPU占用主要集中在 0.0~1.5ms 區間,該值處于合理范圍之內。
?
另外,游戲中的動畫系統主要以Mecanim為主,Animator.Update的CPU占用主要集中在 0.0~4.5ms 區間,其運行時的CPU占用如下圖所示。
?
?
我們來繼續查看一下它的性能堆棧,可以看到,Animator.Update函數的主要CPU占用為兩個函數所占據:
1)MOnAnimatorMoveDelegate.OnAnimatorMove,占據該函數總開銷的41%;
2)FK & Statemachine,占據該函數總開銷的30%。
對于前者,這個是開發團隊重寫的OnAnimatorMove函數,如果您的項目中也可以看到相似的開銷,則需要您去仔細檢測一下項目中重寫的OnAnimatorMove函數,看看是否有不必要的CPU占用可以優化。對于后者,則是Mecanim動畫系統的自身狀態機控制開銷。一般來說,Animator Controller中的狀態機越復雜,該項越高。如果研發團隊同樣也是該項值較高,我們建議直接查看Animator Controller的制作,并嘗試對其進行簡化。
?
注意:我們不推薦將大量甚至所有角色用到的AnimationClip全部放入到Animator Controller中,因為這會帶來兩個問題:
1.Animator Controller中到處都是狀態機的連接線,復雜且不易于維護;
2.Animator Controller初始化時的開銷較高。
因此,我們建議研發團隊善用AnimatorOverrideController,在Runtime時動態替換所需的AnimationClip,從而盡可能避免上述問題的出現。
3)粒子系統
在UWA測評報告中,該游戲運行時的粒子系統CPU開銷如下圖所示。可以看出,ParticleSystem.Update的CPU占用主要集中在3ms 以下,該值處于合理范圍之內。同時,粒子系統的渲染在CPU端的開銷主要集中在 0.0~1.2ms 范圍內(5%~95%)。由于該游戲使用的是Unity 4.x版本,所以此處的CPU占用仍然在主線程中體現。如果您的項目使用的是Unity 5.3以后版本,那么此處的CPU占用將會為0。這是因為Unity引擎已經將粒子系統的這部分操作移植到子線程中進行。
?
4)UI模塊
通過測試,我們發現該游戲的UI系統中,既使用了UGUI,也使用了NGUI。具體的分配是,在主UI界面中使用的是NGUI,在戰斗場景中使用UGUI。其具體的CPU占用如下圖所示。通過進一步分析,經過統計,NGUI模塊總體在紅米2上的CPU占用主要集中在0.1~3.0ms范圍內(5%~95%),堆內存累積分配6.6MB;UGUI模塊總體在紅米2上的CPU占用主要集中在0.4~4.2ms范圍內(5%~95%),堆內存累積分配4.98MB。
NGUI:
?
UGUI:
?
?
?
從上圖中可以看出,雖然UI模塊的持續CPU占用不高,但存在離散的CPU占用高值。通過進一步分析,這些均為UI界面的Active和Deactive操作所致。下圖為主UI界面和戰斗副本中UI元素的具體Active情況。
NGUI:
?
UGUI:
?
?
我們建議研發團隊可以根據不同的UI界面使用頻率,來嘗試以下方案:
1.如果該UI界面開啟的頻率很低,那么可直接通過Instantiate/Destroy來進行切換;
2.如果該UI界面使用的頻率較為頻繁,那么可嘗試通過Active/Deactive來代替Instantiate/Destroy操作,從而降低UI切換時的性能開銷;
3.如果該UI界面使用非常頻繁,則可嘗試直接改變UI界面位置的方式來移進/移出相機視域體,從而來極大提升UI界面的切換效率。
因此,如果您項目中的UI開銷出現了很高的離散CPU占用,那么建議您通過報告中的“資源管理”頁面詳細定位Instantiate/Destroy或者Active/Deactive的UI元素,并根據上述方案進行針對性的完善。
5) Instantiate實例化
目前,游戲的戰斗副本中Instantiate實例化的頻率很低,這說明研發團隊對于GameObject的緩存操作非常注意,且進行了大量的試驗和完善。下圖則是游戲運行過程中,戰斗副本中發現的Object實例化調用情況。該圖表您可以在UWA測評報告中的“資源實例化/激活”頁面中進行查看。
?
如果您的項目中存在較為頻繁的Instantiate調用,我們的建議如下:
1.對于一般的GameObject(比如技能特效、怪物角色等),可將其放入緩存池并通過Active/Deactive來進行切換;
2.對于使用頻率較高的UI界面,則可通過直接改變Transform的方式來移進移出相機視域體,可以得到更加高效的性能。
________________________________________
內存模塊
《聚爆Implosion》在內存上的表現如下圖所示。總內存峰值達到191MB,Mono堆內存峰值為13.7MB,且內存在游戲運行過程中表現較為平穩。
?
1) Mono堆內存
從上圖可知,該游戲的總體Mono堆內存控制得非常好,在16000+幀中,Mono的堆內存峰值僅為 13.7MB,該值屬于合理范圍之內(<40MB)。
?
如此少量的Mono堆內存分配,主要得益于項目中函數堆內存分配控制得當,下圖為當前游戲運行16000+幀的函數堆內存分配情況。因此,建議大家對函數代碼堆內存的分配進行嚴格控制,對于堆內存分配較高(10000幀10MB+)的函數進行詳細定位其分配原因。在UWA測評報告中,我們提供了堆內存分配Top10的具體堆棧,以方便大家盡快地定位堆內存分配出處。
?
2) 資源內存
經過統計,該游戲的紋理資源數量峰值為364個,QQ賬號購買平臺內存占用峰值80.8MB。在全部紋理資源中,ETC1格式紋理占有145個,Alpha8格式紋理占有6個,RGBA32和ARGB32格式紋理共占有59個,RGB24格式紋理占有16個,其余為RGBA16格式紋理。
對于RGBA32、ARGB32和RGB24格式的紋理,我們建議在視覺效果可以保證的情況下,盡可能使用ETC1格式紋理(Android平臺)進行替換,不僅可以達到更小的內存占用,同時可以獲得更快的加載效率。對于紋理資源的加載效率,我們在之前的加載模塊深度解析之紋理篇中進行了詳細的分析和闡述,建議大家進一步查看,以加深加載模塊的掌控能力。
3) 其他資源的內存占用情況如下:
Mesh資源:
?
?
AnimationClip資源:
?
AudioClip資源:
?
以上則為《聚爆Implosion》游戲在CPU性能和內存管理方面的具體使用情況。優秀的CPU性能、超低的堆內存分配以及引擎模塊間的合理使用,足以看出該研發團隊非常深厚的技術功底和對于引擎相當優秀的把控能力。
最后,非常感謝《聚爆Implosion》研發團隊對 UWA 的認可和支持。感謝他們樂于將項目性能數據與大家一起分享,讓更多的研發團隊了解到一款性能優秀的3D ARPG游戲在各個模塊上應該做到怎樣的程度。同時,也希望更多的開發團隊與我們一起來分享他們的性能數據,讓更多的游戲開發者受益!
總結
以上是生活随笔為你收集整理的《聚爆Implosion》性能精析:这是我们测过性能最棒的手游的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技能模块的防外挂机制和同步机制优化
- 下一篇: 用行为树的方式思考:任务系统设计