這也許是,全球第一篇VR游戲的深度性能測評報告

?? 由 文心大模型 生成的文章摘要

今天我們?yōu)榇蠹規(guī)碛缮虾P菫槠逖邪l(fā)的VR游戲《Space Agent》的性能測評分析報告。作為國內(nèi)為數(shù)不多的VR游戲之一,該游戲目前已經(jīng)登錄Gear VR平臺。
這是一款性能優(yōu)秀的飛行模擬類VR游戲,同時其游戲運行時也具有相當不錯的舒適感。在我們真機測試的十幾分鐘內(nèi),并沒有感到任何的“暈動”癥狀(Motion Sickness)。在此,我們將對該款游戲的性能數(shù)據(jù)進行深度剖析,希望通過這篇文章可以讓大家對Gear VR游戲的運行性能有更為深刻的認知,并對大家的VR項目研發(fā)有所幫助。

該游戲在CPU占用方面的性能非常不錯,下圖為該游戲在 三星S6 上的CPU占用情況,可以看出,在三星S6上運行的33751幀中,超過10ms的幀數(shù)占比為17%,超過16ms的幀數(shù)占比為1%。


其整體CPU性能的優(yōu)秀表現(xiàn)與其各個模塊的合理使用是分不開的。下面,我們就詳細剖析一下其CPU性能方面的亮點之處。

1. 渲染模塊
該游戲在三星S6設(shè)備上運行時的渲染模塊CPU開銷如下圖所示。通過統(tǒng)計,半透明物體渲染的CPU消耗均值為 1.6 ms,主要集中在 0.7~6.1ms 范圍內(nèi)(5%~95%)。不透明物體渲染的CPU消耗均值為 1.0 ms,主要集中在 0.5~1.4ms范圍內(nèi)(5%~95%)。Draw Call峰值為 153,且主要集中在 65~125 范圍內(nèi)(5%~95%)。

由上圖可知,游戲渲染的相關(guān)參數(shù)基本均控制在合理范圍之內(nèi)。當然,美中不足的是,游戲場景中的三角面片數(shù)量較大,峰值為236100,該值稍高。對于Gear VR平臺,一般我們建議將其控制在20萬面片以內(nèi)。同時,半透明渲染耗時存在瞬間增高的情況,如下圖所示。對其進行進一步分析,發(fā)現(xiàn)其瞬間增高的情況均為粒子系統(tǒng)渲染所致,且主要在主UI界面出現(xiàn)處。這樣,研發(fā)團隊在后續(xù)過程中,對主UI界面處的粒子系統(tǒng)進行進一步的控制,即可大大降低粒子系統(tǒng)的渲染開銷,從而進一步提升渲染性能。

 ● 如果你發(fā)現(xiàn)了自己的項目中,半透明渲染存在較高的性能開銷,那么你需要進一步分析以下兩種情況:
(1)場景中是否存在半透明較多的GameObject,比如樹葉、花草、UI界面等;
(2)查看粒子系統(tǒng)的渲染開銷。一般來說,半透明渲染的性能開銷,無外乎這兩種情況。

 ● 如果你的項目也遇到了場景網(wǎng)格面片數(shù)較高的情況。我們建議可以嘗試一些網(wǎng)格資源簡化的工具,比如Asset Store上的SimpleLOD插件
 

 2. GC調(diào)用
在測試過程中,GC的調(diào)用頻率很低。游戲在三星S6上運行33000+幀時,共檢測到GC調(diào)用5次,平均6750幀/次。


GC調(diào)用頻率如此之低,主要得益于函數(shù)的堆內(nèi)存的少量分配。下圖即為游戲運行過程中,其函數(shù)的具體堆內(nèi)存分配情況。

重要提示:盡最大可能降低函數(shù)堆內(nèi)存的分配,然后你會發(fā)現(xiàn),GC將離你的項目越來越遠!
 

3. 動畫模塊
該游戲在三星S6設(shè)備上運行時的動畫模塊CPU開銷如下圖所示。通過統(tǒng)計,動畫模塊總體的CPU占用均值為0.6 ms,主要集中在0.4~0.7ms范圍內(nèi)(5%~95%),該值處于合理范圍之內(nèi)(一般建議在3ms以下)。

4. UI模塊
該游戲在三星S6設(shè)備上運行時的UI模塊CPU開銷如下圖所示。通過統(tǒng)計,UI模塊總體的CPU占用均值為0.4 ms,主要集中在0.1~0.5ms范圍內(nèi)(5%~95%),為該值處于合理范圍之內(nèi)(一般建議在3ms以下)。同時,累積堆內(nèi)存分配總量為71.5KB,該值很低,說明游戲運行過程中UI界面的操作并沒有引起UI網(wǎng)格的重建。


 ◆◆◆內(nèi)存模塊
《Space Agent》在內(nèi)存上的表現(xiàn)同樣突出,如下圖所示??們?nèi)存峰值為127MB,Mono堆內(nèi)存峰值為7.3MB,且內(nèi)存的升降較為一致。

1. Mono堆內(nèi)存
從上圖可知,該游戲的總體Mono堆內(nèi)存控制得很好,在33751幀中,Mono的堆內(nèi)存峰值僅為 7.3MB。該值屬于合理范圍之內(nèi)(<40MB)。

2. 資源內(nèi)存
經(jīng)過統(tǒng)計,該游戲的紋理資源數(shù)量峰值為139個,內(nèi)存占用峰值6.5MB。內(nèi)存占用之所以可以做到如此之小,得益于游戲中大量使用了ASTC格式的紋理資源。ASTC技術(shù)為ARM Mali的高端GPU所硬件支持的“自適應(yīng)可伸縮紋理壓縮技術(shù)”,不僅支持HDR,同時也支持3D紋理。該紋理格式可以在保證視覺質(zhì)量的前提下,達到更大的紋理壓縮比。在Space Agent所使用的全部紋理資源中,ASTC格式紋理有116個,Alpha8格式紋理有8個,ARGB32和RGBA32格式資源數(shù)共有15個。

重要提示:目前支持的Gear VR的主流設(shè)備為三星Note5、三星S6和S6 Edge。這些機器目前均使用Mali GPU,所以對于專注于Gear VR平臺的VR游戲團隊可嘗試盡可能使用ASTC紋理格式。當然,如果需要支持過多的移動VR設(shè)備,ETC2也是不錯的選擇。
 

3. 其他資源的內(nèi)存占用情況如下:Mesh資源稍大:UWA建議盡可能控制在20MB以內(nèi)。建議嘗試通過一些網(wǎng)格資源簡化的工具來對場景網(wǎng)格進行進一步簡化。


同時,我們也看到網(wǎng)格資源中存在19個網(wǎng)格擁有Color屬性,72個資源擁有Tangent屬性。一般來說,僅有較為復雜的Shader才會使用這些屬性,所以研發(fā)團隊需要對擁有這些頂點屬性的資源進行進一步檢測,明確其是否確實需要。

重要提示:多余的頂點屬性可能會在Draw Call Batching時為你帶來大量不必要的內(nèi)存占用,擁有不同頂點屬性的網(wǎng)格資源,一般不建議拼合成一個網(wǎng)格。
 

AnimationClip資源: 

以上則為《Space Agent》在CPU性能和內(nèi)存管理方面的具體使用情況。優(yōu)秀的CPU性能,較低的總體內(nèi)存和堆內(nèi)存分配,以及合理的資源使用,足以說明該研發(fā)團隊具備非常深厚的技術(shù)功底和對于引擎相當優(yōu)秀的把控能力。
◆◆◆
設(shè)備溫度

設(shè)備溫度是我們在分析VR應(yīng)用性能數(shù)據(jù)中非常看重的一塊。不同于移動游戲,目前的Gear VR(或移動VR)方面,設(shè)備的發(fā)熱量是一個相當難纏的問題。每秒60幀的CPU更新頻率、工作量幾乎翻倍的Graphics Pipeline(雖然Unreal和Unity都已經(jīng)將Culling、Shadowmap的計算,但Draw Call、底層Graphics API Call和State切換等等均基本為2倍),讓即便是高端如三星S6的手機,也可以在短時間內(nèi)迅速升溫。手游中的發(fā)熱量也是一個大家頭疼的問題,但與移動VR相比,簡直是“小巫見大巫”。下圖為《Space Agent》在測試過程中,三星S6的設(shè)備溫度變化情況??梢钥闯鲈跍y試的十分鐘過程中,設(shè)備溫度上升了8度(36度~44度)。對此,強烈建議正在Gear VR設(shè)備上進行應(yīng)用開發(fā)的團隊時刻注意設(shè)備的溫度升溫情況。

為什么我們要如此關(guān)注設(shè)備溫度? 
因為現(xiàn)在的移動設(shè)備在溫度高于一定值之后,出于保護等原因,硬件設(shè)備會自動降頻,下圖則為硬件設(shè)備溫度過高后,運行頻率從60fps被強制降為30fps。這將極大地影響VR應(yīng)用的體驗感受。

如何延緩設(shè)備升溫呢? 

來使用 UWA 吧,根據(jù)測評分析報告定位性能瓶頸。然后根據(jù)我們的分析和建議,優(yōu)化你能優(yōu)化的一切!
 

以上則為該項目在性能方面的具體數(shù)據(jù)分析。在我們測評過的項目中,這些方面也是絕大多數(shù)VR研發(fā)團隊遇到的共性問題。希望以上的講解對大家的相關(guān)問題有所幫助。