摘要:《Space Agent》是一款性能优秀的飞行模拟类VR游戏,同时其游戏运行时也具有相当不错的舒适感。在我们真机测试的十几分钟内,并没有感到任何的“晕动”症状(Motion Sickness)。在此,我们将对该款游戏的性能数据进行深度剖析,希望通过这篇文章可以让大家对Gear VR游戏的运行性能有更为深刻的认知,并对大家的VR项目研发有所帮助。

今天我们为大家带来由上海星为棋研发的VR游戏《Space Agent》的性能测评分析报告。作为国内为数不多的VR游戏之一,该游戏目前已经登录Gear VR平台。

该游戏在CPU占用方面的性能非常不错,下图为该游戏在 三星S6 上的CPU占用情况,可以看出,在三星S6上运行的33751帧中,超过10ms的帧数占比为17%,超过16ms的帧数占比为1%

其整体CPU性能的优秀表现与其各个模块的合理使用是分不开的。下面,我们就详细剖析一下其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%)。

由上图可知,游戏渲染的相关参数基本均控制在合理范围之内。当然,美中不足的是,游戏场景中的三角面片数量较大,峰值为236100,该值稍高。对于Gear VR平台,一般我们建议将其控制在20万面片以内。同时,半透明渲染耗时存在瞬间增高的情况,如下图所示。对其进行进一步分析,发现其瞬间增高的情况均为粒子系统渲染所致,且主要在主UI界面出现处。这样,研发团队在后续过程中,对主UI界面处的粒子系统进行进一步的控制,即可大大降低粒子系统的渲染开销,从而进一步提升渲染性能。

● 如果你发现了自己的项目中,半透明渲染存在较高的性能开销,那么你需要进一步分析以下两种情况:

(1)场景中是否存在半透明较多的GameObject,比如树叶、花草、UI界面等;
(2)查看粒子系统的渲染开销。一般来说,半透明渲染的性能开销,无外乎这两种情况。

● 如果你的项目也遇到了场景网格面片数较高的情况。我们建议可以尝试一些网格资源简化的工具,比如Asset Store上的SimpleLOD插件

2. GC调用
在测试过程中,GC的调用频率很低。游戏在三星S6上运行33000+帧时,共检测到GC调用5次,平均6750帧/次。

GC调用频率如此之低,主要得益于函数的堆内存的少量分配。下图即为游戏运行过程中,其函数的具体堆内存分配情况。

要提示:尽最大可能降低函数堆内存的分配,然后你会发现,GC将离你的项目越来越远!

3. 动画模块
该游戏在三星S6设备上运行时的动画模块CPU开销如下图所示。通过统计,动画模块总体的CPU占用均值为0.6 ms,主要集中在0.4~0.7ms范围内(5%~95%),该值处于合理范围之内(一般建议在3ms以下)。

4. UI模块
该游戏在三星S6设备上运行时的UI模块CPU开销如下图所示。通过统计,UI模块总体的CPU占用均值为0.4 ms,主要集中在0.1~0.5ms范围内(5%~95%),为该值处于合理范围之内(一般建议在3ms以下)。同时,累积堆内存分配总量为71.5KB,该值很低,说明游戏运行过程中UI界面的操作并没有引起UI网格的重建。

内存模块

 《Space Agent》在内存上的表现同样突出,如下图所示。总内存峰值为127MB,Mono堆内存峰值为7.3MB,且内存的升降较为一致。

1. Mono堆内存
从上图可知,该游戏的总体Mono堆内存控制得很好,在33751帧中,Mono的堆内存峰值仅为 7.3MB。该值属于合理范围之内(<40MB)。
2. 资源内存
经过统计,该游戏的纹理资源数量峰值为139个,内存占用峰值6.5MB。内存占用之所以可以做到如此之小,得益于游戏中大量使用了ASTC格式的纹理资源。ASTC技术为ARM Mali的高端GPU所硬件支持的“自适应可伸缩纹理压缩技术”,不仅支持HDR,同时也支持3D纹理。该纹理格式可以在保证视觉质量的前提下,达到更大的纹理压缩比。在Space Agent所使用的全部纹理资源中,ASTC格式纹理有116个,Alpha8格式纹理有8个,ARGB32和RGBA32格式资源数共有15个。
重要提示:目前支持的Gear VR的主流设备为三星Note5、三星S6和S6 Edge。这些机器目前均使用Mali GPU,所以对于专注于Gear VR平台的VR游戏团队可尝试尽可能使用ASTC纹理格式。当然,如果需要支持过多的移动VR设备,ETC2也是不错的选择。

3. 其他资源的内存占用情况如下:
Mesh资源稍大:
UWA建议尽可能控制在20MB以内。建议尝试通过一些网格资源简化的工具来对场景网格进行进一步简化。

同时,我们也看到网格资源中存在19个网格拥有Color属性,72个资源拥有Tangent属性。一般来说,仅有较为复杂的Shader才会使用这些属性,所以研发团队需要对拥有这些顶点属性的资源进行进一步检测,明确其是否确实需要。

重要提示:多余的顶点属性可能会在Draw Call Batching时为你带来大量不必要的内存占用,拥有不同顶点属性的网格资源,一般不建议拼合成一个网格。

以上则为《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设备上进行应用开发的团队时刻注意设备的温度升温情况。

为什么我们要如此关注设备温度? 

因为现在的移动设备在温度高于一定值之后,出于保护等原因,硬件设备会自动降频,下图则为硬件设备温度过高后,运行频率从60fps被强制降为30fps。这将极大地影响VR应用的体验感受。

如何延缓设备升温呢? 

来使用 UWA 吧,根据测评分析报告定位性能瓶颈,UWA是游戏/VR应用性能诊断与优化平台,通过真人真机对项目进行测试,提供详尽的性能分析测评报告。

该报告既能从宏观上分析项目运行时的整体趋势,又能深入剖析内存占用和具体资源的使用情况,详细诊断用户代码在项目运行时的效率,帮助研发团队高效定位问题根源,及时对瓶颈问题进行修复。目前,UWA已完美支持主流的发布平台,包括PC, iOS, Android, Oculus Rift, Google Cardboard, Gear VR等,且对所有Unity开发人员开放注册。

 

以上则为该项目在性能方面的具体数据分析。在我们测评过的项目中,这些方面也是绝大多数VR研发团队遇到的共性问题。希望以上的讲解对大家的相关问题有所帮助。