X

51VR旗下CODE51与intel联合发布优化VR游戏应用体验方案

王文斓,英特尔公司

吴亚光,第一摩码娱乐科技有限公司

摘要

作为人与虚拟世界之间的新型交互方式,VR 能够让用户在模拟现实中获得身临其境的感受。但是,鉴于 VR 的帧预算为每帧 11.1ms (90fps),实现实时渲染并不容易,需要对整个场景渲染两次(一只眼睛一次)。在本文中,我们将重点探讨 VR 游戏的性能和用户体验优化,介绍我们在《Code51》这款VR电竞游戏中使用的缓解晕动症技术,延长用户的游玩时间,还将介绍《Code51》中的性能优化和差异化,提升玩家和观众在整个游戏中的用户体验。

引言

《Code51》是全球首款支持 Oculus Rift、HTC Vive、PSVR 和 Pico VR 的机甲竞技场 VR 游戏,它可支持全球玩家之间四对四对抗,专为 VR 电子竞技量身定制,采用可最大限度减少晕动症的游戏设计和内置的观察者模式。《Code51》已在中国 3,000 多个 VR线下店和体验中心上线(造梦和乐客),并且计划在 2018 年第二季度在 PlayStation Store、Oculus Store 和 Steam 上线。

英特尔与第一摩码紧密合作,致力于优化该游戏的用户体验和性能,并且在英特尔® 酷睿™ i7 处理器上增添了视觉和听觉增强效果,包括 3D 音效、物件破坏、更丰富的CPU粒子和额外的背景效果等。

我们将在本文介绍《Code51》中帮助提升 VR 游戏沉浸感和用户体验的 7 个设计要点。

沉浸感VR游戏的设计要点

在VR中身临其境地移动

当前有 4 种在虚拟世界移动的方式,分别是:

  • 瞬移 + 6自由度 (DoF) 追踪(如《Robo Recall》)

  • 虚拟座舱(如《EVE:  Valkyrie》)

  • 硬件运动模拟器(如Virtuix Omni™)

  • 大空间追踪系统(如OptiTrack™)

所有这些解决方案各有优缺点。《Code51》采用了虚拟座舱的移动方式,原因如下:

  • 能够連续移动是提升 VR 沉浸感的一种重要方法,因为它与我们的现实体验相匹配,虚拟座舱是唯一可支持在 VR 中連续移动且无需增加额外硬件和成本的方法。

  • 鉴于目前高端 VR 头盔的销量并不高,可兼容 3自由度 VR 头盔的移动方式有助扩大用户基数并减少将游戏移植到这些设备上的工程量。

  • 《Code51》是一款VR电竞游戏,玩家坐在机甲座舱内与其他人战斗,这种“坐式”体验与虚拟座舱的移动方式完美匹配,提升了沉浸感。

  • 坐著使用游戏手柄玩没有站着使用动作控制器玩那么累人,用户可以更长时间地畅玩 VR 游戏[1]。图 1 展示了用户如何使用各种 VR 头盔畅玩《Code51》。

1.jpg

图 1.《Code51》支持各种 VR 头盔。左侧:HTC Vive (6 DoF)。右侧:Pico VR (3 DoF)。

 缓解 VR 中的晕动症

晕动症[2]是影响用户不能长时间体验 VR 的主要因素之一。引起这种症状的因素包括:

  • 辐辏调节冲突引起的视觉压力[3]

  • VR 场景没有方向线索或参照物(即不能获得当前移动方向的提示)

  • 较低的帧率或较高的 MTP 延迟

  • 眼睛所见和身体感受之间的加速度不匹配

  • 角速度

  • 镜头拉近或拉远

  • 低PPD (每度像素数)引起的模糊

《Code51》采用了几种方法来最大限度地减少晕动症

  • 用户界面设计

  • 将控制面板放到离用户 1 米以外以避免频繁改变用户的辐辏距离,减少辐辏距离相对于焦距的变化

  • 场景设计

  • 在场景中提供清晰的方向线索,以便用户始终知道正在走哪个方向,这能够让人的大脑提前做移动准备,减少眩晕。在实践中,避免添加可能会阻挡用户整个视野的纯纹理对象,因为它缺少视觉线索,让大脑无法感知目前的移动方向,等效增加了额外的加速度变化。

  • 渲染性能

  • 优化性能,让《Code51》以稳定 90fps 的速度渲染,最大限度地降低 MTP 延迟。

  • 减少加速运动

  • 尽可能地避免在《Code51》中添加加速度以减少眩晕,速度应该在不同程度之间作即时切换。例如仅在运动开始瞬间添加加速度,然后在跳跃或着陆期间保持恒定速度。

  • 降低角速度

  • 降低高速旋转(角速度)的能力,可帮助减低光流量。

  • 动态缩小 FOV

  • 动态缩小 VR 中的 FOV 有助于减轻晕动症[4][5]。《Code51》中采用了该方法,使用depth buffer(深度缓存)计算出屏幕四个角落的移动速度,然后在stencil buffer(模板缓存)中根据速度大小将顶点相应地向内弯曲,以减少运动期间的 FOV。正如图 2 中所示,移动的越快,FOV 越狭窄。它能够减少最终用户感知到的光流量。

2.jpg

图 2.《Code51》中采用动态 FOV 来消除屏幕边缘的光流,在实际测试中用户在 VR 裡并不太感觉出FOV的缩小,却能够帮助缓解晕动症。

最大限度降低网络延迟

对于 VR 应用,降低网络延迟也很重要,这样才能避免画面滞后,拥有流畅的游戏体验,否则容易引起晕眩。在《Code51》中,机甲本身的所有动作都是在本地预测,然后以较低的频率与服务器作同步和修正,避免网络不佳时本地出现频繁的修正动作,干扰游戏进行。如果同步失败,客户端会根据之前的轨迹作插值。

增强 VR 电竞游戏的观看体验

为了给 VR 电竞观众打造更好的观看体验,《Code51》内嵌了观察者模式。观察者模式在游戏中是一个独立的客户端,允许观众通过键盘、鼠标或手柄操控从任何视角和位置观看实时战斗画面,画面能够以双目或单目方式输出到 VR 头盔或者大型显示屏(如图 3 所示)。

3.jpg

图 3.《Code51》中的观察者模式。最终用户可以采用 VR 或非 VR 模式观看现场战斗。

保持渲染画面的锐利度

相对于传统显示器,当前 VR 头盔显示器的 PPD (每度像素数)仍然很低,因此 VR 应用需要尽可能地保证渲染画面的锐利度以减少画面模糊和因此引发的眩晕。当前 UE4 开发人员可使用的抗锯齿 (AA) 方案大致有以下三种

  • 页框交错抗锯齿 (TAA)

  • 在静态环境中,TAA 及其衍生AA算法拥有良好的抗锯齿质量,且计算成本适中。对于半透明物件的 TAA,必须在额外的步骤中计算,因为这些物件没有可用的深度信息。此外,VR 中使用的 TAA 最好采用保守的参数设置,以减少由于头部移动或动态场景中产生的 VR 模糊。

  • 多重采样抗锯齿 (MSAA)

  • MSAA 只能在正向渲染管线中使用,《Code51》采用了该方法来最大限度地减少 AA 所产生的 VR 模糊。VR 裡一般采用 4 倍 MSAA 就能达到不错的效果。

  • 屏幕空间抗锯齿 (SSAA)

  • SSAA 的计算成本较高,但是能够实现最佳的抗锯齿质量,《Code51》中还使用了 1.4 倍 SSAA。

CPU 性能优化

为了降低 UE4 DX11 VR 游戏的 CPU 瓶颈,需要减少渲染线程的工作负载[6],UE4 (4.20+) 中为 DX11 实现的 RHI线程可通过 D3D11 多线程渲染减轻主渲染线程的负载[7],所以尽可能启用 RHI 线程。

此外,UE4 中还有各种优化主渲染线程负载的方法[8],《Code51》中就采用了其中一些方法:

  • 减少绘制调用(根据我们在前向渲染管线上的分析经验,运行在高端 VR 头盔的应用最好将绘制调用数目限制在2,000以下来减少绘制调用的状态变换开销,避免产生渲染线程瓶颈。如果 GPU 优化得较好(每帧的 GPU 计算时间较低),每帧有较多的时间留给渲染线程,则绘制调用数目可以超出这数字而不掉帧)

  • 优化可见性剔除 (InitView)

  • 修改场景物件以减少动态遮挡剔除(硬件遮挡查询或层次Z-缓冲算法),因为计算一个只在屏幕上出现一小部分的大型物件的遮挡剔除是一件计算效率低下的事情。图 4 显示了该优化的示例

  • 使用预计算遮挡剔除[9]减少运行时需要使用动态遮挡剔除处理的基元 (primitives) 数量。这方法在《Code51》中效果相对没那么明显,因为游戏中的机甲能飞到空中,降低了预计算的效果。在《Code51》中,当启用预计算遮挡剔除时,可被预计算处理掉的静态遮挡的基元数量(大约 300 个基元)是总遮挡剔除基元数量的 20%

  • 屏蔽遮挡剔除(Github/论文)是采用 SIMD 加速的CPU 遮挡剔除算法(SSE、AVX 和 AVX-512),它可以取代层次Z-缓冲算法,能够在现代的多核 CPU 上高效地并行计算

  • 减少动态光源,关闭动态阴影投射,如果预算允许的话可使用胶囊阴影 (capsule shadows)

  • 尽可能地使用光照烘焙

  • 使用 LOD 和 HLOD,保证高端 VR 下三角形数目少于 250 万

  • 使用粒子 LOD,不要在 LOD0 中使用半透明粒子

4.jpg

图 4. 场景中一个物件从左图修改为右图的样子,以减少原图中该物件后面的遮挡剔除计算。

差异化和特效强化

最后,优化 VR 应用体验的一个重要方向是尽可能地利用硬件平台上的所有可用计算资源,在该平台上提供最佳体验。例如,使用英特尔® 酷睿™ i7-7700K 处理器的用户比仅使用英特尔® 酷睿™ i5-4590 处理器(未使用 ASW 的 Oculus Rift 的 CPU 最低要求规格)的用户有更高的主频和更多的 CPU 核心,这意味着可以添加额外的 CPU 计算来增强应用的视觉和听觉效果,提升体验的同时不影响帧率。

在《Code51》中,我们加入了一些主要用 CPU 作计算的强化特效来更好地用上高端 CPU 的计算资源,这些特性包括 3D 音效、物件破坏、CPU 粒子增强和炫酷的背景效果。

其中大部分强化音效和画面表现的 CPU 计算(例如 PhysX™ 计算或Steam™ Audio 中利用光线跟踪算法的环境音效计算等)都是由 UE4 的工作线程或音效模拟线程处理。因为大部分计算都被分配到闲置的 CPU 核心,这些强化效果大大加强了沉浸感的同时最大程度避免了对帧率的负面影响。

图 5 展示了《Code51》的帧率数据。数据显示该游戏在开启强化效果的同时能够在英特尔® 酷睿™ i7-7700K 和英特尔® 酷睿™ i7-7820HK 上流畅运行,但在英特尔® 酷睿™i5-4590上开启强化效果则会导致帧率显著下降,这意味着 i5 CPU 在开启强化效果下无法在 11.1ms 内完成一帧渲染。但只要关掉所有强化效果(切换到无强化效果的低画质设置),使用 VR 最低 CPU 规格的用户仍可顺畅地游玩《Code51》。根据下列《Code51》的帧率数据,当所有 CPU 强化效果均打开时,英特尔® 酷睿™ i7-7700K 比英特尔® 酷睿™ i5-4590 性能高出 27%。

5.jpg

图 5.在不同 CPU (英特尔® 酷睿™ i5 和 i7 处理器)和画质设置下的《Code51》性能数据,“超高 Ultra High”是开启 CPU 强化效果的,“低 Low”是未开启 CPU 强化效果的。测试系统: 英特尔® 酷睿™ i5-4590,NVIDIA® GTX1080,2x4GB DDR3-1600,Windows™ 10 版本 1703;英特尔® 酷睿™ i7-7700K,NVIDIA® GTX1080,4x4GB DDR4-2400,Windows™ 10 版本 1703;英特尔® 酷睿™ i7-7820HK,NVIDIA® GTX1080,4x4GB DDR4-2400,Windows™ 10 版本 1703。

图 6 和图 7 展示了不同设置下《Code51》的 GPUView 屏幕截图,两图中均使用“超高” 画质设置和采用英特尔® 酷睿™ i7-6800K 处理器,并使用 msconfig 分别将 CPU 内核设置为 4C4T 和 6C12T,并以相同的 CPU 频率运行。从图表中可以明显看出,在 4C4T 配置下(模拟 4C4T 英特尔® 酷睿™ i5 处理器),一帧的渲染无法在 11.1ms 内完成,并且出现了帧率显著下降的情况,但在6C12T 配置下却能够流畅运行。

下列是在相同英特尔® 酷睿™ i7-6800K 上运行、两种配置下(6C12T 和 4C4T),用 Windows™ 性能分析器 (WPA) 观察到的《Code51》中不同线程上增加的 CPU 计算百分比:

总 CPU 工作负载:         43%↑

渲染线程:                44%↑

GPU驱动线程:             10%↑

逻辑线程:                13%↑

工作线程:                89%↑

在《Code51》中,大量 CPU 强化效果被移到工作线程计算,导致这些线程的计算增加率最大。

6.jpg

图 6.“超高Ultra High”设置下采用英特尔® 酷睿™ i7-6800K 处理器和 GTX1080 显卡的《Code51》的 GPUView 屏幕截图,在这里 CPU 内核用 msconfig 设置为 4C4T。测试系统: 英特尔® 酷睿™ i7-6800K,NVIDIA® GTX1080,4x4GB DDR4-2400,Windows™ 10 版本 1703。

7.jpg

图 7.“超高Ultra High”设置下采用英特尔® 酷睿™ i7-6800K 处理器和 GTX1080 显卡的《Code51》的 GPUView 屏幕截图,在这里 CPU 内核 (6C12T) 未做任何修改。测试系统: 英特尔® 酷睿™ i7-6800K,NVIDIA® GTX1080,4x4GB DDR4-2400,Windows™ 10 版本 1703。

结论

让用户感到舒适和减轻晕动症是 VR 电竞游戏成功的两大要素,只有能够让用户长时间沉迷其中的电竞游戏才能真正成功。《Code51》采用了文章中介绍的各种方法来减轻晕动症,同时内置了观察者模式帮助提升赛事观看体验。在性能优化方面,根据 GPUView 和 WPA 可以看出渲染线程通常是 UE4 DX11 VR 应用的主要 CPU 瓶颈,标淮的游戏优化方法以及将任务从主渲染线程移到其他线程能带来不少性能提升,此外,像《Code51》一样利用闲置的 CPU 资源添加更炫酷的画面和音效强化效果,可以让游戏从众多竞品中脱颖而出。

参考文献

[1] http://blog.leapmotion.com/taking-motion-control-ergonomics-beyond-minority-report/

[2] https://en.wikipedia.org/wiki/Virtual_reality_sickness

[3] Shibata、Takashi 等等“立体显示引起的视觉不适:观看距离的影响和视觉辐辏调节冲突的方向。”《立体显示及应用 XXII》。第 7863 卷。国际光学工程学会,2011 年。

[4] http://engineering.columbia.edu/fighting-virtual-reality-sickness

[5] Fernandes、Ajoy S.和 Steven K. Feiner.。“通过精细的动态视野修改减轻 VR 眩晕。”3D 用户界面 (3DUI),2016 IEEE 座谈会。IEEE,2016 年。

[6] Finn Wong,“PC VR游戏的CPU性能分析与优化”,2016 年

[7] https://msdn.microsoft.com/en-us/library/windows/desktop/ff476891(v=vs.85).aspx

[8] Finn Wong,“Unreal* Engine 4 VR 应用的 CPU 性能优化和差异化”,2017 年。

[9] http://timhobsonue4.snappages.com/culling-precomputed-visibility-volumes

关于作者

王文斓是英特尔合作伙伴关系部 (DRD) 的一位高级软件工程师。自 2015 年以来,他一直负责 VR 内容支持和技术合作,帮助 VR 开发人员优化 CPU 性能和实现 CPU 内容差异化,从而为最终用户提供真正的沉浸式 VR 体验。王文斓曾被邀请在 CGDC、VRCORE、腾讯 GDOC、Unreal Circle、Unity Unite 和 Vision AR/VR 峰会等各种 VR 会议上做技术演讲。在此之前,王文斓在英特尔从事 H.264/H.265 和 RealSense 应用的性能优化工作,在视频编码、视频分析、计算机视觉、算法和性能优化领域拥有 10 多年的丰富经验,並发表了若干学术论文。王文斓拥有国立台湾大学电机工程学士学位和通信工程硕士学位。

吴亚光是第一摩码娱乐科技有限公司首席执行官兼联合创始人。他拥有多年深厚的游戏开发经验,从 2016 年开始领导了知名 VR 游戏《Code51》的开发工作。


 阅读原文

微信扫一扫,关注51VR