坐标系统

混合现实应用的核心功能是能够将全息影像置于你的世界中,使之看起来和听起来就像真实的物体一样。 这涉及到将这些全息影像精确地置于世界中有意义的各个位置和设置其方向,无论世界是其物理空间,还是你创建的某个虚拟领域。 Windows 提供各种真实的坐标系统来表示几何信息,这些系统称为空间坐标系统。 你可以使用空间坐标系统来推断全息影像的位置、朝向、凝视线或手的位置

设备支持

功能 HoloLens(第一代) HoloLens 2 沉浸式头戴显示设备
固定参照系
动态参照系
场地参照系 尚不支持 尚不支持
空间定位点
空间映射
场景理解

混合现实体验级别

你可以为各种用户体验设计混合现实应用,包括从使用头戴显示设备朝向的 360 度视频观看体验到使用空间映射和空间定位点的完整世界级别应用和游戏等广泛体验:


体验级别 要求 体验示例
仅朝向 头戴显示设备朝向(符合重力规律) 360° 视频查看器
坐立空间级别 外加基于零点位置的头戴显示设备位置 竞速游戏或太空模拟器
站立空间级别 外加场地地面原点 需要在原地迅速移动和闪躲的动作游戏
房间级别 外加场地边界多边形 需要在谜题场所内四处走动的解密游戏
世界级别 空间定位点(通常结合空间映射 包含真实世界中你的“敌人”的游戏,比如机器人突袭

上述体验级别均采用“套娃”模型。 Windows 混合现实的关键设计原则是:由给定的头戴显示设备来支持为目标级别的体验和所有更小级别的体验所构建的应用。


6DOF 追踪 定义了地面 360° 追踪 定义了边界 空间定位点 极致体验
- - - - 仅朝向
- - - 坐立
- - 站立 - 向前
- 站立 - 360°
房间
世界

HoloLens 尚不支持场地参照系。 HoloLens 上的房间级别应用目前需要使用空间映射场景理解来查找用户的活动区域地面和围墙。

空间坐标系统

所有的 3D 图形应用程序都使用笛卡尔坐标系统来推理虚拟物体的位置和朝向。 这些坐标系建立三个垂直轴:X、Y 和 Z。添加到场景的每个对象在其坐标系中都有一个 XYZ 位置。 Windows 调用在物理世界中 具有实际意义的坐标系统,该系统以米为单位表示其坐标值。 这意味着,在 X、Y 或 Z 轴上相距 2 个单位的物体,在混合现实中的渲染效果是相距 2 米。 通过这一对照关系,可以轻松根据真实世界中的尺寸来渲染物体和环境。

通常,笛卡尔坐标系称为“右手”或“左手”,因为可以使用手部位置来指示 XYZ 轴的方向。 在这两个坐标系统中,正 X 轴指向右侧,正 Y 轴指向上方。 两者之间的区别在于,在右手坐标系中,Z 轴指向你,而在左侧坐标系中,Z 轴远离你。

Picture of a person's right hand demonstrating the right-handed coordinate system

Picture of a person's left hand demonstrating the left-handed coordinate system

Windows 上的空间坐标系(因此,Windows Mixed Reality)始终是右手坐标系。

[!NOTES]

  • Unity 和 Unreal 使用左手坐标系。
  • 虽然左手坐标和右手坐标是最常见的系统,但 3D 软件中也会使用其他坐标系。 例如,3D 建模应用程序使用坐标系统,其中 Y 轴指向或远离查看器,Z 轴指向上。

构建“仅限方向”或“坐立空间规模”的体验

全息影像渲染的关键是,当用户四处移动时,根据预测的头部运动,改变应用中每一帧全息影像的视角。 如果使用固定参照系,可以创建一个可识别和反映用户头部位置和朝向变化的“坐立空间级别”体验。

有些内容需要忽略头部位置变化,始终保持选定的朝向和距离。 一个显著例子就是 360 度视频:因为视频是在一个单独的固定视角拍摄的,如果视窗的位置根据内容移动,会破坏观影,但视窗的朝向会跟着用户四处观看而转动。 如果使用动态参照系,可以创建“仅朝向”体验

固定参照系

固定参照系提供的坐标系统会根据物体在世界中的位置尽可能地让用户附近的物体保持稳定,但同时会反映出用户头部位置的变化。

对于“坐立空间级别”体验,在 Unity 这样的游戏引擎中,采用固定参照系来定义引擎的“世界原点”。位于特定世界坐标的物体,使用固定参照系来定义它们在真实世界中采用相同坐标系时的位置。 在用户四处走动时,有些内容在世界中始终是固定不变的状态,这些内容称为“世界锁定”内容。

应用通常会在启动时创建一个固定参照系,并在整个应用生命周期中使用这个坐标系统。 作为 Unity 中的应用开发人员,你可以开始根据用户头部的起始位置和朝向来确定原点,并基于原点放置内容。 如果用户移动到新的位置并想继续他们的“坐立空间级别”体验,你能够根据他们的新位置重新定位世界原点。

随着时间的推移,系统会识别到更多用户周围环境的信息,它可能会开始判断现实世界中各个点之间的距离比系统之前确定的是更短还是更长。 如果为 HoloLens 中的应用使用固定参照系来渲染全息影像,而用户在 5 米的范围内移动,你可能会观察到应用中全息影像在观察位置出现漂移。 所以如果你的应用需要用户在超过 5 米的范围移动,你可以创建一个世界级别体验,这会需要额外的技术来保持全息影像的稳定,详见下文。

动态参照系

动态参照系会跟着用户移动,它会在参照系刚创建时确定一个固定的朝向。 这使用户在观看按该参照系确定位置的内容时会感到很舒适。 按照这种与用户相关的方式渲染的内容称为“身体锁定”内容。

当头戴显示设备无法确定它在世界中的位置时,动态参照系可提供唯一的坐标系统来渲染全息影像。 这使得它非常适合用于显示回退用户界面,来告知用户其设备无法在世界中发现他们。 “坐立空间级别”或更高级别的应用应含有“仅朝向”的回退信息,帮助用户通过使用与混合现实主页中类似的用户界面在应用中继续操作。

创建一个“站立空间级别”或“房间级别”体验

在沉浸式头戴显示设备上提供比“坐立空间级别”更高级别的“站立空间级别”体验时,可以使用场地参照系

若要提供“房间级别”体验,让用户能够在他们预先设定的 5 米范围边界内移动,你还可以添加“场地边界”

场地参照系

首次设置沉浸式头戴显示设备时,用户将定义一个场地,代表他们在混合现实中体验时的活动区域。 场地最小限度地定义了场地原点,用户使用设备时选择的地板位置和自己所面向的朝向确定了空间坐标系统。 在这个场地坐标系统下,将内容放置在坐标为 Y=0 的地板平面上,可以确保全息影像在用户站立时显示得很自然,这就是“站立空间级别”体验

场地边界

用户也可以自主定义场地边界,也就是在清理出的活动区域中定义一个用来在混合现实中移动的区域。 如果是这种情况,应用可以创建一个“房间级别”体验,使用边界来确保全息影像始终位于用户可及的范围内。

由于场地参照系使用单一固定坐标系来显示依赖于地板的内容,因此可以很便捷地用来移植 VR 头戴显示设备上的“站立空间级别”和“房间级别”体验。 但是,在这些 VR 平台上,单一坐标系只能在 5 米(16 英尺)直径内显示稳定内容,超出这个范围则会因为杆臂效应导致在系统调整时远离中心的内容产生明显的漂移。 为了能够移动超过 5 米,需要空间定位点。

创建“世界规模”体验

Hololens 允许用户移动超过 5 米,是真正的“世界级别”体验。 创建一个“世界级别”的应用,要使用比“房间级别”体验更多的技术。

为什么单一精确坐标系统的使用范围不能超过 5 米

如今,在编写游戏、数据可视化应用或虚拟现实应用时,典型的方法是建立一个所有其他坐标都能可靠映射回的绝对世界坐标系。 在这种环境下,存在一个稳定的转换方式来定义世界中任何两个物体之间的关系。 如果不移动这些对象,它们的相对变换将始终保持不变。 在渲染一个事先知晓其中所有几何信息的纯虚拟世界时,这种全局坐标系可以发挥很好的作用。 现在,房间规模 VR 应用通常会建立这种绝对房间规模坐标系,其原点在地板上。

相比之下,HoloLens 等不受限制的混合现实设备通过动态传感器来理解世界,当用户在建筑物的整个楼层行走数米时,会不断调整其对周围环境的了解。 在“世界级别”体验里,如果根据单一精确坐标系来显示全息影像,这些影像总是会随时间推移发生漂移,无论是它们与世界之间还是它们彼此之间。

例如,头戴显示设备当前可能认为世界上的两个位置相距 4 米,然后再完善这种理解,了解到这些位置实际上相距 3.9 米。 如果这些全息影像最初被放在一个单一的刚性坐标系中,相距 4 米,那么其中一个将始终与现实世界相差 0.1 米。

空间定位点

在 Windows 混合现实中,你可以创建空间定位点来解决前述问题,也就是在世界中标记出用户放置全息影像时的重要放置点。 空间定位点表示系统应随时间跟踪的世界上的重要点。

随着设备对世界越来越了解,这些空间定位点可以根据需要调整相互间的位置,以确保每个定位点精确位于基于真实世界所放置的位置。 通过在用户放置全息影像的位置放置空间定位点,然后基于全息影像的空间定位点来定位该全息影像,可以确保即使在用户漫游数十米的情况下,全息影像也能保持最佳稳定性。

空间定位点会持续地根据其他的定位点进行调整,这是采用空间定位点的坐标系与固定参照系的主要区别:

  • 固定参照系中的各全息影像彼此之间始终保持严格的位置关系。 但是当用户长距离移动后,该参照系的坐标系统可能会基于世界中的情况发生漂移,确保用户附近的全息影像显示稳定。

  • 场地参照系中的全息影像也相互之间保持严格的位置关系。 相比于固定参照系,场地参照系始终基于其设定的物理原点保持固定不变。 但是,当场地坐标系中渲染的内容超出其 5 米边界时,就只有当用户站在该边界内时才会稳定显示。

  • 根据某个空间定位点显示的全息影像,可能会根据使用另一个空间定位点的全息影像发生漂移。 这使得 Windows 能改进它对各个定位点位置的了解,即使(例如)是在一个定位点需要向左调整,另一个需要向右调整的情况下也是如此。

相比于固定参照系始终为了用户附近的稳定性进行优化,场地参照系和空间定位点则是为了确保其原点附近的稳定性而优化。 这有利于全息影像随时间推移能始终保持在准确的位置,但也意味着离坐标系原点过远的影像会受到非常大的杆臂效应的影响。 这是因为场地或定位点的位置和朝向上微小的调整会依据与原点的距离等比例放大。

一个好的经验法则是,确保根据遥远的空间定位点的坐标系渲染的所有物体位于距离其原点 3 米内的范围。 对于附近的场地原点,渲染远处的内容是没问题的,因为在用户的视野里,任何增加的位置错误只会影响发生很少漂移的小全息影像。

空间定位点的持久性

空间定位点还可以让你的应用记住重要的位置,即使是在应用挂起或设备关闭后。

你可以将应用创建的空间定位点保存在硬盘中,并在下一次体验时重新加载回来,方法是将它们保存在应用的“空间定位点存储”中。 在保存和加载定位点时,你需要提供一个对应用而言有意义的关键词,用于唯一标识定位点。 可以将这些关键词理解为定位点的文件名。 如果想将其他的数据与定位点关联起来,例如用户放置在该位置的 3D 模型,可以将这些数据保存在应用的本地存储中,并将其与你选择的关键词关联起来。

通过将定位点持久保存在存储中,你的用户可以放置单独的全息影像或在周围设置工作空间,将全息影像放置在各处,并在后续的使用中找到它们。

还可以使用 Azure 空间定位点在 HoloLens、iOS 和 Android 设备上实现异步全息影像持久性。 通过共享持久的云空间定位点,多个设备可以随着时间推移观察相同的持久全息影像,即使这些设备没有同时出现,也是如此。

空间定位点共享

应用还可以与其他设备实时共享空间定位点,从而提供实时共享体验。

通过使用 Azure 空间定位点,应用可以跨多个 HoloLens、iOS 和 Android 设备共享空间定位点。 通过使每个设备使用相同的空间定位点呈现全息影像,所有用户将看到全息影像显示在现实世界中的相同位置。

避免“头部锁定”内容

强烈建议避免渲染“头部锁定”这种固定在视野某个位置的内容(像显示器那样)。 通常来说“头部锁定”内容会让用户感到不舒服,感觉它们不像是所在世界里的一部分。

“头部锁定”内容通常应该和与用户相关或世界相关的全息影像一起显示。 例如,通常应将光标放置到世界中,并自然地缩放来反应用户目光凝视下物体的位置和距离。

处理跟踪错误

在一些如走廊这样的昏暗环境中,利用“内向外”追踪的头戴显示设备可能无法正确地确定它在世界中的位置。 在追踪发生错误,可能会导致全息影像无法显示或显示在错误位置。 现在我们来讨论什么情况可能发生追踪错误、对用户体验的影响和相关的应对建议。

头戴显示设备因为传感数据不足而无法正常追踪

有时头戴显示设备的传感器会无法确认头戴显示设备的位置。 在以下情况下可能发生这种问题:

  • 如房间昏暗,
  • 传感器被头发或手遮盖,
  • 或表面纹理不足以感知时。

在这些情况下,头戴显示设备无法足够精确地追踪其位置来渲染“世界锁定”全息影像。 你在设备中会无法确认要基于什么位置来确定空间定位点、固定参照系或场地参照系。 但你仍旧可以用动态参照系来渲染“身体锁定”内容。

你的应用应告诉用户如何恢复位置追踪,通过显示一些预备的“身体锁定”内容来提示用户,例如不要遮盖传感器或不要使环境太亮。

由于环境中的动态变化,头戴显示设备跟踪不正确

如果环境中发生大量动态变化,设备就无法正确追踪,比如有许多人在房间内走动。 在这种情况下,当设备尝试在这样的动态环境中对自身进行追踪时,全息影像看起来可能会有跳动或偏移的感觉。 如果发生这种情况,建议在动态变化较少的环境中使用设备。

由于环境随时间推移发生了重大变化,头戴显示设备跟踪不正确

当你开始在某个环境中使用头戴显示设备,但其中的家具、墙壁挂件等物品被移动过,那么某些全息影像可能看起来会像是偏离了原始位置。 当用户在新的空间中移动时,早先呈现的全息影像也可能会出现跳动。这是因为系统对空间的理解不再真实。 然后系统会尝试重新映射环境,同时重新调整房间中的特征。 在这种情况下,建议让用户替换之前固定在世界中,但不符合位置显示预期的全息影像。

由于环境中有相同的空间,头戴显示设备跟踪不正确

有时,室内或其他空间里可能存在两片相同的区域。 例如设备视野中有两个相同的会议室,两个相同的角落或两张相同的海报。 在这种情况下,设备有时可能会混淆相同的两部分,在内部呈现中将其标记为相同的物体。 这可能会导致某个地方的全息影像显示在其他位置。 设备可能开始经常丢失追踪,因为它对环境的内部呈现已经被破坏。 在这种情况下,建议重置系统对环境的理解。 重置映射会导致放置的所有空间定位点丢失。 重置后,头戴显示设备在环境的独特区域中会追踪得很好。 但如果设备再次遇到相同的区域,问题可能会再次发生。

另请参阅