【译】虚幻4开启VR之旅
【译】虚幻4开启VR之旅
本教程适用于所有想要在虚幻引擎4中开发虚拟现实项目的人。包括内容有蓝图功能,C ++使用,性能的注意事项,以及如何为UE4设置VR工具。
我强烈建议使用最新版本的虚幻引擎,因为每个新版本的VR都在不断改进,附带着新的性能和功能的产生。
推荐一些比较好的VR学习的网站如:Oculus 官方论坛, VR 官方文档 , 虚幻引擎VR子论坛等。
虚幻引擎4.13在蓝图中制作了一个新的内置VR模板。 更多信息请查看VR 模板指南。
设置你的VR设备(Setup your VR Device)
开始本教程,我将假设你已经选择并成功安装你的头戴式显示器(如果你没有完成,请访问Oculus Rift Setup或者HTC Vive Pre Setup进行相应设置)。 如果你在设置Vive头显正常工作是遇到了困难,我希望这个帖子Troubleshooting guide将对你有帮助。
虚幻引擎4支持所有主要设备,你不需要执行任何麻烦来设置你的VR游戏项目。 只需确保在编辑>插件下为你的头显加载了正确的插件。 有一些性能注意事项需要考虑,我们稍后在教程中将会进行讨论。
在启动编辑器之前,确保你的VR软件正在运行,在本例HTCVive设备情况下,需要运行SteamVR这个应用程序。
启动VR预览(LaunchingVR Preview)
测试你的VR集非常简单,只需从播放下拉按钮选择“VR预览”。 默认情况下,头部跟踪将立即生效,而不会对现有项目或模板进行任何更改。 我将在教程后面详细介绍如何添加其他功能,如动作控制器设置和原点复位等功能。
VR最佳实践(VR BestPractices)
VR仍然是一个相对未开发的领域,伴随着VR不断的发展我们每天都在学习新的内容。 Oculus和Epic Games都给开发者提供了一套很好的实践指南,我建议你阅读这些实践指南并能够在开发VR游戏时候记得这些内容,将他们运用到具体的实践中去。
在蓝图中使用VR(Using VR in Blueprint)
在蓝图中使用VR是非常简单的,你不需要自己去设置很多复杂的步骤。
你需要一个摄像机组件和一两个可选的动作控制器组件。 默认情况下,你的相机已设置为支持HMD(头显),如果你希望禁用HMD(头显)的旋转,你可以在组件的属性中禁用“Lock to HMD”属性,从而关闭头显的旋转。 有关动作控制器的更多信息,你可以跳转到本教程的相关的部分进行阅读,你也可以直接进入动作控制器的官方文档页面查看如何进行动作控制器的设置Setup Motion Controllers。
这里是一个的蓝图中的可用节点(它是一个非穷尽的列表):
重置HMD(头显)的位置或者HMD的方向(可以使用可选的偏移来设置):
通过选择合适的功能属性,你可以轻松检查你的HMD是否已经启用,并且正常的工作。
SteamVR 的Chaperone组件(SteamVRChaperone)
Chaperone是SteamVR中特定组件,它可以轻松访问软边界。 软边界被表示为以HMD为原点(0,0,0)的向量阵列中心。 向量的Z分量始终为零。你可以像把ActorComponent添加到你的蓝图中一样,把其他需要的组件也添加进来,如下图所示:
USteamVRChaperoneComponent
如果要在c++中使用Chaperone组件,你需要打开ProjectName.Build.cs文件,并添加“SteamVR”模块到PrivateDependencyModuleNames数组。 参见下面的示例。
设置动作控制器(Setup MotionControllers)
官方文档对运动控制器设置和输入处理介绍的很清楚Motion Controller setup and input handling,因此如果你的VR设备支持动作控制器,我建议你参考这个官方文档。你可以下载我在git hub上的vr模板 VR Templates on GitHub,这个模板是实际应用的例子。
如果您无法用相机对准你的运动控制器,只需把SceneComponent当做“VR原点”即可。当你的根组件在CharacterBlueprint上产生像CapsuleComponent一样的问题,那么这种方法特别好用。
在C ++中使用VR(Using VR inC++)
4.11版本的蓝图中并不能完成所有的功能,如果你想用更多的高级自定义设置,你可能需要更加深入的了解C ++,从而来调整一些设置。 打开 IHeadMountedDisplay.h文件查看可用的一些函数。 某些插件添加了额外的功能,如 SteamVRChaperoneComponent ,但是这些特定功能都是针对某一个特定的设备。
必备的模块和内容(RequiredModules & Includes)
如果你希望通过C ++连接上HMD(头显),你需要在ProjectName.Build.cs文件中包含“HeadMountedDisplay”模块,你可以在VisualStudio解决方案资源管理器中找到它。 下面是来自 VRFirstPerson project项目的示例。
要使用HMD功能或动作控制器组件,请确保包括以下头文件。
性能注意事项(PerformanceConsiderations)
为了让你VR体验更加舒适,你的游戏需要运行在75赫兹(Oculus DK2)甚至是90赫兹(HTC VIVE和OculusCV1)。这个数值取决你所使用的设备。游戏运行时在控制台的“statfps”或“stat unit”中了解你当前游戏的的帧速率。
CPU分析(CPUProfiling)
你的游戏可能会受到CPU或GPU性能的约束,需要通过不断的测试来找到游戏的性能瓶颈(一个快速的方法是使用“stat unit”)。由于gen游戏和引擎的复杂性,几乎不可能去很好预测你CPU性能瓶颈,所以使用合适的工具进行CPU性能相关的测试吧! BobTellez写了一篇关于使用虚幻引擎4进行CPU分析的博客,这篇博客CPU Profiling是一篇学习CPU分析的好文章。
GPU分析(GPUProfiling)
为了捕获GPU时序的单帧,可以按Ctrl+ Shift +,或在控制台中键入“profilegpu”。这个命令可以准确测量GPU时序,你会发现,当使用VR时,某个过程对帧率来说是一个沉重的负担(Ambient Occlusion就是一个常见的例子)。
GPU Profiling和 Performance and Profiling文档是了解游戏性能分析的好地方。
当你在分析游戏性能的时候,可能会遇到一些花费代价比较大的场景和项目,此时你可能会感到困惑, Translucent Lighting Volume就是这样一个例子,你可能不需要它,但即使未使用它仍然消耗了场景的静态资源,查看这个帖子 AnswerHub post by Daniel Wright 来学习怎么禁用此功能。 开发者进行不断的测量和测试,因为没有任何一种配置是对任何工程都是完美的,不断测试以找到最适合本工程的配置项。
FATED的开发者在quest for optimized VR中提出了一些列的方案来进行VR优化。 例如,他们提到禁用HZB 遮挡剔除(r.HZBOcclusion0)、动作模糊 (r.DefaultFeature.MotionBlur=False) 以及镜头光斑 (r.DefaultFeature.LensFlare=False)。 这些命令不会一直保留,因此你应该在/Config/DefaultEngine.ini配置文件中添加这些命令,尽管这些设置中的大多数可以通过编辑>项目设置...>渲染来找到,从而进行相应的设置。
另一个需要考虑的优化是实例立体渲染,我们将在下面进行介绍。
实例化立体渲染(Instanced Stereo Rendering)
最新的4.11版本引入了实例立体渲染。
Ryan Vance说:“基本上,我们利用硬件实例,通过调用绘画函数,在渲染循环中同时绘制左右两只眼睛。 这种绘制方法将显著降低CPU渲染线程时间,并提高GPU性能。 Bullet Train可以实现CPU〜15-20%的提升,GPU有7 – 10%的提升。”
如果要在4.11及以上版本中使用此功能,你可以到项目设置中,在渲染类别下查找“Instanced Stereo”进行相应的设置。
禁用繁重的后处理器(DisableHeavy Post-Processors)
某些后处理的VR效果需要花费更多的计算代价(如Ambient Occlusion)。 其他方面如镜头光晕,这在VR也是让人头疼的地方,因为它会破坏游戏的沉浸感,使得玩家明显感觉到自己是在透过镜头看东西。
为了在项目中禁用后处理功能,你可以去编辑>项目设置>渲染中进行设置。 你也可以在后处理卷中执行相同的操作。 请记住,后处理卷可以覆盖以下指定的项目范围设置。
减少场景复杂性(Reduce SceneComplexity)
当你使用当前硬件,很难保持90帧每秒帧率时。 你可能需要重新检查下以前的设置限制,并查看你的场景复杂性,如动态阴影,大气烟雾效果和网格数量。
最大限度地减少透支对保持游戏的性能至关重要。 大量的半透明表面和粒子效果很容易导致你的帧速率下降。 要显示当前着色器复杂度/透支,你可以按Alt + 8(Alt + 4返回默认视图)。 从Elemental Demo底部图片了解大气效果对你的帧率有多大影响(绿色表示好,红色表示坏,白热表示非常坏,每个像素大约2000个着色器指令)
动态阴影和灯光对性能也有很大的影响。 用可能多的光线Bake,可以降低每帧的消耗成本。
渲染命令列表(List ofRendering Commands)
Nick Whiting和Nick Donaldson精彩的演讲包含了一系列渲染命令,用于VR中对GPU进行优化。 你可以从下面的列表中找到。 我推荐开发者们看一下他们的谈话talk by Nick Whiting and Nick Donaldson ,因为它包含了一般的虚拟现实的一些基础的信息。
要测试这些命令,首先打开命令控制台。 一旦你确定了要把某些命令包含在你的项目,你可以在[/Script/Engine.RendererSettings]下/Config/DefaultEngine.ini文件中进行配置(提示:在添加命令之前,检查命令是否在列表中)
疑难解答(Troubleshooting)
HTC Vive Troubleshooting Guide
Vive Specific(非PRE版本):一旦你启动编辑器,SteamVR可能会显示“未就绪”,这意味着某些东西可能重叠,导致抖动和眩晕。 更多信息和解决这个问题的方法可以在AnswerHub Thread上面找到。 Vive的下一代设备(VivePRE)不会再有这个问题,因为他们用直接模式的显示,你必须更新自己的显卡驱动程序以支持直接模式。
参考网站及论坛:
Official Documentation Main Page
FATED and the quest for optimized VR
翻译自:
http://www.tomlooman.com/getting-started-with-vr/>;
已获得作者翻译授权。
译注:此译文与<【译】虚幻引擎4的VR开发模板指南>属同系列,可相互参考。