Choose your operating system:
Windows
macOS
Linux
虚拟现实(VR)是一种沉浸式的新媒介,在这类平台上编辑内容并向用户展示时,需要考虑到独特的因素。考量因素包括了用户舒适度、内容优化,以及平台局限。本页面可作为开发VR项目时相关主题的参考。
VR项目设置
VR项目可以为蓝图或者C++。
在创建针对特定VR平台的新项目时,首先在 游戏(Games) 类别下选择 虚拟现实应用(VR Template),然后在 项目设置(Project Settings) 中选择以下选项:
可缩放3D或2D(Scalable 3D or 2D)
已禁用光线追踪(Raytracing Disabled)
移动设备/平板电脑(Mobile / Tablet)
不带初学者内容包(No Starter Content)
这些设置会创建一个虚幻引擎项目,并启用最少的渲染功能。这样可以确保项目一开始就有良好的帧率,你只要添加需要的渲染功能即可。
在创建项目后,设置以下项目设置,以改善应用的性能:
进入 编辑->项目设置->描述,并启用 以VR启动。
在 编辑->项目设置->渲染->前向渲染器 中,启用前向着色。
在 编辑->项目设置->渲染->默认设置 中,将 抗锯齿方法 设置为多重采样抗锯齿。
在 编辑->项目设置->渲染(Rendering)->VR 中,启用实例化立体。 * 对于移动设备VR体验,在 **编辑->项目设置->渲染->VR** 中启用移动多视图。
VR .ini设置
请查看可延展性参考,了解延展应用的图形、改善性能或质量的解释与例子。以下表格描述了部分主机变量,以及VR项目的推荐值。
主机变量 |
推荐值 |
说明 |
---|---|---|
vr.PixelDensity |
1 |
1 是HMD目前使用的理想分辨率。较低的值会导致运行速度更快,但也会造成欠采样(更为模糊)。超过 1 时运行速度较慢,同时会超采样(更为清晰)。 |
r.SeparateTranslucency |
0 |
由于填充帧限制,对移动VR体验来说开销较大。建议禁用该功能。 |
r.HZBOcclusion |
0 |
更多详情可见可视性和遮挡剔除的层级Z缓冲遮挡部分。 |
以下.ini设置摘自虚幻引擎4支持的VR演示《Showdown》。你可以使用这些设置作为起点,将它们复制到项目的 Config/DefaultEngine.ini 文件中的 SystemSettings 下。
[SystemSettings]
vr.PixelDensity=1
r.SeparateTranslucency=0
r.HZBOcclusion=0
r.MotionBlurQuality=0
r.PostProcessAAQuality=3
r.BloomQuality=1
r.EyeAdaptationQuality=0
r.AmbientOcclusionLevels=0
r.SSR.Quality=1
r.DepthOfFieldQuality=0
r.SceneColorFormat=2
r.TranslucencyVolumeBlur=0
r.TranslucencyLightingVolumeDim=4
r.MaxAnisotropy=8
r.LensFlareQuality=0
r.SceneColorFringeQuality=0
r.FastBlurThreshold=0
r.SSR.MaxRoughness=0.1
r.rhicmdbypass=0
sg.EffectsQuality=2
sg.PostProcessQuality=0
VR帧率优化
大部分VR应用都会执行自己的流程来控制VR帧率。因此,你需要在虚幻引擎4中禁用多个会影响VR应用的一般项目设置。
请跟随以下步骤,禁用虚幻引擎的一般帧率设置:
在编辑器主菜单中,选择编辑->项目设置,打开项目设置窗口。
在项目设置窗口中,在引擎部分中选择一般设置。
在帧率部分下:
禁用平滑帧率。
禁用使用固定帧率。
将自定义时间步设置为None。
点击应用。
VR世界场景缩放
为了在VR平台上保障最佳的用户体验,确保世界场景缩放的正确是最重要的方式之一。错误的缩放可能导致用户遭遇各类感官问题,甚至可能引发模拟症。在VR中,物体距离玩家摄像机0.75米至3.5米时观看效果最佳。在虚幻引擎4中,1个虚幻单位(UU)等于1厘米(CM)。这意味着在虚幻引擎中放置物体时,它们在距离玩家摄像机(使用VR时)75至350虚幻单位时观看效果最佳。
距离 |
虚幻单位距离 |
---|---|
1 厘米 |
1 虚幻单位 |
1 米 |
100 虚幻单位 |
1 千米 |
100,000 虚幻单位 |
你可以在 世界场景设置 中找到 世界到米 变量,用它调整世界的缩放。这个数字的升降会使用户感觉自己在世界场景中相应地变大或缩小。假设你使用1虚幻单位=1厘米来构建内容,将 世界到米 设置为 10 会使世界看起来非常广阔,将其设置为 1000 则会使世界变得非常狭小。
VR与模拟症
模拟症是一种在沉浸式体验中影响用户的晕动症。下表介绍的最佳实践能够限制用户在VR中体验到的不适感。
保持帧率: 低帧率可能导致模拟症。尽可能地优化项目,就能改善用户的体验。下表罗列了XR平台的推荐帧率。
HMD设备
目标帧率
Oculus Rift S
90
Oculus Quest 1和2
90
HTC Vive
90
HTC Vive Pro
90
Valve Index
最低90,最高144
HP Reverb
90
Windows Mixed Reality VR
90
PSVR
视情况而定: 60/120、90/90和120/120
HoloLens 2
60
ARKit
60
ARCore
60
用户测试: 让不同的用户进行测试,监控他们在VR应用中体验到的不适感,以避免出现模拟症。
让用户控制摄像机: 电影摄像机和其他使玩家无法控制摄像机移动的设计是沉浸式体验不适感的罪魁祸首。应当尽量避免使用头部摇动和摄像机抖动等摄像机效果,如果用户无法控制它们,就可能产生不适感。
视野(FOV)必须和设备匹配: FOV值是通过设备的SDK和内部配置设置的,并且与头显和镜头的物理几何体匹配。因此,FOV无法在虚幻引擎中更改,用户也不得修改。如果FOV值经过了更改,那么在你转动头部时,世界场景就会产生扭曲,并引起不适感。
使用较暗的光照和颜色,并避免产生拖尾 在设计VR元素时,你使用的光照与颜色应当比平常更为暗淡。在VR中,强烈鲜明的光照会导致用户更快出现模拟症。使用偏冷的色调和昏暗的光照,就能避免用户产生不适感,还能避免屏幕中的亮色和暗色区域之间产生拖尾。
移动速度不应该变化: 用户一开始就应当是全速移动,而不是逐渐加快至全速。
避免使用会大幅影响用户所见内容的后期处理效果: 避免使用景深和动态模糊等后期处理效果,以免用户产生不适感。
VR摄像机设置
虚幻引擎4中的VR摄像机设置完全取决于VR体验是否为坐式或站式:
坐式体验: 你需要人工抬高角色站立时的摄像机原点,将 视线水平 设置为Pawn碰撞胶囊体 圆柱体高度 负值的一半。
站式体验: 确保摄像机原点设置为 0,相对于通常摆放在地面上的Pawn根部。在Pawn底部的场景组件上附加一个摄像机组件,使其位于地面水平。
VR角色设置
使用VR头显的角色的设置与标准角色略有不同。角色的 高度、宽度、速度 和 摄像机位置 都必须略作修改,才能适用于VR角色。
在为VR世界场景构建物体时,数字物体的缩放必须和现实世界中的物体相同。如果缩放较大或较小,就会破坏你尝试实现的沉浸感。
角色高度和宽度
角色高度和宽度应当尽可能地模拟出现实世界中的大小,过大或过小都可能破坏你尝试实现的沉浸感。
属性 |
虚幻引擎4默认 |
推荐VR |
---|---|---|
高度 |
192 厘米 |
176 厘米 |
宽度 |
84 厘米 |
68 厘米 |
移动速度
VR移动速度属性并没有推荐的设置,因为你选择的移动速度取决于你尝试实现的体验。例如,在《Elemental》VR演示中,移动速度就被设置为正常速度的1/4。如果你选择了过快的移动速度,就有可能引发模拟症。
属性 |
虚幻引擎4默认 |
推荐VR |
---|---|---|
移动速度 |
60 米/秒 |
24 米/秒 |
摄像机位置
VR摄像机的位置应当略低于基础视线水平,以符合角色的视线高度。
属性 |
虚幻引擎4默认 |
推荐VR |
---|---|---|
基础视线水平 |
180 厘米 |
160 厘米 |
VR内容考量
在创建VR内容时,你需要注意的是,用户可以从多个角度观看内容。请使用下表作为创建VR内容的参考:
缩放: VR世界场景中的物体缩放应当尽可能地模拟真实情况。物体过大或过小可能会导致困惑,或者模拟症。
多边形面缺失: 在非沉浸式体验中,物体上玩家无法看到的多边形面通常会被移除。然而,在VR体验中,玩家可以更自由地环顾四周,多边形面的缺失可能会让用户看到不该看见的事物。
光照类型: 在VR项目中始终要使用静态光源和光照贴图,这是渲染开销最低的光照选择。如果你需要使用动态光照,一定要尽量少用动态光源,并且确保它们不会相互接触。如果有户外场景,你可以将定向光源的设置从固定改为动态,随后开启级联阴影贴图 (CSM)。你随后可以更改设置,在尽可能简单的情况下获得阴影效果。
VR和VFX: 部分VFX效果,例如使用子UV纹理来模拟火焰或烟雾,这些在VR中的观看效果不佳。你依然需要使用静态网格体来模拟爆炸和烟迹等效果,不能使用2D粒子。 近场效果和距离摄像机很近的效果在VR中表现良好,但必须使用静态网格体粒子组成。
VR和透明度: 在3D图形中,渲染透明度的开销极其昂贵,因为在通常情况下,透明度需要在每一帧中重新评估,以确保不会有任何变化。由于要重新评估,在VR中渲染透明度的开销变得过于昂贵,得不偿失。不过为了避免这个问题,你可以使用 DitherTemporalAA 材质函数。该材质函数可以让材质看似使用了透明效果,还能避免自排序等常见的透明度问题。
仿制一切: 以取巧的方式重现动态阴影或动态光照等开销高昂的渲染选项,就能让你在VR中实现性能目标。在《Showdown》中,让角色逐帧投射动态阴影的开销过于昂贵,因此项目中取消了动态阴影的使用。然而,这也让角色在移动时如同在漂浮一般。为了修正这一问题,我们使用了仿制的模糊阴影,它们能根据角色与场景中物体的距离,动态地调节位置和强度。这样角色在靠近地面(或其他物体)时就仿佛投下了阴影。
已知局限
下表列出了可能因HMD设计而无法在VR中获得预期效果的功能,以及可能的解决方案。
屏幕空间反射(SSR): 虽然SSR能够在VR中生效,但其产生的反射可能与真实世界中的反射不匹配。除了SSR之外,你还可以使用反射探头,它们的开销较低,也较不容易出现反射匹配的问题。
屏幕空间全局光照: 在HMD中,屏幕空间技巧可能会使两眼显示的内容出现差异。这些差异可能导致用户产生不适感。请参考光照类型了解在VR中推荐替换的光照类型。
光线追踪: VR应用目前使用的光线追踪无法维持必要的分辨率和帧率,难以提供舒适的VR体验。
2D用户界面或广告牌Sprites: 2D用户界面或广告牌Sprite不支持立体渲染,因为它们在立体环境下表现不佳。你可以改用3D世界场景中的控件组件。请参考创建3D控件交互,了解如何创建控件。
法线贴图问题
在VR中观看法线贴图或物体时,你会发现它们并没有产生之前的效果,这是因为法线贴图没有考虑到双目显示或动态视差。因此,在VR设备下观看时,法线贴图通常是扁平的。然而,这并不意味着你不应该或不需要使用法线贴图,只不过你需要更仔细地评估,传输进法线贴图的数据是否可以用几何体表现出来。以下是一些能够替代法线贴图的技巧。
视差贴图: 视差贴图是法线贴图的升级版,它考虑到了法线贴图未能考虑的深度提示。视差贴图着色器可以更好地显示深度信息,让物体看起来拥有更多细节。这是因为,无论你从哪个角度观看,视差贴图总是会自行修正,展示出你的视角下正确的深度信息。视差贴图最适合用于鹅卵石路面,以及带有精妙细节的表面。