Unity 中的世界锁定和空间定位点

World locking tools hero image

让你的全息影像保持原地不动、随你移动,或者在某些情况下相对于其他全息影像定位自己的位置,是创建混合现实应用程序的重要组成部分。 本文将介绍使用 World Locking Tools 的建议解决方案,还将介绍如何在 Unity 项目中手动设置空间定位点。 在讲解代码之前,让我们先来了解 Unity 如何在其自己的引擎中处理坐标空间和定位点,这一点非常重要。

世界规模坐标系

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

相比之下,HoloLens 等不受限制的混合现实设备通过动态传感器来理解世界,当用户在建筑物的整个楼层行走数米时,会不断调整其对周围环境的了解。 在世界规模的体验中,如果你将所有全息影像放在一个简单的刚性坐标系中,这些全息影像最终会随着时间的推移而漂移,无论是基于世界还是相对于彼此。

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

可以在 Unity 中手动放置空间定位点,以在用户移动时保持全息影像在物理世界中的位置。 然而,这牺牲了虚拟世界内部的自洽性。 不同的定位点不断地相互移动,并且也在全局坐标空间中移动。 在这个场景中,像布局这样的简单任务会变得困难。 物理模拟也成为难题。

World Locking Tools (WLT) 可以让你两全其美,当用户四处走动时,它使用分布在虚拟场景中的内部空间定位点来稳定单个刚性坐标系。 WLT 会分析相机的坐标以及每个帧的空间定位点。 WLT 直接修复头部的坐标,而不是通过更改世界上所有事物的坐标来补偿用户头部坐标的校正。

选择世界锁定方法

如果可能,请使用世界锁定工具进行全息影像定位。

世界锁定工具提供了一个稳定的坐标系,可以最大程度地减少虚拟和现实世界标记之间的可见不一致。 换句话说,它使用共享的定位点池对整个场景进行世界锁定,而不是使用该组自己的单独定位点锁定每组对象。

世界锁定工具在内部自动处理所有空间定位点的创建和管理。 不需要与 ARAnchorManager 或 WorldAnchor 交互即可保持全息影像处于世界锁定状态。

  • 对于使用 OpenXR 或 Windows XR 插件的 Unity 2019/2020,需要使用 ARAnchorManager
  • 对于较旧的 Unity 版本或 WSA 项目,需要使用 WorldAnchor

设置世界锁定

若要开始使用世界锁定工具, 请下载混合现实功能工具。 若要了解有关基础知识的详细信息,请参阅主要“世界锁定工具”文档页,获取“概述”、“快速入门”和其他有用主题的链接。

自动设置

项目准备就绪时,从“混合现实”>“World Locking Tools”运行“配置场景”实用工具

Unity editor with Mixed Reality Toolkit menu selected

重要

随时都可以重新运行“配置场景”实用工具。 例如,如果 AR 目标已从旧版更改为 XR SDK,则应重新运行。 如果场景已正确配置,则运行该实用工具无效。

可视化工具

在早期开发过程中,添加可视化工具有助于确保 WLT 的设置和正常工作。 可以使用“删除可视化工具”实用工具删除它们,以提高生产性能;如果出于任何原因不再需要它们,也可以将其删除。 有关可视化工具的更多详细信息,请参阅 Tools 文档

持久世界锁定

空间定位点将全息影像保存在应用程序会话之间的现实空间中。 一旦保存在 HoloLens 的定位点存储中,就可以在不同的会话中找到空间定位点并加载;当没有 Internet 连接时,这是一个理想的后备。

重要

本地定位点存储在设备上,而 Azure 空间定位点存储在云中。 你可在同一项目中使用本地定位点和 Azure 定位点,不会发生冲突。 有关集成 Azure 云服务以存储定位点的详细信息,请参阅 Azure 空间定位点

默认情况下,世界锁定工具将在支持局部空间定位点持久性的设备上跨会话恢复 Unity 相对于物理世界的坐标系。 若要让全息影像在退出并重新运行应用程序后出现在物理世界的同一个地方,应用程序只需要将相同姿势恢复到全息影像。

World locking context component in Unity inspector

如果应用程序需要精细的控制,则可以在检查器中禁用自动保存自动加载,并从脚本管理持久性。 有关详细信息,请参阅持久化空间坐标系

世界锁定工具仅在 HoloLens 设备上支持本地定位暂留。 对于 Android、iOS 和 HoloLens 设备,与 Azure 空间定位点集成,以支持跨会话和设备持久化和共享坐标空间。 有关将世界锁定工具与 Azure 空间定位点配合使用的详细信息和示例,请参阅世界锁定工具 (WLT)与 Azure 空间定位点 (ASA) 结合使用

后续步骤

共享世界锁定坐标空间:

了解空间映射:

返回到 Unity 开发检查点:

另请参阅