1. 程式人生 > >這也許是,全球第一篇VR遊戲的深度效能測評報告

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

今天我們為大家帶來由上海星為棋研發的VR遊戲《Space Agent》的效能測評分析報告。作為國內為數不多的VR遊戲之一,該遊戲目前已經登入Gear VR平臺。

這是一款效能優秀的飛行模擬類VR遊戲,同時其遊戲執行時也具有相當不錯的舒適感。在我們真機測試的十幾分鍾內,並沒有感到任何的“暈動”症狀(Motion Sickness)。在此,我們將對該款遊戲的效能資料進行深度剖析,希望通過這篇文章可以讓大家對Gear VR遊戲的執行效能有更為深刻的認知,並對大家的VR專案研發有所幫助。

CPU效能

該遊戲在CPU佔用方面的效能非常不錯,下圖為該遊戲在三星S6上的CPU佔用情況,可以看出,在三星S6上執行的33751幀中,超過10ms的幀數佔比為17%,超過16ms的幀數佔比為1%。

UWA Tech Doc

其整體CPU效能的優秀表現與其各個模組的合理使用是分不開的。下面,我們就詳細剖析一下其CPU效能方面的亮點之處。

1. 渲染模組

該遊戲在三星S6裝置上執行時的渲染模組CPU開銷如下圖所示。通過統計,半透明物體渲染的CPU消耗均值為1.6 ms,主要集中在0.7~6.1ms範圍內(5%~95%)。不透明物體渲染的CPU消耗均值為1.0 ms,主要集中在0.5~1.4ms範圍內(5%~95%)。Draw Call峰值為153,且主要集中在65~125範圍內(5%~95%)。

UWA Tech Doc

由上圖可知,遊戲渲染的相關引數基本均控制在合理範圍之內。當然,美中不足的是,遊戲場景中的三角面片數量較大,峰值為236100,該值稍高。對於Gear VR平臺,一般我們建議將其控制在20萬面片以內。同時,半透明渲染耗時存在瞬間增高的情況,如下圖所示。對其進行進一步分析,發現其瞬間增高的情況均為粒子系統渲染所致,且主要在主UI介面出現處。這樣,研發團隊在後續過程中,對主UI介面處的粒子系統進行進一步的控制,即可大大降低粒子系統的渲染開銷,從而進一步提升渲染效能。

UWA Tech Doc

如果你發現了自己的專案中,半透明渲染存在較高的效能開銷,那麼你需要進一步分析以下兩種情況:
(1)場景中是否存在半透明較多的GameObject,比如樹葉、花草、UI介面等;
(2)檢視粒子系統的渲染開銷。一般來說,半透明渲染的效能開銷,無外乎這兩種情況。

如果你的專案也遇到了場景網格面片數較高的情況。我們建議可以嘗試一些網格資源簡化的工具,比如Asset Store上的SimpleLOD外掛,可以通過我們之前的文章《好外掛讓你事半功倍》檢視其詳細的功能介紹。

2. GC呼叫

在測試過程中,GC的呼叫頻率很低。遊戲在三星S6上執行33000+幀時,共檢測到GC呼叫5次,平均6750幀/次。

UWA Tech Doc

GC呼叫頻率如此之低,主要得益於函式的堆記憶體的少量分配。下圖即為遊戲執行過程中,其函式的具體堆記憶體分配情況。

UWA Tech Doc

重要提示:盡最大可能降低函式堆記憶體的分配,然後你會發現,GC將離你的專案越來越遠!

3. 動畫模組

該遊戲在三星S6裝置上執行時的動畫模組CPU開銷如下圖所示。通過統計,動畫模組總體的CPU佔用均值為0.6 ms,主要集中在0.4~0.7ms範圍內(5%~95%),該值處於合理範圍之內(一般建議在3ms以下)。

UWA Tech Doc

4. UI模組

該遊戲在三星S6裝置上執行時的UI模組CPU開銷如下圖所示。通過統計,UI模組總體的CPU佔用均值為0.4 ms,主要集中在0.1~0.5ms範圍內(5%~95%),為該值處於合理範圍之內(一般建議在3 ms以下)。同時,累積堆記憶體分配總量為71.5KB,該值很低,說明遊戲執行過程中UI介面的操作並沒有引起UI網格的重建。

UWA Tech Doc

記憶體模組

《Space Agent》在記憶體上的表現同樣突出,如下圖所示。總記憶體峰值為127MB,Mono堆記憶體峰值為7.3MB,且記憶體的升降較為一致。

UWA Tech Doc

1. Mono堆記憶體

從上圖可知,該遊戲的總體Mono堆記憶體控制得很好,在33751幀中,Mono的堆記憶體峰值僅為7.3MB。該值屬於合理範圍之內(<40MB)。

UWA Tech Doc

2. 資源記憶體

經過統計,該遊戲的紋理資源數量峰值為139個,記憶體佔用峰值6.5MB。記憶體佔用之所以可以做到如此之小,得益於遊戲中大量使用了ASTC格式的紋理資源。ASTC技術為ARM Mali的高階GPU所硬體支援的“自適應可伸縮紋理壓縮技術”,不僅支援HDR,同時也支援3D紋理。該紋理格式可以在保證視覺質量的前提下,達到更大的紋理壓縮比。在Space Agent所使用的全部紋理資源中,ASTC格式紋理有116個,Alpha8格式紋理有8個,ARGB32和RGBA32格式資源數共有15個

UWA Tech Doc

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

3. 其他資源的記憶體佔用情況如下:

Mesh資源稍大:
UWA Tech Doc

UWA建議儘可能控制在20MB以內。建議嘗試通過一些網格資源簡化的工具來對場景網格進行進一步簡化。

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

重要提示:多餘的頂點屬性可能會在Draw Call Batching時為你帶來大量不必要的記憶體佔用,擁有不同頂點屬性的網格資源,一般不建議拼合成一個網格。

AnimationClip資源:

UWA Tech Doc

以上則為《Space Agent》在CPU效能和記憶體管理方面的具體使用情況。優秀的CPU效能,較低的總體記憶體和堆記憶體分配,以及合理的資源使用,足以說明該研發團隊具備非常深厚的技術功底和對於引擎相當優秀的把控能力。

裝置溫度

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

UWA Tech Doc

為什麼我們要如此關注裝置溫度?
因為現在的移動裝置在溫度高於一定值之後,出於保護等原因,硬體裝置會自動降頻,下圖則為硬體裝置溫度過高後,執行頻率從60fps被強制降為30fps。這將極大地影響VR應用的體驗感受。

UWA Tech Doc

如何延緩裝置升溫呢?
來使用 UWA 吧,根據測評分析報告定位效能瓶頸。然後根據我們的分析和建議,優化你能優化的一切!

以上則為該專案在效能方面的具體資料分析。在我們測評過的專案中,這些方面也是絕大多數VR研發團隊遇到的共性問題。希望以上的講解對大家的相關問題有所幫助。

最後,非常感謝《Space Agent》研發團隊對 UWA 的認可和支援。感謝他們樂於將專案效能資料與大家一起分享,讓更多的VR研發團隊瞭解到一款效能優秀的移動VR遊戲在各個模組上應該做到怎樣的程度。同時,也希望更多的開發團隊可以與我們一起來分享他們的效能資料,讓更多的VR遊戲/應用開發者受益!