3D 显示-虚幻引擎 5 开发指南

简介和先决条件

1.1. 简介

本文档旨在为您提供开发在采用 SpatialLabs 技术的设备上运行的沉浸式体验所需的信息。虽然 SpatialLabs 的硬件和外形尺寸是独一无二的,但 SpatialLabs 应用程序与 VR 应用程序非常相似,因为它们都以立体方式渲染,并且 Unreal 虚拟摄像头会在 3D 空间中跟踪用户的头部。尽管如此,SpatialLabs 还是拥有一套独特的功能,您可以在项目中使用这些功能来提供 AR/VR 设备无法实现的体验。 


1.2. 什么是 SpatialLabs

SpatialLabs 的核心是利用软件和硬件功能的组合,将平面二维显示屏转变为三维舞台,内容可以在其中定位(并因此被感知)在不同的深度。由于用户不需要任何可穿戴设备或额外的硬件,因此这通常被称为裸眼 3D 或立体 3D。

能够以真正的 3D 形式呈现内容具有诸多优势,例如增强沉浸感以及更好地感知形状、位置和深度。它还为您提供了一种新的媒介,让您可以将您的想法变为现实,并以创造性的方式吸引用户并为他们提供价值。

SpatialLabs 通过构建几个组件来实现所有这些目标:

  • 游戏引擎:借助 SpatialLabs 插件,Unreal 可以立体渲染您的场景,生成一对图像,每只眼睛各一个
  • 眼动追踪相机:通过向每只眼睛投射不同的图像来感知深度。由于不涉及可穿戴设备,安装在设备上的一对立体摄像头会跟踪用户眼睛在 3D 空间中的位置
  • 透镜:使用 Unreal 渲染的图像对和摄像头跟踪的用户眼球位置,透镜可以将左图像的像素投射到左眼,反之亦然,从而产生 3D 效果。据说透镜会“编织”立体图像对,以便显示最终的组合图像,其中帧中的每个像素都指向正确的眼睛

1.3. 先决条件

要开发 SpatialLabs 体验,需要满足以下条件:

  • 安装了 SpatialLabs Experience Center Pro 的采用 SpatialLabs 技术的 Acer 设备。请注意,您可以在非 SpatialLabs 设备上开发您的项目。但是,您需要一台设备才能预览、测试和运行您的应用程序。Unreal 项目只能在 SpatialLabs Pro 版本上运行。 
  • 使用兼容版本安装虚幻引擎(请参阅下文了解版本兼容性信息)。
  • 将 SpatialLabs Unreal 插件的副本添加到您的引擎文件夹(说明如下)。 
  • 为了打包你的项目,你需要安装 Visual Studio(推荐 VS2022),其中安装“.NET 桌面开发”、“使用 C++ 的桌面开发”和“使用 C++ 的游戏开发”工作负载,并包含组件“虚幻引擎安装程序”

1.4. 引擎版本兼容性

目前UE5版本5.3和UE4版本4.26/4.27处于维护中,本文档针对UE5.3插件。


注意

所有虚幻截图均来自虚幻 5.3 版。用户界面可能与其他引擎版本略有不同。

安装插件

2.1. 下载插件

从SpatialLabs 开发者网站下载适用于虚幻引擎 5 的 SpatialLabs 插件,然后解压缩下载的文件。

2.2. 创建插件文件夹

在 Unreal 项目中创建一个新文件夹,并将其命名为“Plugins”。将解压后的“SpatialLabs”文件夹复制到这个新建的 Plugins 文件夹中。

注意

确保复制下载的压缩文件夹内的 SpatialLabs 文件夹,而不是解压后的文件夹本身。

2.3. 启用 SpatialLabs 插件 

启动 Unreal 编辑器并加载您的项目,然后通过转到“编辑”➤“插件”导航到插件菜单。您应该能够通过选择左侧面板中的“已安装”➤“SpatialLabs”找到 SpatialLabs 插件。确保选中“已启用”框以激活 SpatialLabs 插件。 

2.4. 启用“在 VR 中启动”  

在顶部菜单栏中的“编辑”下,导航到“项目设置”,然后转到“项目”➤“描述”➤“设置”。确保“在 VR 中启动”已启用,如下图所示。这是必需的,以便 Unreal 以立体 3D 模式渲染您的应用程序。 

2.5. 设置分辨率和窗口模式 

SpatialLabs 插件需要特定的分辨率和窗口模式才能正常工作。要进行设置,请导航到项目的Config 文件夹并找到文件 GameUserSettings.ini(如果缺少,请创建该文件)。打开文件进行编辑并添加以下几行:

[/Script/Engine.GameUserSettings]   
分辨率大小X=3840   
分辨率大小Y=2160   
全屏模式=1

2.6. 打开/关闭 SpatialLabs 立体 3D

该插件提供了两个蓝图函数来控制立体 3D 效果。它们可以在蓝图编辑器中的操作菜单中找到。这两个函数是:

  • 启用 SpatialLabs 3D:在游戏模式下启用立体 3D
  • 禁用 SpatialLabs 3D:在游戏模式下关闭立体 3D

通过调用这两个函数可以手动开启/关闭游戏中的立体3D效果,也可以根据游戏视口的焦点状态自动切换立体3D效果。 

在顶部菜单栏中的“编辑”下,导航到“项目设置”,然后转到“引擎”➤“常规设置”➤“默认类”,将游戏视口客户端的默认类分配给插件提供的类“SpatialLabsGameViewportClient”,然后重新启动编辑器。这将使您的游戏在失去焦点时关闭 3D 效果,并在游戏视口再次获得焦点时重新打开 3D。

在 SpatialLabs 中查看场景

3.1. 在编辑器中预览 

SpatialLabs 插件可让您在编辑器会话中快速激活立体 3D 模式,该模式显示在独立的游戏窗口中。要执行此操作,请在编辑器工具栏中找到“播放”下拉菜单,然后选择“VR 预览”。

3.2. 快速启动 

还可以通过右键单击“ .uproject”文件并选择“启动游戏”来在编辑器外部快速启动未打包的项目。

注意

为了正确启用立体 3D 模式,您的虚幻应用程序必须按照上面提供的说明在 3840×2160窗口全屏模式下运行。

虚拟屏幕

启用 SpatialLabs 插件后,会生成一个代表物理显示器的虚拟屏幕。然后,虚幻相机将与用户的眼睛相对应,其相对于虚拟屏幕的位置和视点由跟踪的眼睛位置决定。这样,用户就可以通过显示器感知立体深度。一些视图目标控件可以自动返回到此虚拟屏幕,例如关卡序列中的 CameraActor 或 CineCameraActor。 

4.1. 兵种定制

要设置主 Pawn 蓝图,请添加一个子“Scene”组件(下面名为“VirtualScreenRoot”)。在此“Scene”组件下,添加一个名为“XRCamera”的“Camera”组件。以下层次结构确保虚拟屏幕从视图目标接收相同的位置和旋转值。

成分姓名
场景虚拟屏幕根
相机XR相机

要在编辑器视口中查看特定相机的相机视锥小工具,请在详细信息面板中找到相机组件,然后启用属性“允许绘制视锥”。

4.2. 兵的放置 

将 Pawn 添加到关卡后,它通常会放置在与模型相同的位置。下图显示模型与虚拟屏幕(红色窗口)一起显示。这种放置方式允许用户在立体 3D 中轻松舒适地将视线集中在模型上,模型会略微突出于显示屏。

如果将模型放置在Pawn前面,它将显示在虚拟屏幕内部,从而产生正视差。

相反,如果将模型放置在Pawn后面,它就会弹出虚拟屏幕,造成负视差。

SpatialLabs 缩放功能

默认情况下,虚拟屏幕基于 SpatialLabs 显示器的物理尺寸。因此,您的 Unreal 场景及其中的对象将以真实 1:1 比例显示。SpatialLabs 缩放变量允许您自定义此行为,并根据项目需求覆盖缩放因子。SpatialLabs 缩放值为 1 时,表示物理尺寸精确匹配(1:1)。值为 5 时缩放比例变为 1:5,值为 10 时变为 1:10,使场景中的对象显示更小。

SpatialLabs Scale = 1SpatialLabs Scale = 1.5

5.1. 缩放设置

每个 Unreal 关卡均应用其独有的 SpatialLabs 缩放变量,默认值为 1。您可在运行时通过 “设置 SpatialLabs 缩放” 蓝图函数以编程方式设置该值。

虚拟屏幕上的 UMG 控件

6.1. 部件蓝图 API


该插件提供了三个蓝图函数,可在蓝图编辑器的动作菜单中找到。这些函数包括:

  • 添加到 SpatialLabs 视口:将部件添加到虚拟屏幕
  • 清除 SpatialLabs 视口:清除虚拟屏幕上的所有部件
  • 从 SpatialLabs 视口移除:从虚拟屏幕移除指定部件

在下面的示例中,Create Widget 节点创建 Widget 蓝图,然后将其添加到 SpatialLabs 视口。

注意

连续调用“添加到 SpatialLabs 视口”函数时,可能需要插入“延迟”节点,以避免稍后插入的小部件无法正确添加到视口。您可以测试 0.2 秒的延迟,但可能需要进行实验才能找到适合您项目的延迟值。

6.2. 调整部件布局与锚定


部件蓝图编辑器提供多种部件类型,供开发者设计用户界面的布局与外观。为确保插件正确渲染左右眼的部件,需遵循以下规则:

首先,在部件层级结构中添加画布面板作为根节点。画布面板部件类型用于在虚拟屏幕上以绝对定位方式排列 UI 布局。若选择其他类型的面板作为根布局,可能导致子部件无法在左右眼中正确渲染。

其次,在细节面板中,将所有作为根画布面板子部件的部件的锚点属性设置为左上

配置 SpatialLabs


在顶部菜单栏的编辑中,导航至项目设置,然后进入插件SpatialLabs。SpatialLabs 插件在立体 3D 模式下定义全局配置,这些设置包括:

常规

  • 设备可用
    若 SpatialLabs 设备可用,则为 True。
  • 显示视锥体 Gizmo
    视锥体 Gizmo 代表 3D 关卡中的虚拟屏幕和视点。

虚拟屏幕设置

  • SpatialLabs 缩放
    此值将乘以每个地图的 “世界到米” 值(位于其世界设置中),以便为项目中的所有地图应用统一缩放。
  • 缩放模式
    • 缩放尺寸:3D 关卡中的虚拟屏幕将填充 SpatialLabs 显示器。
    • 原始尺寸:3D 关卡中的虚拟屏幕尺寸将由当前 SpatialLabs 显示器决定。
  • 屏幕尺寸
    定义 3D 关卡中虚拟屏幕的尺寸。

视图投影

  • 动态相机 FOV(默认:True)
    默认情况下,相机会根据用户眼睛位置动态计算 FOV。启用此选项后,相机将使用自身的 FOV 值。
    禁用动态相机 FOV 会显著改变观看体验,适用于部分项目(非全部)。建议测试两种行为以确定最适合项目的方案。
  • 使用固定头部位置
    此功能将头部位置锁定到 “固定头部位置”(见下文)指定的位置。
    适用于不需要相机随玩家头部移动 / 旋转的场景。
  • 固定头部位置
    启用 “使用固定头部位置” 时使用的头部位置。
  • 相机偏移
    相对于显示器,在 X / 向前轴上偏移活动相机。
    警告:此选项应作为最终解决方案使用。建议通过移动相机调整视锥体,而非直接使用偏移。

鼠标与头部交互


以下是设置鼠标和头部交互时可用的蓝图函数说明。请注意,此功能仅适用于 SpatialLabs 支持的设备。这些函数包括:

  • 获取鼠标世界位置:检索相对于显示平面的鼠标位置(世界空间坐标)。
  • 获取头部到鼠标射线:从用户双眼中心向鼠标位置投射射线(世界空间坐标)。
  • 获取头部位置:检索用户双眼中心相对于相机组件的位置(本地空间坐标)。
  • 获取头部屏幕空间位置:检索用户双眼中心相对于追踪传感器组件的位置(本地空间坐标)。
  • 获取原始眼睛位置:检索用户双眼相对于相机组件的位置(本地空间坐标)。
  • 获取显示尺寸:检索屏幕的物理尺寸(单位:厘米)。

下面的示例展示了如何绘制与虚拟屏幕对齐的鼠标调试点,以及如何从用户的头部到鼠标进行正确的追踪。

已知问题

9.1. UMG问题 

此列表旨在让开发人员了解当前不支持哪些默认小部件,以及实现常见小部件功能或外观的替代方法。

部件已知问题替代方案
Button点击 / 按下 / 释放事件无法通过鼠标左键触发。可通过配置自定义按钮,使用 Border 部件来触发鼠标按下 / 释放 / 移动 / 双击事件。
Progress Bar(进度条)进度条填充颜色和跑马灯图像显示不正确,但部件蓝图中的进度百分比变量值仍可访问。在 ProgressBar 部件上方覆盖一个 Image 部件,使用动画纹理或材质。
ComboBox列表项文本内容不显示,且光标悬停在列表项上时悬停效果无效。放置一组 Button 部件来模拟下拉菜单的外观和交互效果。
Editable Text(可编辑文本)输入的文本内容不显示,但部件蓝图中仍可访问文本内容本身。覆盖一个 TextBlock 部件,接收来自 Text Box 部件的文本内容,并确保 TextBlock 的可见性设置为 不可命中测试(Not Hit-Testable)

表现

10.1. 注意事项

SpatialLabs 插件以高分辨率渲染两个纹理(每只眼睛一个)。任何随显示像素数量而变化的渲染功能(例如 TAA、AO、SSR、其他屏幕空间效果)都是影响性能的主要因素。这些是优化性能时首先要考虑的因素。

10.2. 性能优化

10.2.1. 自定义 DefaultScalability.ini

建议使用自定义 DefaultScalability 配置文件来调整渲染设置。虽然阴影贴图分辨率等设置可以保持较高水平(因为它们不会随屏幕分辨率缩放),但如果性能成为问题,我们建议先降低以下设置:

  • r.AmbientOcclusionMaxQuality
  • r.BloomQuality
  • r.色调映射器.质量
  • r.抗锯齿方法

10.2.2. VSync 和最大帧速率

尽可能启用 VSync,因为禁用它会导致屏幕撕裂。目标帧速率应始终等于或高于显示器的刷新率(60Hz)。这可以为用户提供最佳体验。您还可以限制最大帧速率以减少系统负载。这可以通过将以下几行添加到项目的 DefaultEngine.ini 配置文件中来实现:

[/Script/Engine.RendererSettings]       
r.Vsync=1       
t.MaxFPS=60

10.2.3. DLSS

DLSS 3.7 版可与 SpatialLabs 插件配合使用,建议用于复杂且渲染量大的场景。要安装 DLSS,请按照以下步骤操作:

  1. 从NVidia 网站下载 DLSS 
  2. 安装插件。建议将插件安装为引擎插件。插件下载附带有关如何安装的进一步说明。
  3. 在 UE5 项目中启用 DLSS 插件。
  4. 现在可以通过蓝图或控制台命令控制 DLSS 质量。

注意

DLSS 本身具有固定成本。在高帧速率(帧时间小于 10 毫秒)下,启用 DLSS 带来的性能增益可能低于固定成本。        

10.3. 性能分析

10.3.1. RenderDoc

RenderDoc 是一个有用的工具,可以用来分析 GPU 并查看渲染管道中的瓶颈在哪里。

10.3.2. 虚幻统计数据

UE5 中的内置统计系统(使用“stat startfile”和“stat stopfile”)可以正常工作,并可用于捕获统计文件。可以使用 Unreal Frontend 加载此文件来分析 CPU 和 GPU 性能。

10.3.3. 配置文件GPU

此工具无法使用,且与 SpatialLabs 插件不兼容。外部窗口不显示。请改用 STAT GPU、RenderDoc 或 Unreal Stats 系统。

内容设计建议

以下列表提供了有关如何设计可在 SpatialLabs 中使用的内容的一组建议。

  • 避免将物体置于过远距离(如太阳或月亮),或离用户眼睛过近。用户会难以聚焦这些物体。
  • 避免在物体间制造过大的深度差异。人眼难以适应深度突变,深度变化应尽量微小,或通过渐进动画等方式平缓过渡。
  • 避免背景过于遥远。用户头部移动与远景物体结合,会导致场景显得晃动。
  • 避免高对比度。这会加剧 “重影效应”(左眼图像的少量内容被右眼捕捉,反之亦然,高对比度会放大这种现象)。
  • 避免使用景深(DOF)。景深会导致用户试图聚焦屏幕特定区域时,因画面模糊而产生视觉干扰。
  • 避免 “边界违规”。物体需完整显示与渲染。若物体与显示边界重叠且部分被遮挡,会损害深度感知与沉浸感。
  • 避免高频内容(如小字体文本、极高分辨率纹理)。此类内容显示时会出现明显的镜头图案,使用户难以辨识。

建议操作:

  • 物体适配屏幕:设计物体时使其尺寸适配屏幕。若物体超出屏幕边缘,用户看向屏幕边界时会破坏沉浸感。
  • 控制镜头移动:放慢并尽量减少镜头运动。快速移动(如 180 度旋转)极易导致用户方向感混乱。
  • 分离 2D 与 3D 元素:将 2D 元素与 3D 物体分开摆放。若 2D 元素覆盖在 3D 物体上,用户会难以对焦。确保元素间保留充足空间,最好将 UI 元素置于避开 3D 物体的位置(如屏幕边缘)。
  • 优化图像清晰度:生成清晰图像(例如增加控制台变量 r.tonemapper.sharpen 的值),避免启用动态模糊等效果。尽管这类效果在 2D 显示中更具电影感,但会降低用户对 SpatialLabs 显示屏 3D 效果的感知。
  • 高频测试:定期在 SpatialLabs 显示屏上测试,确保整个体验过程中质量与舒适度始终达标。

Was this helpful?

1 / 0

http://xzh.i3geek.com
发表回复 0