Unity 中的照相机设置

当佩戴混合现实头戴显示设备时,它将成为你的全息世界的中心。 Unity 照相机组件会自动处理立体渲染,并随着你的头部进行移动和旋转。 但是,若要完全优化视觉质量和全息影像稳定性,应设置如下所述的照相机设置。

HoloLens 与 VR 沉浸式头戴显示设备

Unity 照相机组件上的默认设置适用于传统的 3D 应用程序,由于这种应用程序不具备真实世界,因此需要类似天空盒的背景。

  • 沉浸式头戴显示设备上运行时,你会渲染用户看到的所有内容,因此你可能需要保留天空盒
  • 但是,当在 HoloLens 等全息头戴显示设备上运行时,真实世界应显示在照相机渲染的所有内容之后。 将照相机背景设置为透明(在 HoloLens 中,黑色渲染为透明色),而非“天空盒”纹理:
    1. 选择“层次结构”面板中的“主照相机”
    2. 在“检查器”面板中,找到照相机组件,并将“清除标志”下拉列表从“天空盒”更改为“纯色”
    3. 选择背景颜色选取器,并将 RGBA 值更改为 (0, 0, 0, 0)
      1. 如果从代码进行此设置,可以使用 Unity 的 Color.clear

MRTK 将基于照相机系统配置文件中的配置自动处理特定相机设置。

命名空间:Microsoft.MixedReality.Toolkit.CameraSystem
类型:MixedRealityCameraSystem

为了检查照相机的不透明度,MixedRealityCamera 系统具有 IsOpaque 属性

CoreServices.CameraSystem.IsOpaque;

照相机设置

无论开发哪种体验,主照相机始终是附加到设备的头戴式显示器的主要立体渲染组件。 如果将用户的起始位置想像为 (X: 0, Y: 0, Z: 0),可以更容易地设计应用。 由于主照相机可跟踪用户头部的移动,因此可以通过设置主照相机的起始位置来设置用户的起始位置。

你需要做出的核心选择是,要为 HoloLens 还是 VR 沉浸式头戴显示设备进行开发。 做好决定后,请跳至任何适用的设置部分。

HoloLens 照相机设置

对于 HoloLens 应用,需要针对所有想要锁定到场景环境中的对象使用定位点。 建议使用无界限空间来最大程度地提高稳定性,并在多个房间中创建定位点。

按照此分步教程在 Unity 项目中添加并自动配置混合现实工具包。 还可以直接使用适用于 Unity 的 MRTK 中的 MixedRealityPlayspace 类,并将“目标级别”设置为“世界”

MRTK settings window

MRTK 应自动处理游戏空间和照相机的位置,但最好再检查一下:

MRTK playspace

  1. 从“层次结构”面板中,展开“MixedRealityPlayspace”这一 GameObject,并查找“主照相机”子对象
  2. 在“检查器”面板中查找“转换”组件,并将“位置”更改为“(X: 0, Y: 0, Z: 0)”

VR 照相机设置

Windows Mixed Reality 支持各种体验级别的应用,既支持仅限方向的应用和坐姿级别应用,也支持房间级别应用。 在 HoloLens 上,你可以进一步构建世界级别应用,让用户可以步行 5 米以上的距离,探索建筑的整个平面甚至更远的地方。

在 Unity 中构建混合现实体验的第一步,是确定应用的目标体验级别

房间级别或站立级别

注意

如果要为 HL2 构建混合现实体验,建议创建一种视线水平的体验,或考虑使用场景理解来推断场景地板。

使用适用于 Unity 的 MRTK 的 MixedRealityPlayspace 类,并将“目标级别”设置为“房间”或“站立”

MRTK settings window

MRTK 应自动处理游戏空间和照相机的位置,但最好再检查一下:

MRTK playspace

  1. 从“层次结构”面板中,展开“MixedRealityPlayspace”这一 GameObject,并查找“主照相机”子对象
  2. 在“检查器”面板中查找“转换”组件,并将“位置”更改为“(X: 0, Y: 0, Z: 0)”

坐姿体验

使用适用于 Unity 的 MRTK 的 MixedRealityPlayspace 类,并将“目标级别”设置为“坐姿”

MRTK settings window

MRTK 应自动处理游戏空间和照相机的位置,但最好再检查一下:

MRTK playspace

  1. 从“层次结构”面板中,展开“MixedRealityPlayspace”这一 GameObject,并查找“主照相机”子对象
  2. 在“检查器”面板中查找“转换”组件,并将“位置”更改为“(X: 0, Y: 0, Z: 0)”

设置照相机背景

如果使用的是 MRTK,则会自动配置和管理照相机的背景。 对于 XR SDK 或旧版 WSA 项目,建议在 HoloLens 上将照相机的背景设置为纯黑色,在 VR 上则保留天空盒设置。

使用多个照相机

当场景中有多个照相机组件时,Unity 可根据哪个 GameObject 具有 MainCamera 标记,从而知道使用哪个照相机进行立体渲染。 在旧版 XR 中,它还可使用此标记来同步头部跟踪。 在 XR SDK 中,头部跟踪由附加到照相机的 TrackedPoseDriver 脚本驱动。

共享深度缓冲区

根据要渲染的头戴显示设备类型,将应用的深度缓冲区共享给 Windows 的每一帧,将使应用在息影像稳定性方面获得以下两种提升之一:

  • 在提供深度缓冲区时,VR 沉浸式头戴显示设备可以处理位置重投影,调整你的全息影像以防止错误预测位置和方向
  • HoloLens 头戴显示设备具有几种不同的方法。 提供深度缓冲区时,HoloLens 1 将自动选择焦点,优化与大部分内容相交的平面上的全息影像稳定性。 HoloLens 2 将使用深度 LSR(请参阅备注)来稳定内容。

MRTK 的配置对话框将尝试为 XR SDK 和旧版 WSA 设置深度缓冲区,但最好检查这些选项卡并验证 Unity 中的设置。

使用剪切平面

在混合现实中,渲染离用户太近的内容可能会让人产生不舒服的感觉。 可以在照相机组件上调整近点剪切平面和远点剪切平面

  1. 选择“层次结构”面板中的“主照相机”
  2. 在“检查器”面板中,查找照相机组件“剪切平面”,并将“近点”文本框从“0.3”更改为“0.85”。 渲染得更近的内容可能导致用户觉得不舒服,应根据渲染距离指南加以避免。

重新定位照相机

如果要构建坐姿级别体验,可通过调用旧版 XR 中的 XR.InputTracking.Recenter 方法或 XR SDK 中的 XRInputSubsystem.TryRecenter 方法,将 Unity 的世界原点重新定位到用户当前头部位置。

隐形传送

此功能通常保留用于 VR 体验:

MRTK 提供了一个内置的传送系统,该系统可自动在铰接式手和控制器之间运行。

重投影模式

HoloLens 和沉浸式头戴显示设备都将重新投影应用渲染的每一帧,这样就可以在发出光子时针对用户的实际头部位置的任何错误预测进行调整。

默认情况下:

  • 如果应用为给定帧提供深度缓冲区,VR 沉浸式头戴显示设备将负责位置重投影。 沉浸式头戴显示设备还会调整全息影像,以防止错误预测位置和方向。 如果未提供深度缓冲区,系统将只更正对方向的错误预测。
  • 全息头戴显示设备(如 HoloLens 2)将负责位置重投影(无论应用是否提供其深度缓冲区)。 在 HoloLens 上不需要深度缓冲区就可以进行位置重投影,因为在真实世界提供稳定背景的情况下,渲染通常是稀疏的。

MRTK 目前没有用于重投影模式的帮助程序。 有关详细信息,请参阅其他选项卡之一。

下一个开发检查点

如果你遵循了我们规划的 Unity 开发旅程,则目前正处于探索 MRTK 核心构建基块的过程中。 从这里,你可以继续了解下一部分基础知识:

或跳转到混合现实平台功能和 API:

你可以随时返回到 Unity 开发检查点

另请参阅