空间定位点

空间定位点表示系统随时间跟踪的世界上的重要点。 每个定位点都有可调整的坐标系统(基于其他定位点或参照系),以确保锚定的全息影像保持位置精确。 在定位点的坐标系统中渲染全息影像可以在任何给定时间为你提供最准确的全息影像定位。 这是以不断对全息影像的位置进行小的调整为代价的,因为系统不断地将其移回到基于现实世界的位置。

你还可以跨应用程序会话和跨设备持久保存和共享空间定位点:

  • 通过将局部空间定位点保存到磁盘并稍后重新加载这些定位点,应用程序可以在单个 HoloLens 上的多个应用程序会话中计算现实世界中的相同位置。
  • 通过使用 Azure 空间定位点创建云定位点,应用程序可以跨多个 HoloLens、iOS 和 Android 设备共享空间定位点。 通过使每个设备使用相同的空间定位点来渲染全息影像,用户会看到全息影像显示在现实世界中的相同位置。 这可实现实时共享体验。
  • 还可以使用 Azure 空间定位点在 HoloLens、iOS 和 Android 设备上实现异步全息影像持久性。 通过共享持久的云空间定位点,多个设备可以随着时间推移观察相同的持久全息影像,即使这些设备没有同时出现,也是如此。

对于保持在直径 5 米以内的连线桌面头戴显示设备,如果用户想要获得站立范围或房间范围的体验,通常可使用场地参照系(而不是空间定位点),它提供用于渲染所有内容的单一坐标系。 但是,如果应用程序让用户在 HoloLens 中漫步超过 5 米(也许在建筑物的某一个楼层中漫步),你需要使用空间定位点来保持内容稳定。

虽然空间定位点非常适合应该在世界中保持固定的全息影像,但是放置定位点后,它便无法移动。 除了定位点,还有其他更适合与用户一起标记的动态全息影像的选择。 最好使用静止参照系(Unity 世界坐标的基础)或附加的参照系来定位动态全息影像。

最佳实践

这些空间定位点指南将帮助你呈现稳定的全息影像,准确跟踪现实世界。

在用户需要放置空间定位点的位置创建空间定位点

通常由用户明确放置空间定位点。

例如,在 HoloLens 上,应用程序可以让用户的凝视线与空间映射网格相交,让用户确定放置全息影像的位置。 当用户通过点击放置该全息影像时,在交叉点创建空间定位点,然后将全息影像放置在该定位点的坐标系的原点。

局部空间定位点的创建简单且高效。 如果多个定位点可以共享其底层传感器数据,系统会合并内部数据。 建议为用户明确放置的每个全息影像创建一个新的局部空间定位点,但下面列出的情况除外,例如固定的全息影像组。

始终呈现定位点 3 米范围内的锚定的全息影像

空间定位点稳定定位点原点附近的坐标系。 如果渲染的全息影像距离原点 3 米以上,由于杠杆效应,这些全息影像可能会出现与它们距离该原点的距离成比例的明显位置误差。 如果用户站在定位点附近,这种方法是有效的,因为全息影像也离用户较远。 换句话说,远的全息影像的角度误差将较小。 然而,如果用户走向远处的全息影像,该影像在用户的视野中会变大,这使得远处定位点原点的杠杆效应很明显。

聚集应形成固定群集的全息影像

如果应用程序希望多个全息影像彼此保持固定的关系,那么这些全息影像可以使用同一个空间定位点。

例如,如果你在房间里制作一个全息太阳系动画,最好将所有太阳系对象都绑定到中心的单个定位点。 这样,它们就可以相对流畅地移动。 在这种情况下,太阳系作为一个整体被锚定,即使其组成部分围绕定位点动态移动,也是如此。

保持全息影像稳定性的关键点是遵循上面的 3 米规则。

使用固定参照系(而不是局部空间定位点)呈现高度动态全息影像

如果你有高度动态的全息影像(例如在房间内走动的角色,或沿着用户附近的墙壁浮动的 UI),最好跳过局部空间定位点,直接在静止参照系提供的坐标系中渲染这些全息影像。 在 Unity 中,可以通过将全息影像直接放置在没有 WorldAnchor 的世界坐标中来实现此目的。 当用户远离全息影像时,静止参照系中的全息影像可能会发生漂移。 但是,这对于动态全息影像来说不太可能很明显:要么全息影像一直在移动,要么它的移动一直使它靠近用户,在这种情况下漂移就会最大限度减小。

动态全息影像的一个有趣的例子是创建从一个锚定坐标系到另一个锚定坐标系的动画的对象。 例如,有两座相距 10 米的城堡,每座城堡都有自己的空间定位点,其中一座城堡向另一座城堡发射炮弹。 当炮弹发射时,你可以在静止参照系的适当位置渲染它,使之与第一座城堡的锚定坐标系中的大炮保持一致。 然后,它可以循着它在固定参照系中的轨迹,在空中飞行 10 米。 当炮弹到达另一座城堡时,可以将它移动到第二座城堡的锚定坐标系中,以便对该城堡的刚体进行物理计算。

如果跨设备共享高度动态全息影像,则选择一些云空间定位点充当其父级,因为不能跨设备共享静态参照系。 但是,应该确保动态全息影像或观察它的设备保持在定位点的 3 米半径范围内,使全息影像在所有设备上看起来都是稳定的。

避免创建空间定位点网格

你可能想要在用户四处移动时让应用程序放置空间定位点的常规网格,在用户移动时将动态对象从一个定位点转移到另一个定位点。 但是,这涉及到对应用程序的更多管理,而没有系统本身内部维护的深度传感器数据的好处。 对于这些情况,可以通过将全息影像放置在静态参照系中来获得更好的结果,如上一部分所述。 在静态空间周围预先定位一组云空间定位点时,请考虑按照上述原则将空间定位点放置在用户会遇到的关键全息影像的位置,而不是创建一个任意的定位点网格。 该操作可确保获得这些关键全息影像的最大稳定性。

释放你不再需要的局部空间定位点

当局部空间定位点处于活动状态时,系统优先保留靠近该定位点的传感器数据。 如果你不再使用空间定位点,请停止访问其坐标系。 这样就可以根据需要移除其底层传感器数据。

这对于你将其持久保存到空间定位点存储的局部定位点尤其重要。 这些定位点后的传感器数据会永久保留,以便应用程序在将来的会话中找到该定位点,这将减少用于跟踪其他定位点的空间。 在将来的会话中仅保留你需要再次查找的局部定位点。 建议在它们对用户不再有意义时将它们从存储中删除。

对于云空间定位点,存储可以根据场景需要进行扩展。 可以根据需要存储尽可能多的云定位点,在你知道用户不再需要定位点时释放它们。

另请参阅