Quantcast
Channel: 英特尔开发人员专区文章
Viewing all articles
Browse latest Browse all 583

Premium VR 游戏的测试与分析:第一部分

$
0
0

作者:Peng Tao

前言

目前VR设备基于处理能力和体验效果可以分为Premium VR、Mainstream VR 以及 Entry-Lever VR. Premium VR 代表的是高端 VR,这类产品以高配置、性能非常好的 PC 或者游戏主机为基础,目前市场上支持此类型VR的外设主要提供商是HTC Vive,Oculus Rift和Sony PS VR。Mainstream VR代表是性能达不到高端VR的硬件处理能力,但是还是PC处理器为计算能力的VR设备。入门级的VR是包括所有的移动VR设备,例如 Gear VR,也S包括利用手机芯片作为计算设备的VR眼镜和一体机。

本文主要讲基于PC的Vive和Rift的游戏测试和分析方法。VR游戏相对传统PC游戏主要有三个方面的不同:玩法设计,输入方式,性能要求。因为玩法和输入不在本文考虑的范围内,所以来看看性能要求方面和传统游戏的区别,为了防止VR游戏带来的不适感,头盔厂商都要求帧率稳定达到90FPS。因为目前HTC VIVE和Oculus Rift CV1的分辨率都是2160*1200,除了账面分辨率之外,实际渲染时为抵消透镜畸变带来的分辨率损失需要超采样,Oculus Rift CV1和HTC Vive都为140%,所以VR的每秒像素处理量达到惊人的457millions。因此,要达到如此之高的要求,性能测试和分析是VR游戏不得不考虑的一个环节,以保证充分利用所有的CPU和GPU的处理能力。那么一般是如何测试和分析VR游戏的呢?

在测试之前,Oculus需要关闭Asynchronous Spacewarp,SteamVR需要关闭reprojection,以免VR Runtime补偿介入影响到后面的性能分析。

打开Oculus SDK Program Files\Oculus\Support\oculus-diagnostics\OculusDebugTool.exe 可以disable ASW。


图 1.ASP配置

SteamVR可以在setting/performance 里disable reprojection功能。


图 2.Steam VR 配置

工具介绍

工欲善其事必先利其器,工具在VR游戏的测试分析中能起到至关重要的作用。在测试和分析过程中主要用的工具有:Fraps, 游戏加加,UE console command, Windows Assessment Development Kit (ADK),Steam VR Frame Timing,GPA 等.

Fraps是个传统的测试FPS/frametime的工具,可以用这个工具测试一段时间的最大帧率,最小帧率和平均帧率,并且很方便地导入到excel文件生成图形,如下图所示,从图形中可以大致看出游戏整个过程的帧率变化是否平滑。而且,这个工具也很方便截图,将有问题的画面保存下来以方便汇报给ISV确认。


图 3.FPS显示一段时间内游戏的帧率变化


表 1.Fraps生成的一段时间内游戏的帧率变化的最大帧率,最小帧率和平均帧率

上面的数据来看,此游戏在此段场景下大部分时间帧率比较低,只有大概45FPS,完全达不到HTC的要求,在这种性能下,玩家也会感觉到头晕症状。这个时候我们可以用Windows Assessment Development Kit (ADK) 里面的GPUVIEW 来分析下是GPU还是CPU方面的问题。

Fraps是一个国外的小而美共享软件,但是目前很久没有更新,国内也有一个类似的benchmark软件游戏加加。运行时这个工具窗口会自动的吸附在游戏窗口上面,可以实时显示帧数FPS、CPU温度、CPU占用率、显卡温度、显存使用情况、显卡占用率等,如下图所示。另外fraps也不能测试dx12的游戏,不过可以用另外一个工具PresentMon来统计FPS数据。


图 4.游戏加加的实时数据显示界面

通过贴在游戏上面的框可以实时地了解到游戏的更具体运行情况,但是不管是Frasp还是游戏加加都是为传统游戏而设计的工具,只能在显示器上显示,而VR游戏玩家都是戴着头盔,并不能实时看到显示器上游戏的数据变化,所以也不能定位到具体哪个场景需要优化,如果要在头盔里看实时的性能数据怎么办呢?有两个方法可以看到,一是如果此游戏是基于Unreal Engine的话可以用console command “stat FPS”。另外一个方法是通过Steam VR frame timing方法,可以在头盔和显示器均看到实时性能数据。

Steam VR frame timing的设置方式可参考链接:https://developer.valvesoftware.com/wiki/SteamVR/Frame_Timing

下图显示的是Steam VR frame timing的数据:


图 5.HDM中显示掉帧的情况

当游戏的场景帧率出现掉帧的时候,在HDM上就会显示Missed Frames框,出现红色的竖条,上面这个场景就出现了掉帧的情况,而且红色竖条密度越高,掉帧的频率就越高。


图 6.PC上显示CPU和GPU的运行情况

上面是在PC显示器上显示的更详细数据,当然也可以点击上面show in headset来显示在HDM中,这个图里蓝色部分显示的是GPU的渲染时间,other的棕色部分是GPU的空闲时间,上图可以看出,有些帧的GPU的渲染超过11.11毫秒,会错过Vsync的时间导致掉帧,所以这些帧达不到90FPS。从这个工具我们可以初略地认识GPU bound,但是并不能确定是否是CPU render 线程没有及时给渲染命令导致GPU有Bubble还是GPU渲染的时间过长。

通过UE 的console command 工具也可以查看实时的游戏性能数据,不过前提条件是游戏必须是用UE引擎开发,同时是开发版本,而不是release版本。在游戏运行中按~键可以调出命令行。几个常用的命令如下:

  • Stat FPS:显示游戏每帧的FPS和帧时,这个命令很方便在VR里使用,因为帧率可以在VR头盔上显示。方便测试人员在使用中观察游戏实时性能。
  • Stat Unit:显示游戏每帧的总时间,游戏逻辑线程耗时,游戏渲染线程耗时和GPU耗时。一般来说,如果一帧花的时间跟逻辑线程的时间比较接近,那么瓶颈在逻辑线程,相反如果跟渲染线程的时间比较接近,那么瓶颈在渲染线程。如果两个时间 都不接近,但跟GPU时间比较接近,那么瓶颈在显卡上。


图 7.stat Uint显示内容

Stat SceneRendering:查看游戏渲染线程上的各个参数值。


图 8.stat SceneRendering显示内容

Stat Game:实时查看运行在游戏逻辑线程上的参数值,比如AI,物理,蓝图,内存分配等。


图 9.Stat Game显示内容

Stat GPU:实时显示每一帧里GPU主要渲染内容的时间参数。


图 10.stat GPU显示内容

Stat InitViews:显示culling花费的时间和效率数据。


图 11.stat initview显示内容

Stat LightRendering:显示灯光和阴影所需的渲染时间


图 12.stat lightrendering显示内容

当然还有其他很多的命令,如stat AI,stat Particles,可以参考官方网站:
https://docs.unrealengine.com/udk/Three/ConsoleCommands.html
https://docs.unrealengine.com/latest/INT/Engine/Performance/StatCommands/

点击访问Premium VR 游戏的测试与分析:第二部分


Viewing all articles
Browse latest Browse all 583

Latest Images

Trending Articles

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>