World Locking Tools 概念

问题

在日常的物理世界中,可以通过固定坐标系很好地描述空间。 静止坐标系中的静止物体始终具有相同的坐标。 在特定配置中布局的一组物体将维护该配置。 两个以相同速度移动的物体彼此保持固定的偏移量。

这些法则和类似法则是存在的一个基本部分,当它们不再成立时,对世界的直觉将会变得不可靠。

以前的解决方案

Unity 的全局坐标空间和空间定位点分别解决了由传感器不准确和偏移引起的问题的不同方面

Unity 的全局坐标空间提供了一个稳定的参照系,其中全息影像物体相对于彼此是固定的。 虽然该空间中的物体相对于彼此的行为一致,但不能保证与物理世界的一致性,通常也不提供。 特别是当用户四处走动时,会出现不一致。

Unity 空间定位点可以在用户移动时保持全息影像在物理世界中的位置,但这会牺牲虚拟世界中的自洽性。 不同的定位点会不断地相互移动。 它们还会在全局坐标空间中移动,使得布局等简单任务变得困难,并导致物理模拟也出现问题。

问题的根源

此处的讨论将围绕 HoloLens 技术展开,但这些概念通常适用于由内到外的无标记跟踪技术,尤其是在使用惯性系统进行扩充的情况下。

HoloLens 在确定它相对于周围可见特征的位置方面非常出色。 通过扩展,它在基于这些相同的可见特征来定位其他虚拟物体方面也很十分有用。 当用户在大致不变的位置坐着或站着时,该设备非常擅长将虚拟物体注册到可见的物理参照点。 一个放在物理桌子上的虚拟杯子基本上会保持在桌子表面的同一位置。

这时,HoloLens 被限制在相同的小体积内,并提供一组不变的可见特征以供参考。 但还有其他有趣的场景。

当用户起身在房间内走动,甚至在房间之间移动时,HoloLens 必须在离开视图的旧功能和进入视图的新功能之间切换。 如果不涉及实现细节,我们可以很清楚地看到,在传输过程中,跟踪精度将大大下降。

下面是一个十分简单的上下文场景。

图示

用户在 A 点。环顾四周,有许多良好的可见参考特征,因此头部跟踪质量非常好,放置的任何全息影像都将保持原样。

然后,用户在物理空间中步行 10 米到达 B 点。但在传输中跟踪的保真度较低,因此,在用户到达 B 点后,设备会记录它仅行进了 9 米。 该图示中是一个很大的偶数,但它与设备规格一致,在这种情况下,允许 +-10% 左右的距离误差。

当设备在 B 点环顾四周时,系统会记录良好的可见特征。 在 B 点的全息影像的跟踪和稳定性也非常好。

当用户处于某个特定的点时,该点周围的物体看起来不错。 但存在不一致的情况。 在物理空间中,A 点和 B 点之间相距 10 米,而在虚拟空间中只有 9 米。 这通常被称为“比例问题”,不过“距离问题”可能会更为准确。 我们在后文中将探讨这个问题。

回到我们的场景:对于下一个动作,用户走回到 A 点。这一次,跟踪误差使得物理空间中从 B 到 A 的 10 米步行距离加起来在虚拟空间中达到 10.5 米。 这意味着,从 A 到 B 再到 A 的整个步行距离加起来是 1.5 米,而它应该是 0.0 米。 这是一个很明显的问题。 步行前放置在 A 点的全息影像现在将出现在距离 A 点 1.5 米的位置。

这就是空间定位点的作用。 走到 B 点并返回后,系统识别到它回到了 A 点,但头部的 Unity 坐标已经更改为 1.5 米。 但如果 A 点的全息影像附加了空间定位点,则空间定位点可以认为“我在 A 点,头部在 A 点,但是我的坐标与头部坐标相差 1.5 米。 我只需将我的坐标更改 1.5 米,这样我们就能再次达成一致”。位于用户左侧一米处的 C 点的空间定位点正在经历同样的过程。 实质上,空间定位点会不断地重新定义 A 点在 Unity 空间中的位置,以便头部坐标始终是正确的。 每个空间定位点都会根据其在物理世界中的位置单独进行调整。

World Locking Tools for Unity

World Locking Tools 会在用户四处走动时保持其散布的空间定位点的内部供应。 它会分析相机的坐标以及每个帧的空间定位点。 它可检测所有这些空间定位点何时移动超过 1.5 米以匹配头部坐标,并显示“我不会改变世界上所有事务的坐标以弥补头部坐标与上次不同的情况,我只是修复头部的坐标。”

这意味着,不必让空间定位点将全息影像拖到 Unity 空间以使其在物理空间中保持不变,而是将整个 Unity 世界空间锁定到物理空间。 如果全息影像在 Unity 空间中是静止的,那么它相对于周围的物理世界特征将保持静止。 同样重要的是,相对于周围的虚拟特性,它将保持不变。

很明显,在这种情况下,情况要复杂得多。 例如,请记住空间定位点的问题是它们是独立移动的,因此它们并非总是彼此一致。 底层的 FrozenWorld 引擎对这些分歧进行仲裁,以提出在感知方面最精确的相机校正,并且每一帧都这样做。

同样是比例问题

如果用户从 A 点走到 B 点,再回到 A 点,系统就有足够的信息来修复在传输过程中发生的偏移。 用户可能不知道 B 点在哪里(并且通常不知道任何 B 点相对于 A 点的确切位置),但知道自己是否在 A 点。 当用户回到 A 点时,他/她预计事情会和其离开时的情况差不多。 如果不是这样,则系统可以做到这一点。

但对于 B 点呢? 用户以为 10 米的步行距离只有 9 米。 用户没有办法知道这 9 米是否正确以及偏离了多远(如果不正确)。 在此处,空间定位点毫无帮助。 空间定位点和头部跟踪器有同样的问题。每个人都知道它在物理世界中的位置(相对于可见特征),但一个空间定位点对另一个空间定位点一无所知。 具体来说,空间定位点并不知道它们之间的距离有多远。

这在许多形式中可能都不方便,但是当物体或物体系统的尺寸大于一米左右时,它就会成为一个阻碍性问题。 考虑一下一个房间、建筑物、一套桌子,甚至是汽车的模型。 虽然空间定位点可以使模型的一端与物理世界特征保持一致,但在到达模型的另一端时,可能已经积累了严重的误差。 另一端不会正确排列。 误差因设备而异,甚至可能在同一设备上运行之间也不同。

到目前为止,本讨论中尚未介绍解决此问题所需的最少信息。

World Locking Tools 使用空间大头针 API 解决了此问题,这使应用程序可以提供与物理世界和全息世界相关的足够信息,以纠正行进距离的误差。 这可让大型全息影像看起来与整个物理世界保持一致。

了解基本系统

现在,我们已经大致了解了 World Locking Tools 概念,接下来让我们回顾一下基本系统。 了解基线操作提供和不提供的服务将帮助你确定以后正确使用高级概念,以及特定应用程序是否需要这些高级技术。

另请参阅