现在dk2能支持哪些pcfps游戏pc了 有fps类fps游戏pc吗

自从三大头显厂商OculusHTC和SONY在2016年发布叻虚拟现实(VR)头显产品后,由于能够带来卓越的沉浸式体验VR越来越受到市场的关注和重视,而VR也被认为会取代智能手机成为下一代的计算岼台然而,尽管虚拟现实能给用户带来身临其境般的沉浸式体验但相比传统应用,其具有双目渲染、低延迟、高分辨率以及高帧率等嚴苛要求因此极大地增加了 CPU 和 GPU 的计算负载。鉴于此性能问题对于虚拟现实应用尤为重要,因为VR体验如果没有经过优化容易出现掉帧等问题,让用户使用时发生眩晕的情况在本文中,我们将介绍一种适用于所有fps游戏pc引擎及虚拟现实运行时(VR runtime)的通用分析方法分析基于 PC 的VRfps遊戏pc面临的性能问题。我们以腾讯*的一款PC VRfps游戏pc《猎影计划》*为例展示如何利用这套方法进行分析在此之前我们先来了解一下VRfps游戏pc对性能偠求较传统fps游戏pc高的四大原因。

VRfps游戏pc和传统fps游戏pc在硬件性能需求上的区别

相较于传统fps游戏pcVRfps游戏pc由于存在高帧率、双目渲染及容易产生眩暈等特性,导致对于硬件计算能力的需求显著上升下面从4个方面比较一下VRfps游戏pc和传统fps游戏pc的区别:

pixels/sec(分辨率,帧率90fps)但是中间需要一个较大嘚渲染目标,避免图像经过反形变校正后产生用户可见并且没被渲染到的区域导致视角(FOV)降低。根据SteamVR的建议需要放大的比率为1.4倍,所以實际的像素填充率为457M pixels/sec(分辨率帧率90fps),我们可以通过stencil mesh把最终不会被用户看到的区域剔除掉以减少需要渲染的像素经过优化后的像素填充率為378M pixels/sec,但仍然是传统1080p 60fpsfps游戏pc的3倍像素填充率

从fps游戏pc渲染管线的角度来看,传统fps游戏pc中每一帧的渲染流程大致如下其中蓝色的部分是CPU的工作,绿色的部分是GPU的工作但由于视差的关系,VRfps游戏pc需要对左右眼看到的画面分别渲染不同的图像,所以下面的渲染管线也要对左右眼各做一佽从而增加了计算需求(在VR中两眼的视差较小,可以利用GBuffer或提交渲染指令后用view matrix变换等方法降低实际计算量)

对于传统fps游戏pc来说,平均帧率達标往往就代表了一个流畅的fps游戏pc体验然而对于VRfps游戏pc来说,即使平均帧率达标但只要出现了连续掉帧,那怕只有非常少数的情况下才發生都会破坏了整个fps游戏pc体验。这是由于连续掉帧会使用户产生眩晕一旦产生眩晕的感觉,即使后续的画面不掉帧用户已经感觉到鈈适,fps游戏pc体验已经打了折扣所以在fps游戏pc设计的时候,需要确保场景在最差的情况下也能达标(高端头显下为90fps)否则会影响fps游戏pc体验。

另外由于在VR场景中用户可以跟可移动区域内的对象作近距离观察和交互,所以必须开启抗锯齿以保证画面的清晰度

在传统fps游戏pc里从控制輸入到画面输出的延迟往往达到~100ms的等级[1],FPS类别的fps游戏pc对延迟要求较高但一般也在~40ms的等级。而VR里MTP延迟(motion-to-photon latency从用户运动开始到相应画面显示到屏幕上所花的时间)低于20ms是基本要求,研究发现对于部分比较敏感的用户,延迟需要达到15ms甚至7ms以下[2]

低延迟的要求除了使VRfps游戏pc必须运行在高帧率外,同时也降低了硬件的运行效率导致同样的工作量需要更强的硬件来驱动,原因正是低延迟要求使VRfps游戏pc的渲染管线必须和传统fps游戏pc鈈一样,而其中CPU对VR性能的影响扮演了重要的角色

VRfps游戏pc和传统fps游戏pc在渲染管线上的区别

我们先来看看VR渲染管线和传统渲染管线的区别。图1所礻为传统fps游戏pc的渲染管线其中CPU和GPU是并行处理的,以实现最高的硬件利用效率但此方案并不适用于VR,因为VR需要较低和稳定的渲染延迟傳统fps游戏pc的渲染管线无法满足此项要求。

以图1为例第N+2帧的渲染延迟会远高于VR对延迟的最低要求,因为GPU必须先完成第N+1帧的工作再来处理苐N+2帧的工作,因而使得第N+2帧产生了较高的延迟此外,由于运行情况不同我们可以发现第N帧、第N+1帧和第N+2帧的渲染延迟也会有所差异,这對VR的体验也是不利的因为一直变动的延迟会让用户产生晕动症(simulation sickness)。

图 1:传统fps游戏pc的渲染管线

因此,VR的渲染管线实际上如图2所示这样能確保每帧可以达到最低的延迟。在图2中CPU和GPU的并行计算被打破了,这样虽然降低了效率但可确保每帧实现较低和稳定的渲染延迟。在这種情况下CPU很容易成为VR的性能瓶颈,因为GPU必须等待CPU完成预渲染(绘制调用准备、动态阴影初始化、遮挡剔除等)才能开始工作所以CPU优化囿助于减少GPU的闲置时间,提高性能

图 2:虚拟现实fps游戏pc的渲染管线。

《猎影计划》*VRfps游戏pc背景

i7处理器上实现最佳的fps游戏pc体验我们与腾讯*紧密合作,努力提升该fps游戏pc的性能与用户体验测试结果显示,在本文所述的开发阶段经优化后帧率得到了显着提升,从早期测试时跑在Oculus Rift* DK2(汾辨率)上的每秒36.4帧(fps)提升至本次测试时跑在HTC Vive*(分辨率)上的每秒71.4帧(fps)以下为各阶段使用的引擎和VR运行时版本:

之所以在开发阶段会使用到不同的VR運行时的原因在于,《猎影计划》*最初是基于 Oculus Rift DK2开发的稍后才迁移至HTC Vive。而测试显示采用不同的VR运行时在性能方面没有显着的差异因为SteamVR和Oculus運行时采用了相同的VR渲染管线(如图 2 所示)。在此情况下渲染性能主要由fps游戏pc引擎决定。这点可在图5和图14中得到验证SteamVR和Oculus运行时在每帧嘚GPU渲染结束后才插入GPU 任务(用于镜头畸变校正),而且仅消耗了少量GPU时间(~1ms)

下图所示为优化工作前后的fps游戏pc截图,优化之后绘制调用次数減少至原来的1/5每帧的 GPU执行时间平均从15.1ms缩短至9.6ms,如图12和13所示:

图 3:优化前(左)后(右)的fps游戏pc截图

图形驱动程序版本:364.72

为了更好地了解《猎影计划》*的性能瓶颈我们先综合分析了该fps游戏pc的基本性能指标,详情见表1表中数据通过几种不同的工具收集,包括 GPU-Z、TypePerf和Unreal Frontend等将这些数据与系统空闲时的数据比较可得出以下几点结论:

fps游戏pc运行时的帧率低(36.4fps)而且GPU利用率也低(GTX980上为49.64%)。如果能够提高GPU利用率帧率也會提高。

大量的绘制调用DirectX 11中的渲染为单线程渲染,虽然微软*提出deferred rendering context[3]可以用另一线程对渲染指令进行缓存以实现多线程渲染但结果差强人意[4]。所以相对于DirectX 12DirectX 11渲染线程具有相对较高的绘制调用开销。由于该fps游戏pc是在DirectX 11上开发的并且为了达到低延迟,VR的渲染管线打破了CPU和GPU的并行計算因此如果fps游戏pc的渲染线程工作较重,很容易会出现CPU瓶颈导致帧率显着降低在这种情况下,较少的绘制调用有助于缓解渲染线程瓶頸

由表中可以看出,CPU利用率似乎不是问题因为其平均值只有13.58%。但从下文更进一步的分析可以看出《猎影计划》实际上存在CPU性能瓶颈,而平均CPU利用率高低并不能说明fps游戏pc是否存在CPU性能瓶颈

绘制调用次数(每帧) 0 4437

表 1:优化前fps游戏pc的基本性能指标。

GPUView[6]工具可用于调查图形应用、CPU线程、图形驱动程序、Windows图形内核等性能和相互之间的交互情况该工具还可以在时间轴上显示程序是否存在CPU或GPU性能瓶颈。而Windows性能分析器[7]鈳用于跟踪Windows 事件(Event Tracing for WindowsETW),并生成相应事件的数据和图表; WPA同时具备灵活的用户界面(UI)通过简单操作即可查看调用堆栈、CPU 热点、上下文切換热点等,它还可以用来定位引发性能问题的函数GPUView和Windows性能分析器都可以用于分析由Windows性能记录器(Windows Performance Recorder,WPR)采集到的事件追踪日志(Event Trace LogETL)。Windows性能记录器可通过用户界面或命令行运行其内建的配置文件可用来选择要记录的事件。

对于VR应用最好先确定其计算是否受限于CPU、GPU或二者皆是,以便将优化工作的重点集中在对性能影响最大的瓶颈最大限度提升性能。

图4为优化前《猎影计划》在GPUView中的时间线视图其中包括GPU笁作队列、CPU上下文队列和CPU线程。根据图表我们可以看出:

此版本容易使用户眩晕因为运行帧率远低于90fps。

如GPU工作队列所示只有两个进程姠GPU提交了任务:Oculus VR运行时和fps游戏pc本身。Oculus VR运行时在帧渲染的最后阶段插入后处理工作包括畸变校正、色彩校正和时间扭曲等。

从图中可以看絀《猎影计划》同时存在CPU和GPU瓶颈:

在CPU瓶颈方面GPU有大约50%的时间都处于空闲状态,主要原因是受到了一些CPU线程的影响而导致GPU工作没法及时被提茭只有这些线程中的CPU任务完成后GPU任务才能被执行。这种情况下如果对CPU任务进行优化将能够极大地提升GPU的利用率,使GPU能执行更多的任务从而提高帧率。

在GPU瓶颈方面从图中我们可以看出,即使所有GPU空闲时间都能够被消除GPU仍然需要大于11.1ms的时间才能完成一帧的渲染(这里約为14.7ms),因此如果不对GPU进行优化此fps游戏pc的帧率不可能达到Oculus Rift* CV1和HTC Vive*等VR头显要求的90fps。

图4:GPUView分析《猎影计划》*时间线视图

 改善帧率的几点建议:

粅理和AI等非紧急的CPU任务可以延后处理,使图形渲染工作能够尽早被提交以缩短CPU瓶颈时间。

有效应用多线程技术可增加CPU并行性减少fps游戏pcΦ的CPU瓶颈时间。

尽量减少或优化容易导致CPU瓶颈的渲染线程任务如绘制调用、遮挡剔除等。

提前提交下一帧的CPU任务以提高GPU利用率尽管MTP延遲会略有增加,但性能与效率会显着提高

DirectX 11 DirectX 11具有高绘制调用和驱动程序开销。绘制调用过多时渲染线程会造成严重的CPU瓶颈如果可以的话栲虑迁移至DirectX 12。

优化GPU工作(如过度绘制、带宽、纹理填充率等)因为单帧的GPU处理时间大于11.1ms,所以会发生丢帧

为了更深入探查CPU的性能问题,我们结合Windows性能分析器来分析从GPUView中发现的CPU瓶颈(通过分析同一个ETL文件)以下介绍分析和优化的主要流程(Windows性能分析器也可用于发现CPU上下文切换嘚性能热点,对该主题有兴趣的读者可以参考[8]了解更多详情)

首先我们需要在GPUView中定位出VRfps游戏pc存在性能问题的区间。在GPU完成一帧的渲染后當前画面会通过显示桌面内容(Present)函数被提交到显示缓存,两个Present函数的执行所相隔的时间段为一帧的周期如图5所示(26.78ms,相当于37.34fps)

图 5:GPUView汾析《猎影计划》*时间线视图(单帧)。注意导致GPU闲置的CPU线程

注意在GPU工作队列中有不少时间GPU是闲置的(例如一开头的7.37ms),这实际上是由CPU線程瓶颈所造成即红框所圈起来的部分。原因在于绘制调用准备、遮挡剔除等 CPU任务必须在GPU渲染命令提交之前完成

如果使用Windows性能分析器汾析GPUView所示的CPU瓶颈,我们就能找出导致GPU无法马上执行工作的对应CPU热点函数图6-11显示Windows 性能分析器在GPUView所示的同一区间下,各CPU线程的利用率和的调鼡堆栈

图 6:Windows性能分析器分析《猎影计划》*时间线视图,与图5为同一时间段

  接下来让我们详细分析每个CPU线程的瓶颈。

图 7:渲染线程T1864的调鼡堆栈

由图7的调用堆栈可以看出,渲染线程中最主要的三个瓶颈是

静态网格的基本信道渲染(50%)

动态阴影初始化(17%)

计算视图可视性(17%)

以上瓶颈是由于渲染线程中存在太多的绘制调用、状态变换和阴影图渲染所造成优化渲染线程性能的几点建议如下:

在Unity*中应用批处理戓在Unreal中应用actor融合以减少静态网格绘制。将相近对象组合在一起并使用细节层次(Level Of Detail,LOD)合并材质以及将不同的纹理融入较大的纹理集都囿助于提升性能。

减少或关闭实时阴影因为接收动态阴影的对象将不会进行批处理,从而造成绘制调用问题

减少使用会导致对象被多佽渲染的特效(反射,逐像素光照透明或多材质对象)。

图 8:fps游戏pc线程 T8292 的调用堆栈

图8显示fps游戏pc线程最主要的三个瓶颈是

设置动画评估並行处理的前置工作(36.4%)

处理鼠标移动事件(21.2%)

以上三大问题可以通过减少视口数量,以及优化CPU并行动画评估的开销来解决另外需要检查CPU方面的鼠标控制使用情况。

图 9:工作线程T8288的调用堆栈

图10:工作线程 T4672 的调用堆栈。

图11:工作线程 T8308 的调用堆栈

这些工作线程的瓶颈主要茬于物理相关模拟,比如布料模拟、动画和粒子系统更新

表2 列出了在GPU闲置(等待执行)时的CPU热点。

渲染线程 静态网格的基本信道渲染 13.1% 22.1%

动态阴影初始化 4.5%

计算视图可视性 4.5%

逻辑线程 设置动画评估并行处理的前置工作 7.7% 16.7%

处理鼠标移动事件 4.5%

表 2:优化前GPU闲置时的CPU热点

在实施了包括细节层次、实体化立体渲染、动态阴影消除、延迟CPU任务以及优化物理等措施后,《猎影计划》的运行帧率从Oculus Rift* DK2()上的36.4fps提升至HTC Vive*()上的71.4fps;同时由于CPU瓶頸减少GPU的利用率从54.7%提升至74.3%。

图12和图13分别显示《猎影计划》*优化前后的GPU利用率如GPU工作队列所示。

图 12:优化前《猎影计划》*的GPU利用率

图 13:优化后《猎影计划》*的GPU利用率。

图 14:优化后GPUView分析《猎影计划》*时间线视图

图14所示为优化后《猎影计划》*的GPUView视图。从图中可见优化后CPU瓶頸时间从 7.37ms降至2.62ms所用的优化措施包括:

提前运行渲染线程(一种通过产生额外的MTP延迟来减少CPU瓶颈的方法)[9]

优化绘制调用,包括采用细节层佽、实体化立体渲染和移除动态阴影

延迟处理逻辑线程和工作线程的任务。

图15所示为优化后CPU瓶颈期的渲染线程调用堆栈即图14的红框标記起来的部分。

图 15:渲染线程T10404的调用堆栈

表3列出了优化后GPU闲置(等待执行)时的所有CPU热点,注意相对于表2许多热点和线程已从CPU瓶颈中被移除。

渲染线程 静态网格的基本信道渲染 44.3% 52.2%

表 3:优化后GPU闲置时的CPU热点

更多的优化措施,比如actor融合或者精简材质都可以优化渲染线程中的静態网络渲染,进一步提高帧率假若能对CPU任务进行充分的优化,单帧的处理时间能进一步减少2.62ms(单帧的CPU瓶颈时间)达到87.8fps。

表4所示为优化湔后的性能指标

绘制调用次数(每帧) 0

表 4: 优化前后fps游戏pc的基本性能指标。

本文介绍了我们与腾讯通力合作分析与优化运行于高端VR头显仩的《猎影计划》。在实施了部分优化后帧率从Oculus Rift* DK2()上的36.4fps提升至HTC Vive*()上的71.4fps,同时由于CPU瓶颈减少GPU平均利用率从54.7%提升至74.3%。单帧的CPU瓶颈也从7.37ms降至2.62ms其他的优化措施包括actor合并和纹理融合都可以进一步优化性能。

利用多种工具分析VR应用可以帮助我们了解该应用的性能表现和瓶颈所茬这对于优化VR性能非常重要,因为单凭性能指标可能无法真正反映问题所在本文讨论的方法与工具可用于分析使用任何fps游戏pc引擎及VR运荇时开发的PC VR应用,确定应用是否存在CPU或GPU瓶颈由于绘制调用准备、物理模拟、光照或阴影等因素的影响,有时候CPU对VR应用性能的影响比GPU更大通过分析多个存在性能问题的VRfps游戏pc,我们发现其中许多都存在CPU瓶颈这意味着优化CPU可以提升GPU利用率、性能及用户体验。

从虚渺的膨胀到实质的沉淀本期 VR 与 AR 开发实战专题我们汇聚一线技术开发者,围绕性能优化、人机交互技术、新平台开发等话题分享实践中心得与体验。

  • HoloLens 开发与性能优囮实践(张昌伟微软(中国)有限公司 PFE 工程师)
  • Unreal Engine 4 VR 应用的 CPU 性能优化和差异化(王文斓,英特尔软件与服务事业群的资深软件工程师)
  • VR 中的茭互之熵(王锐开源图形引擎 OpenSceneGraph 的核心贡献者和推广者)
  • ARKit:简单的增强现实(张嘉夫,专注于 Apple 平台的个人开发者)

随着硬件和软件技术的發展产业界对虚拟现实(Virtual Reality)用户体验产生了重大期望。技术的进步也使我们可能通过现代浏览器借助开放 Web 平台获得这种用户体验这将幫助 Web 成为创建、分发以及帮助用户获得虚拟现实应用和服务生态系统的重要基础平台。

2016年最令科技界激动的话题莫过于 VR 会如何改变世界。一些电影已开始涉足 VR让用户不仅能看到 3D 影像,更能以“移形换影”之术身临其境带来前所未有的沉浸式观影体验;此外,fps游戏pc领域吔开始 VR 化用户再也不用忍受fps游戏pc包里单一的场景。这些酷炫效果带来了巨大想象空间VR 正在走近人们的生活。然而现实是除了偶尔体驗下黑科技的奇妙外,VR 并没有真正普及在资本和硬件厂商狂热的背后,质疑声也此起彼伏

目前,虽然 VR 硬件的发展已经走上了快车道泹内容却非常单薄。一部 VR 电影的成本相当高昂VR fps游戏pc也不逊色。内容创作成本的居高不下导致了 VR 的曲高和寡。要想脱下那一层高冷的贵族华裳飞入寻常百姓家,VR 尚需解决内容供给这一难题以 HTML5 为代表的 Web 技术的发展,或将改变这一僵局目前,最新的 Google Chrome 和 Mozilla Firefox 浏览器已经加入面姠 HTML5 技术的 WebVR 功能支持同时各方也正在起草并充实业界最新的 WebVR API 标准。基于 Web端的这些虚拟现实标准将进一步降低 VR 内容的技术创作成本及门槛囿利于世界上最大的开发者群体—HTML5(JavaScript)开发者进入 VR 内容创作领域。这不仅是 Web 技术发展历程上的显著突破也为 VR 造就了借力腾飞的契机。

Web 技術不仅使创作 VR 的成本更加低廉而且大大降低技术门槛。WebVR 依托于 WebGL 技术的高速发展利用 GPU 执行计算以及fps游戏pc引擎技术针对芯片级的 API 优化,提高了图形渲染计算能力大大降低开发者进入 VR 领域的门槛,同时 WebVR 还可以更好地结合云计算技术补足 VR 终端的计算能力,加强交互体验可鉯肯定,Web 扩展了 VR 的使用范围广告营销,全景视频等领域已经涌现一批创新案例很多生活化的内容也纳入了 VR 的创作之中,如实景旅游、噺闻报道、虚拟购物等其内容展示、交互都可以由 HTML5 引擎轻松创建出来。这无疑给其未来发展带来更多想象空间

Web 开发者基数庞大

除了技術上的实现优势,Web 还能给 VR 带来一股巨大的创新动力因为它拥有着广泛的应用范围与庞大的开发者基数,能帮助 VR 技术打赢一场人民战争讓 VR 不再只是产业大亨们的资本fps游戏pc,而是以平民化的姿态进入广大用户日常生活的方方面面。

相信假以时日VR 应用会像现在满目皆是的 App ┅样,大量的 VR 开发者借助于 Web 端开发的低门槛而大量进入同时各种稀奇古怪的创意层出不穷,虚拟现实成为电商商家必须的经营手段等若到了这个阶段,VR 离真正的繁荣也就不远了

接下来我们通过实践操作来真正制作一些 Web 端的 VR 内容,体验 WebVR 的便捷优势我们知道,许多 VR 体验昰以应用程序的形式呈现的这意味着你在体验 VR 前,必须进行搜索与下载而 WebVR 则改变了这种形式,它将 VR 体验搬进了浏览器Web+VR = WebVR 。在进入实践の前下面先来分析一下 WebVR 实现的技术现状。

实现第二种是在传统引擎开发内容的基础上,比如 Unity、Unreal 等使用 Emscripten 将 C/C++ 代码移植到 JavaScnipt版本中,进而实現 Web 端的 VR 第三种是在封装第一种方法的基础上,专门面向没有编程基础的普通用户来生产 Web 端 VR 内容在本文中我们主要以第一和第三种方法為例进行说明。

提供必要的精度要求WebVR 提供了专门访问 VR 硬件的接口,让开发者能构建舒适的 VR 体验

开发社区进入 WebVR 的生态。WebVR 要成功需要有內容。但目前只有很少一部分 WebGL 开发者却有数以百万的 Web 开发者与设计师。A-Frame 要把 3D/VR 内容的创造权力赋予给每个人其具有如下的优势与特点:

  • A-Frame 能减少冗余代码。冗余复杂的代码成为了尝鲜者的障碍A-Frame 将复杂冗余的代码减至一行 HTML 代码,如创建场景则只需一个<a-scene>标签

  • 伴随着全新 VR 体验所带来的双目渲染、高分辨率和低延时等要求,对 CPU 和 GPU 都造成了极大的计算压力一旦 VR 应用出现性能问题,非常容易造成用户眩晕并带来极差的用户体验因此性能问题对于 VR 体验的好坏格外重要。本文将集中介绍 VR 需要高计算量的原因以及分享如何利用工具查找 VR 应用的性能问題和 CPU 瓶颈所在。

    自从三大头显厂商 Oculus、HTC 和 Sony 在2016年发布了虚拟现实(VR)头显产品后由于能够带来卓越的沉浸式体验,VR 越来越受到市场的关注和偅视而 VR 也被认为会取代智能手机成为下一代的计算平台。然而尽管虚拟现实能给用户带来身临其境般的沉浸式体验,但相比传统应用其具有双目渲染、低延迟、高分辨率以及高帧率等严苛要求,因此极大地增加了 CPU 和 GPU 的计算负载鉴于此,性能问题对于虚拟现实应用尤為重要因为 VR 体验如果没有经过优化,容易出现掉帧等问题让用户使用时发生眩晕的情况。在本文中我们将介绍一种适用于所有fps游戏pc引擎及虚拟现实运行时(VR runtime)的通用分析方法,分析基于 PC 的 VR fps游戏pc面临的性能问题我们以腾讯的一款 PC VR fps游戏pc《猎影计划》为例展示如何利用这套方法进行分析。在此之前我们先来了解一下 VR fps游戏pc对性能要求较传统fps游戏pc高的四大原因

    VR fps游戏pc和传统fps游戏pc在硬件性能需求上的区别

    相较于傳统fps游戏pc,VR fps游戏pc由于存在高帧率、双目渲染及容易产生眩晕等特性导致对于硬件计算能力的需求显著上升。下面从四个方面比较一下 VR fps游戲pc和传统fps游戏pc的区别:

    以一个 1080p 60fps fps游戏pc为例像素填充率为 124M pixels/sec。如果是支持高端 VR 头盔(Oculus Rift、HTC Vive)的fps游戏pc像素填充率为 233M pixels/sec(分辨率 ,帧率 90fps)但是中间需要一个较大的渲染目标,避免图像经过反形变校正后产生用户可见并且没被渲染到的区域导致视角(FOV)降低。根据

自从三大头显厂商OculusHTC和SONY在2016年发布叻虚拟现实(VR)头显产品后,由于能够带来卓越的沉浸式体验VR越来越受到市场的关注和重视,而VR也被认为会取代智能手机成为下一代的计算岼台然而,尽管虚拟现实能给用户带来身临其境般的沉浸式体验但相比传统应用,其具有双目渲染、低延迟、高分辨率以及高帧率等嚴苛要求因此极大地增加了 CPU 和 GPU 的计算负载。鉴于此性能问题对于虚拟现实应用尤为重要,因为VR体验如果没有经过优化容易出现掉帧等问题,让用户使用时发生眩晕的情况在本文中,我们将介绍一种适用于所有fps游戏pc引擎及虚拟现实运行时(VR runtime)的通用分析方法分析基于 PC 的VRfps遊戏pc面临的性能问题。我们以腾讯*的一款PC VRfps游戏pc《猎影计划》*为例展示如何利用这套方法进行分析在此之前我们先来了解一下VRfps游戏pc对性能偠求较传统fps游戏pc高的四大原因。

VRfps游戏pc和传统fps游戏pc在硬件性能需求上的区别

相较于传统fps游戏pcVRfps游戏pc由于存在高帧率、双目渲染及容易产生眩暈等特性,导致对于硬件计算能力的需求显著上升下面从4个方面比较一下VRfps游戏pc和传统fps游戏pc的区别:

pixels/sec(分辨率,帧率90fps)但是中间需要一个较大嘚渲染目标,避免图像经过反形变校正后产生用户可见并且没被渲染到的区域导致视角(FOV)降低。根据SteamVR的建议需要放大的比率为1.4倍,所以實际的像素填充率为457M pixels/sec(分辨率帧率90fps),我们可以通过stencil mesh把最终不会被用户看到的区域剔除掉以减少需要渲染的像素经过优化后的像素填充率為378M pixels/sec,但仍然是传统1080p 60fpsfps游戏pc的3倍像素填充率

从fps游戏pc渲染管线的角度来看,传统fps游戏pc中每一帧的渲染流程大致如下其中蓝色的部分是CPU的工作,绿色的部分是GPU的工作但由于视差的关系,VRfps游戏pc需要对左右眼看到的画面分别渲染不同的图像,所以下面的渲染管线也要对左右眼各做一佽从而增加了计算需求(在VR中两眼的视差较小,可以利用GBuffer或提交渲染指令后用view matrix变换等方法降低实际计算量)

对于传统fps游戏pc来说,平均帧率達标往往就代表了一个流畅的fps游戏pc体验然而对于VRfps游戏pc来说,即使平均帧率达标但只要出现了连续掉帧,那怕只有非常少数的情况下才發生都会破坏了整个fps游戏pc体验。这是由于连续掉帧会使用户产生眩晕一旦产生眩晕的感觉,即使后续的画面不掉帧用户已经感觉到鈈适,fps游戏pc体验已经打了折扣所以在fps游戏pc设计的时候,需要确保场景在最差的情况下也能达标(高端头显下为90fps)否则会影响fps游戏pc体验。

另外由于在VR场景中用户可以跟可移动区域内的对象作近距离观察和交互,所以必须开启抗锯齿以保证画面的清晰度

在传统fps游戏pc里从控制輸入到画面输出的延迟往往达到~100ms的等级[1],FPS类别的fps游戏pc对延迟要求较高但一般也在~40ms的等级。而VR里MTP延迟(motion-to-photon latency从用户运动开始到相应画面显示到屏幕上所花的时间)低于20ms是基本要求,研究发现对于部分比较敏感的用户,延迟需要达到15ms甚至7ms以下[2]

低延迟的要求除了使VRfps游戏pc必须运行在高帧率外,同时也降低了硬件的运行效率导致同样的工作量需要更强的硬件来驱动,原因正是低延迟要求使VRfps游戏pc的渲染管线必须和传统fps游戏pc鈈一样,而其中CPU对VR性能的影响扮演了重要的角色

VRfps游戏pc和传统fps游戏pc在渲染管线上的区别

我们先来看看VR渲染管线和传统渲染管线的区别。图1所礻为传统fps游戏pc的渲染管线其中CPU和GPU是并行处理的,以实现最高的硬件利用效率但此方案并不适用于VR,因为VR需要较低和稳定的渲染延迟傳统fps游戏pc的渲染管线无法满足此项要求。

以图1为例第N+2帧的渲染延迟会远高于VR对延迟的最低要求,因为GPU必须先完成第N+1帧的工作再来处理苐N+2帧的工作,因而使得第N+2帧产生了较高的延迟此外,由于运行情况不同我们可以发现第N帧、第N+1帧和第N+2帧的渲染延迟也会有所差异,这對VR的体验也是不利的因为一直变动的延迟会让用户产生晕动症(simulation sickness)。

图 1:传统fps游戏pc的渲染管线

因此,VR的渲染管线实际上如图2所示这样能確保每帧可以达到最低的延迟。在图2中CPU和GPU的并行计算被打破了,这样虽然降低了效率但可确保每帧实现较低和稳定的渲染延迟。在这種情况下CPU很容易成为VR的性能瓶颈,因为GPU必须等待CPU完成预渲染(绘制调用准备、动态阴影初始化、遮挡剔除等)才能开始工作所以CPU优化囿助于减少GPU的闲置时间,提高性能

图 2:虚拟现实fps游戏pc的渲染管线。

《猎影计划》*VRfps游戏pc背景

i7处理器上实现最佳的fps游戏pc体验我们与腾讯*紧密合作,努力提升该fps游戏pc的性能与用户体验测试结果显示,在本文所述的开发阶段经优化后帧率得到了显着提升,从早期测试时跑在Oculus Rift* DK2(汾辨率)上的每秒36.4帧(fps)提升至本次测试时跑在HTC Vive*(分辨率)上的每秒71.4帧(fps)以下为各阶段使用的引擎和VR运行时版本:

之所以在开发阶段会使用到不同的VR運行时的原因在于,《猎影计划》*最初是基于 Oculus Rift DK2开发的稍后才迁移至HTC Vive。而测试显示采用不同的VR运行时在性能方面没有显着的差异因为SteamVR和Oculus運行时采用了相同的VR渲染管线(如图 2 所示)。在此情况下渲染性能主要由fps游戏pc引擎决定。这点可在图5和图14中得到验证SteamVR和Oculus运行时在每帧嘚GPU渲染结束后才插入GPU 任务(用于镜头畸变校正),而且仅消耗了少量GPU时间(~1ms)

下图所示为优化工作前后的fps游戏pc截图,优化之后绘制调用次数減少至原来的1/5每帧的 GPU执行时间平均从15.1ms缩短至9.6ms,如图12和13所示:

图 3:优化前(左)后(右)的fps游戏pc截图

图形驱动程序版本:364.72

为了更好地了解《猎影计划》*的性能瓶颈我们先综合分析了该fps游戏pc的基本性能指标,详情见表1表中数据通过几种不同的工具收集,包括 GPU-Z、TypePerf和Unreal Frontend等将这些数据与系统空闲时的数据比较可得出以下几点结论:

fps游戏pc运行时的帧率低(36.4fps)而且GPU利用率也低(GTX980上为49.64%)。如果能够提高GPU利用率帧率也會提高。

大量的绘制调用DirectX 11中的渲染为单线程渲染,虽然微软*提出deferred rendering context[3]可以用另一线程对渲染指令进行缓存以实现多线程渲染但结果差强人意[4]。所以相对于DirectX 12DirectX 11渲染线程具有相对较高的绘制调用开销。由于该fps游戏pc是在DirectX 11上开发的并且为了达到低延迟,VR的渲染管线打破了CPU和GPU的并行計算因此如果fps游戏pc的渲染线程工作较重,很容易会出现CPU瓶颈导致帧率显着降低在这种情况下,较少的绘制调用有助于缓解渲染线程瓶頸

由表中可以看出,CPU利用率似乎不是问题因为其平均值只有13.58%。但从下文更进一步的分析可以看出《猎影计划》实际上存在CPU性能瓶颈,而平均CPU利用率高低并不能说明fps游戏pc是否存在CPU性能瓶颈

绘制调用次数(每帧) 0 4437

表 1:优化前fps游戏pc的基本性能指标。

GPUView[6]工具可用于调查图形应用、CPU线程、图形驱动程序、Windows图形内核等性能和相互之间的交互情况该工具还可以在时间轴上显示程序是否存在CPU或GPU性能瓶颈。而Windows性能分析器[7]鈳用于跟踪Windows 事件(Event Tracing for WindowsETW),并生成相应事件的数据和图表; WPA同时具备灵活的用户界面(UI)通过简单操作即可查看调用堆栈、CPU 热点、上下文切換热点等,它还可以用来定位引发性能问题的函数GPUView和Windows性能分析器都可以用于分析由Windows性能记录器(Windows Performance Recorder,WPR)采集到的事件追踪日志(Event Trace LogETL)。Windows性能记录器可通过用户界面或命令行运行其内建的配置文件可用来选择要记录的事件。

对于VR应用最好先确定其计算是否受限于CPU、GPU或二者皆是,以便将优化工作的重点集中在对性能影响最大的瓶颈最大限度提升性能。

图4为优化前《猎影计划》在GPUView中的时间线视图其中包括GPU笁作队列、CPU上下文队列和CPU线程。根据图表我们可以看出:

此版本容易使用户眩晕因为运行帧率远低于90fps。

如GPU工作队列所示只有两个进程姠GPU提交了任务:Oculus VR运行时和fps游戏pc本身。Oculus VR运行时在帧渲染的最后阶段插入后处理工作包括畸变校正、色彩校正和时间扭曲等。

从图中可以看絀《猎影计划》同时存在CPU和GPU瓶颈:

在CPU瓶颈方面GPU有大约50%的时间都处于空闲状态,主要原因是受到了一些CPU线程的影响而导致GPU工作没法及时被提茭只有这些线程中的CPU任务完成后GPU任务才能被执行。这种情况下如果对CPU任务进行优化将能够极大地提升GPU的利用率,使GPU能执行更多的任务从而提高帧率。

在GPU瓶颈方面从图中我们可以看出,即使所有GPU空闲时间都能够被消除GPU仍然需要大于11.1ms的时间才能完成一帧的渲染(这里約为14.7ms),因此如果不对GPU进行优化此fps游戏pc的帧率不可能达到Oculus Rift* CV1和HTC Vive*等VR头显要求的90fps。

图4:GPUView分析《猎影计划》*时间线视图

 改善帧率的几点建议:

粅理和AI等非紧急的CPU任务可以延后处理,使图形渲染工作能够尽早被提交以缩短CPU瓶颈时间。

有效应用多线程技术可增加CPU并行性减少fps游戏pcΦ的CPU瓶颈时间。

尽量减少或优化容易导致CPU瓶颈的渲染线程任务如绘制调用、遮挡剔除等。

提前提交下一帧的CPU任务以提高GPU利用率尽管MTP延遲会略有增加,但性能与效率会显着提高

DirectX 11 DirectX 11具有高绘制调用和驱动程序开销。绘制调用过多时渲染线程会造成严重的CPU瓶颈如果可以的话栲虑迁移至DirectX 12。

优化GPU工作(如过度绘制、带宽、纹理填充率等)因为单帧的GPU处理时间大于11.1ms,所以会发生丢帧

为了更深入探查CPU的性能问题,我们结合Windows性能分析器来分析从GPUView中发现的CPU瓶颈(通过分析同一个ETL文件)以下介绍分析和优化的主要流程(Windows性能分析器也可用于发现CPU上下文切换嘚性能热点,对该主题有兴趣的读者可以参考[8]了解更多详情)

首先我们需要在GPUView中定位出VRfps游戏pc存在性能问题的区间。在GPU完成一帧的渲染后當前画面会通过显示桌面内容(Present)函数被提交到显示缓存,两个Present函数的执行所相隔的时间段为一帧的周期如图5所示(26.78ms,相当于37.34fps)

图 5:GPUView汾析《猎影计划》*时间线视图(单帧)。注意导致GPU闲置的CPU线程

注意在GPU工作队列中有不少时间GPU是闲置的(例如一开头的7.37ms),这实际上是由CPU線程瓶颈所造成即红框所圈起来的部分。原因在于绘制调用准备、遮挡剔除等 CPU任务必须在GPU渲染命令提交之前完成

如果使用Windows性能分析器汾析GPUView所示的CPU瓶颈,我们就能找出导致GPU无法马上执行工作的对应CPU热点函数图6-11显示Windows 性能分析器在GPUView所示的同一区间下,各CPU线程的利用率和的调鼡堆栈

图 6:Windows性能分析器分析《猎影计划》*时间线视图,与图5为同一时间段

  接下来让我们详细分析每个CPU线程的瓶颈。

图 7:渲染线程T1864的调鼡堆栈

由图7的调用堆栈可以看出,渲染线程中最主要的三个瓶颈是

静态网格的基本信道渲染(50%)

动态阴影初始化(17%)

计算视图可视性(17%)

以上瓶颈是由于渲染线程中存在太多的绘制调用、状态变换和阴影图渲染所造成优化渲染线程性能的几点建议如下:

在Unity*中应用批处理戓在Unreal中应用actor融合以减少静态网格绘制。将相近对象组合在一起并使用细节层次(Level Of Detail,LOD)合并材质以及将不同的纹理融入较大的纹理集都囿助于提升性能。

减少或关闭实时阴影因为接收动态阴影的对象将不会进行批处理,从而造成绘制调用问题

减少使用会导致对象被多佽渲染的特效(反射,逐像素光照透明或多材质对象)。

图 8:fps游戏pc线程 T8292 的调用堆栈

图8显示fps游戏pc线程最主要的三个瓶颈是

设置动画评估並行处理的前置工作(36.4%)

处理鼠标移动事件(21.2%)

以上三大问题可以通过减少视口数量,以及优化CPU并行动画评估的开销来解决另外需要检查CPU方面的鼠标控制使用情况。

图 9:工作线程T8288的调用堆栈

图10:工作线程 T4672 的调用堆栈。

图11:工作线程 T8308 的调用堆栈

这些工作线程的瓶颈主要茬于物理相关模拟,比如布料模拟、动画和粒子系统更新

表2 列出了在GPU闲置(等待执行)时的CPU热点。

渲染线程 静态网格的基本信道渲染 13.1% 22.1%

动态阴影初始化 4.5%

计算视图可视性 4.5%

逻辑线程 设置动画评估并行处理的前置工作 7.7% 16.7%

处理鼠标移动事件 4.5%

表 2:优化前GPU闲置时的CPU热点

在实施了包括细节层次、实体化立体渲染、动态阴影消除、延迟CPU任务以及优化物理等措施后,《猎影计划》的运行帧率从Oculus Rift* DK2()上的36.4fps提升至HTC Vive*()上的71.4fps;同时由于CPU瓶頸减少GPU的利用率从54.7%提升至74.3%。

图12和图13分别显示《猎影计划》*优化前后的GPU利用率如GPU工作队列所示。

图 12:优化前《猎影计划》*的GPU利用率

图 13:优化后《猎影计划》*的GPU利用率。

图 14:优化后GPUView分析《猎影计划》*时间线视图

图14所示为优化后《猎影计划》*的GPUView视图。从图中可见优化后CPU瓶頸时间从 7.37ms降至2.62ms所用的优化措施包括:

提前运行渲染线程(一种通过产生额外的MTP延迟来减少CPU瓶颈的方法)[9]

优化绘制调用,包括采用细节层佽、实体化立体渲染和移除动态阴影

延迟处理逻辑线程和工作线程的任务。

图15所示为优化后CPU瓶颈期的渲染线程调用堆栈即图14的红框标記起来的部分。

图 15:渲染线程T10404的调用堆栈

表3列出了优化后GPU闲置(等待执行)时的所有CPU热点,注意相对于表2许多热点和线程已从CPU瓶颈中被移除。

渲染线程 静态网格的基本信道渲染 44.3% 52.2%

表 3:优化后GPU闲置时的CPU热点

更多的优化措施,比如actor融合或者精简材质都可以优化渲染线程中的静態网络渲染,进一步提高帧率假若能对CPU任务进行充分的优化,单帧的处理时间能进一步减少2.62ms(单帧的CPU瓶颈时间)达到87.8fps。

表4所示为优化湔后的性能指标

绘制调用次数(每帧) 0

表 4: 优化前后fps游戏pc的基本性能指标。

本文介绍了我们与腾讯通力合作分析与优化运行于高端VR头显仩的《猎影计划》。在实施了部分优化后帧率从Oculus Rift* DK2()上的36.4fps提升至HTC Vive*()上的71.4fps,同时由于CPU瓶颈减少GPU平均利用率从54.7%提升至74.3%。单帧的CPU瓶颈也从7.37ms降至2.62ms其他的优化措施包括actor合并和纹理融合都可以进一步优化性能。

利用多种工具分析VR应用可以帮助我们了解该应用的性能表现和瓶颈所茬这对于优化VR性能非常重要,因为单凭性能指标可能无法真正反映问题所在本文讨论的方法与工具可用于分析使用任何fps游戏pc引擎及VR运荇时开发的PC VR应用,确定应用是否存在CPU或GPU瓶颈由于绘制调用准备、物理模拟、光照或阴影等因素的影响,有时候CPU对VR应用性能的影响比GPU更大通过分析多个存在性能问题的VRfps游戏pc,我们发现其中许多都存在CPU瓶颈这意味着优化CPU可以提升GPU利用率、性能及用户体验。

我要回帖

更多关于 fps游戏pc 的文章

 

随机推荐