在本文中,我将针对开发 Gear VR 应用程序以及使用虚幻引擎 4 的虚拟现实体验提出一些建议。同时将透露一些在游戏中实现某些特效的小技巧。
经验学习
前期优化是实现良好虚拟现实体验的先决条件
我们的目标平台三星 Galaxy S6 使用的图形处理器是 Mali-T760 MP8,其理论性能为 210 GFLOPS,5.2 GTexels/s。这可以与 PC 平台上虚拟现实推荐使用的英伟达 GeForce GTX 970 显卡(原始性能为 3494 GFLOPS 和 109.2 GTexels/s)相提并论。考虑到虚幻引擎 4 在 Gear VR 上相对于 Oculus DK2 会渲染更多像素(2.097M vs 2.073M),后者在计算能力和带宽上的差距显而易见。后者唯一的优势是帧数:Gear VR 应用程序大约保持在 60 帧,而 Oculus DK2 可达 75 帧,而 Crescent Bay 可能会冲到 90 帧。
了解这些数据后,便可知对于性能的追求仅有一种合理的方式:做好前期开发。如果您认为仅靠“优化次数”即可提升性能,那就大错特错了。因为您不得不忍痛删减许多资源和特性。
对于虚拟现实而言,最好在开发的每一个步骤中均考虑性能问题。当设计一项特性或场景时,需要考虑渲染多少个不同物体、所需特效以及所有物体的图像保真度。使用同样的渲染设置但具用不同占位资源的原型试验。如果某种原因导致帧数降幅过大,先后退,然后将其放弃或在独立的分支中运行。
在《逃逸速度》之前,我们的团队仅在 PC 上体验过虚幻引擎 4。当时我们天真地以为在后续开发中可以将游戏帧数稳定在 60fps。无数不眠之夜和那些弃用的特性都证明了我们是错误的。吸取了这次的经验教训后,我们调整了开发方式,新项目便不再出现如此严重的性能问题。我们对任何可能提高性能的观点均加以筛选并进行了全面试验。
神秘的绘制调用
我们发现绘制调用的数量是一项衡量标准,需要在开发过程中谨慎对待。手机 GPU 在三角形数量方面非常强劲,但对不同材质的物体进行绘制调用时,通常引发驱动程序状态变化次数过多,进而导致 GPU 性能下降。
这就是我们空间站的各部分在初期几乎处于分离状态的原因,但是所有的纹理和地图最终都融为一体,犹如一张大网。我们的测试显示 LOD 的作用非常有限,因为即使将所有模块替换为封闭模型(每个大约 30tris),Galaxy S6 中的 Mali-T760 MP8 的帧数依然无法达到 60fps。
光遮蔽的作用也不大,因为玩家在 EV 中的自由度很大,整个空间站都可以在屏幕中显示。
此外,我们还必须舍弃一切粒子效果,因为当时虚幻引擎 4 无法在 Galaxy S6 中使用实例化,绘制调用会因此急速增长。但是,4.11 版本现已提供支持。
对于今后的项目,我们非常期待为近期在移动端 GPU 中发布的 0Vulkan API 提供支持。Epic Zen's Garden 演示程序显示,Metal 这类低级别 API(以及 Vulkan)能够挖掘这些设备的真正潜能,让开发者能够不再因一些限制条件而苦恼。
观看者会产生晕动症
自 2012 年第一台 Oculus 原型机问世以来,针对现代虚拟现实设备会导致晕动症的讨论从未停止。业内的结论是必须尽量减少这种症状,即使以牺牲一些游戏元素为代价。
根据我们在 EV 领域的经验,这件事并非易如反掌。似乎只要晕动症源于游戏体验的本质而非技术缺陷,人们便可接受。
除了 EV 以外,Setapp 还发布了另一款 Gear VR 设备应用 - Neverout 解密游戏。从游戏名称可以看出,玩家不会接触诱发恶心症状的元素,但是某些玩家依然报告感觉不佳,即使他们仅完成一些相对轻度的移动。
另一方面,《逃逸速度》得到的大量评论均可总结为“天哪,我吐了一地!真是太帅气了!”
有了 EV 之后,人们认为其体验肯定不会很舒服,因为在现实中同样不舒服。但是请记住,我们集成了可以立即停止游戏中最难受体验的功能(即喷气背囊导致旋转过强),用户便可自行控制。
技巧
后处理盒子
对于 4.10 版本,Gear VR 不支持手机 HDR。这意味着许多处理特效无法实现,即发生所谓的屏幕褪色。
相对于其它特效,我们需要将该特效从入场序列中消除。我们使用了一种简单的方法:
我们固定了一个静态网格(盒子),其法线在摄像点翻转。它的材料很特殊,不发光并且未经景深测试,因此我们确信它在绘制时位于其他所有几何图形之上:
在正常情况下,该物体不会出现在屏幕上。仅当某个时间轴绘制其不透明度时才会显示出来。
盒子不能太小,因为 HMD 的头部模型可能导致每只眼睛的摄像机发生偏移,进而穿过盒子。
但是,请注意,该方法重新绘制整个屏幕。由于 Galaxy S6 GPU 的像素填充率比较有限,如果此时屏幕上正好存在其他半透明元素,便可能导致帧数下降。
Gear VR 设备头部模型
“头部模型”指的是从脖子到两眼之间正中位置的偏移。游戏中使用的摄影机作用物就位于这一虚拟的“脖子”上。渲染使用的每只眼睛的实际位置是通过以下方式变换初始“脖子”位置进行计算的:
- 增加头部追踪偏移(Gear VR 不适用)。
- 根据头部追踪的输入数据进行转动。
- 增加头部模型偏移。
- 根据瞳距 (IPD) 分开双眼。
对于 Gear VR,虚幻引擎 4 使用固定头部模型和 IPD(请参见 GearVR.cpp 中的 FSettings 构造器)。在 Rift 中,您可以在用户偏好中查阅这些信息。
我们发现 Gear VR 的默认值对于我们的设定值而言过大。在头盔中旋转宇航员的视角时,一只眼睛能够穿过它。此外,如果需要模拟一个非常小的人物,仅按比例将其缩小远远不够,因为头部模型和 IPD 并未做出相应改变。仅会产生人体卧于地面的感觉。
要解决这个问题,必须将整个头部模型按比例缩小。为了按比例调整头部模型,以下是将 IPD 和头部追踪偏移缩小 10 倍的控制台命令:
- STEREO CS=0.1
- STEREO PS=0.1
这些命令会将摄影机和位置追踪偏移同时缩小 10 倍,这样使用者会真正感觉自己变小了。
如需了解更多可控制的 HMD 运行时间参数,你可以查看该项功能 -
Engine/Source/ThirdParty/Oculus/Common/HeadMountedDisplayCommon.cpp function FHeadMountedDisplay::Exec()。
为了实现更为优质的 VR 体验,虚幻引擎 4 所作出的调整
由于某些特定功能的状态问题,我们在开发过程中遇到了一些障碍,但是我们找到了一些行之有效的解决方法。以下是我们遇到的问题:
通用 UMG 与 UI
在 VR 中使用 UI 元素极具挑战性。这些特定项目对我们而言非常麻烦:
景深测试与渲染到纹理
我们想让某些 UI 元素呈现出显示在头盔玻璃的状态。但是,将这个 UMG 3D 插件置于玻璃附近时,它却与镜头间距过近。在 VR 设备上,用户只有挤成斗鸡眼才能将视角聚焦到 UI 上。
此后,我们尝试将 UI 元素拉远并做的更大。但是,这导致 UI 和空间站的图形发生干扰。
但是无论如何,我们必须绘制这些元素。借助标准物体,我们便可在材料设置中直接取消景深测试。但是对于 UMG 3D 插件而言,可用材料列表是固定的。最终,我们通过使用取消景深测试的选项扩展了 3D 插件。
我们真心希望能够将 UMG 插件渲染到纹理上。相对于 3D 插件,这将给予我们更高自由度,尤其是在 VR 设置中,其中的 UI 元素应当自然融入到背景中。我们已向 Epic 提交了该请求。
焦点输入
目前没有什么特别理想的方法能够将注视焦点的信息传输到 UMG 3D 上。只能选择拓展 3D 插件并结合鼠标输入,或在画面中使用一套独立物体,通过人为方式构建一些视角追踪设置。
对虚拟现实而言,通过一些轨迹线将 UV 空间和鼠标事件相关联,从而将 UMG 到纹理与焦点输入支持相结合是一种理想解决方案。我们已向 Epic 提交了该特征的请求。
由 Matinee 驱动的玩家动画
Matinee 中骨骼网格的动画仅可在 ASkeletalMeshActor 或是衍生分类中完成。出于工具灵活性的考虑,我们曾经希望通过 Matinee 在游戏的第一和最后一个序列中制作宇航员的动画。但是在 Matinee 中,来自 ACharacter 的作用物无法直接控制其骨骼网格的动画绘制。
正常 FPS 游戏的影像制作只需淡出到特制场景中。玩家的角色在其中隐藏,然后只需创造出一些特制的骨骼网格作用物。但是在 VR 中,我们并不想要这种融入破碎的淡出效果。我们曾经希望在 Matinee 序列中再次使用同一角色物体并让玩家进行控制。在序列结尾处,我们希望该角色无缝转换为玩家控制模式。
在 EV 中,我们必须使用通过 Matinee 绘制的虚拟骨骼网格并将我们真正的角色(虽然处于隐藏状态)附着在这个骨骼网格中。在序列结尾处,我们隐藏虚拟网格并显示真实的角色。由于两个骨骼网格的位置无法严格匹配,因此您在转换时可能觉察到些许断续效果。
结语
针对 VR 设备开发软件为设计者和开发者带来了一系列全新挑战,在移动设备中尤为如此。当之前使用的各种套路和解决方案不再奏效,您只能另辟蹊径。到目前为止,还有很多问题尚待解决,特别是用户交互方面。
移动端的 VR 更加困难,因为设备本身存在诸多局限性。您必须以创新视角看待性能调试问题,在实现最佳画质的同时保证流畅的帧数。
在虚幻引擎的帮助下,我们会将设想转变为最终产品。虽然实现某些效果的挑战性依然很大,但是考虑到 VR(特别是移动端)设备尚未成熟,这也是可以理解的。得益于 VR 设备的近期发展以及虚幻引擎 4 对移动端的支持,我们可以继续展望新项目。
如果您对《逃逸速度》或虚幻引擎 4 在 VR 应用方面仍有疑惑,请直接在虚幻引擎论坛向我发送私信。