混合现实技术文档:关键技术 (3)


7. 场景理解

场景理解为混合现实开发人员提供了一种结构化的高级别环境表示形式,旨在简化环境感知应用程序的开发。通过组合现有混合现实运行时的强大功能,如非常准确的结构化空间映射和新的 AI 驱动的运行时,场景理解实现了这一目标。通过将这些技术相结合,场景理解生成了与你可能已在 Unity 或 ARKit/ARCore 等框架中使用的 3D 环境的表示形式相似的数据。

场景理解的切入点是场景观察器,应用程序可以调用它来计算新场景。目前,该技术可以生成三个不同但相关的对象类别:

  1. 简化的Watertight环境网格:这些网格能够推断出平面房间结构,而不会产生混乱。

  2. 四边形的放置的平面区域:这些区域是对场景中平面的简化表示,有助于应用程序更好地理解场景的几何特征。

  3. 与四边形/Watertight数据对齐的空间映射网格的快照:这些网格提供了场景的结构化空间映射,可以帮助应用程序更准确地定位和交互。

通过这些功能,场景理解使混合现实开发人员能够更轻松地构建环境感知应用程序,从而提供更丰富、更沉浸的用户体验。

在这里插入图片描述场景理解图

环境感知应用程序的许多核心方案(如放置、封闭、物理学等)都可以通过空间映射和场景理解来解决。场景理解和空间映射之间的核心差异在于对结构和简易性的最大准确性和延迟的折衷。

如果你的应用程序需要最低延迟和仅需要访问网格三角形的情况,直接使用空间映射可能是更好的选择。但如果你需要执行更高级别的处理,那么考虑切换到场景理解模型可能更合适。

值得注意的是,由于场景理解会提供空间映射网格的快照作为其表示形式的一部分,因此始终可以访问到最完整且最准确的空间映射数据。

7.1 位置

场景理解提供了专门设计用于简化放置方案的新构造。场景可以计算称为 SceneQuads 的基元,它们描述了可供放置全息影像的平面面。SceneQuads 专门围绕放置而设计,并介绍了二维图面,并提供了一个用于在该表面上放置对象的 API。

以前,当使用三角形网格来执行放置时,必须扫描四个四个区域并执行孔填充/后处理来识别对象放置的合适位置。然而,这种方法并不总是需要四边形,因为场景理解运行时能够推断出未扫描的区域,并使不属于图面的区域无效。现在,通过禁用推理并捕获扫描区域的放置区域 SceneQuads,四边形的使用变得更加灵活。启用推理后,放置不再局限于扫描区域,而是可以更自由地进行。
在这里插入图片描述已禁用了 SceneQuads 的推理,并捕获了扫描区域的放置区域。
在这里插入图片描述
通过启用推理的四边形,放置不再受限于扫描区域。

如果你的应用程序想要将二维或 3D 全息图放置在环境的严格结构上,最好是从空间映射网格计算此信息。注意对于依赖于空间映射网格的传统放置代码,可以通过设置 EnableWorldMesh 设置与 SceneQuads 一起计算空间映射网格。 如果场景理解 API 不满足应用程序的延迟要求,建议继续使用空间映射 API。

7.2 遮蔽

空间映射封闭仍然是捕获环境实时状态的最小延迟方式。虽然这对于在高度动态的场景中提供封闭可能很有用,但出于多种原因,你可能希望考虑使用封闭的场景理解。

如果使用通过场景理解生成的空间映射网格,则可以从空间映射请求数据,这些数据不会存储在本地缓存中,因此不能从感知 API 中获取。使用封闭和watertight网格的空间映射将提供额外的价值,特别是在完成未扫描的房间结构时。

如果你的要求能够容忍更多的场景理解延迟,应用程序开发人员应考虑使用场景理解watertight网格,并将其与平面表示形式结合。这将提供“这两个领域的最佳”方案,其中简化的watertight封闭可以提供更好的非平面几何,从而提供最现实的封闭地图。

7.3 物理

场景理解生成的watertight网格通过语义分解空间,特别是解决了空间映射网格施加的物理限制。Watertight结构确保了始终可以命中物理射线,这样可以更容易地生成用于室内导航的导航网格。如前文所述,在创建场景时启用EnableSceneObjectMeshes和EnableWorldMesh可能会生成最实际的完整网格。watertight属性的环境网格将防止命中测试失败,并且网格数据将确保物理与场景中的所有对象交互,而不仅仅是与房间结构交互。

7.4 导航

导航方面,按语义类分解的平面网格是用于导航和路径规划的理想构造,可以减轻空间映射导航概述中提到的许多问题。场景中计算的SceneMesh对象已经按表面类型进行了消除,这确保了导航网格的生成仅限于可遍历的表面。
生成准确的导航网格目前仍需要后处理,也就是说,应用程序仍然必须将遮挡物到地面上,以确保导航不会出现混乱或其他问题。实现这一目的的最准确方法是在场景是用EnableWorldMesh标志计算的情况下,投影所提供的世界网格数据。

7.5 可视化

在可视化方面,尽管空间映射可视化可用于环境的实时反馈,但在很多情况下,平面和watertight对象的简单性提供了更高的性能或视觉质量。如果在四边形或平面watertight网格提供的表面上进行投影,则使用空间映射描述的阴影投影和接地技术可能更好。这对于场景推断这一事实的环境或方案特别适用,而完全预扫描并非最佳选择,而完整的环境和平面假设将最小化项目。
此外,空间映射返回的图面总数受内部空间缓存的限制,而场景理解的空间映射网格版本可以访问未缓存的空间映射数据。因此,场景理解更适合捕获更大空间的网格表示形式(例如,大于单个房间)以用于可视化或进一步的网格处理。使用EnableWorldMesh返回的世界网格在整个中具有一致的详细级别,这可能会产生更好的可视化效果(如果以线框形式呈现)。

8. 空间定位点

空间定位点代表系统在一段时间内跟踪的重要点,每个定位点都有一个坐标系,可以根据需要进行调整(相对于其他定位点或参照系),以确保锚定的全息影像保持位置精确。在定位点的坐标系中呈现全息影像可以在任何给定时间为你提供最准确的全息影像定位。由于系统会持续将其移回相对于真实世界的位置,因此对于一段时间内的小调整成本也是可以接受的。

8.1 空间锚点保存方式

通过将本地空间锚点保存到磁盘并稍后加载回来,你的应用程序可以在一个HoloLens上跨多个应用程序会话计算同一位置。使用Azure空间锚点创建云锚点,你的应用程序可以跨多个HoloLens、iOS和Android设备共享空间锚。通过让每个设备使用相同的空间定位点呈现一个全息影像,用户将看到全息图在现实世界中的同一位置,从而实现实时共享体验。

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

8.2 锚点呈现在定位点3米范围内

空间定位点稳定在其原点附近的坐标系。如果从该原点渲染的全息图超过3米,则这些全息影像可能会遇到明显的位置错误,因为它们与源相对于其原点的距离变得不同。当用户位于定位点附近时,这种效果会更加明显,因为全息图远离用户。换句话说,远处的全息图的角度误差将会很小。但是,如果用户在多个定位点之间移动,那么这种效果会更加显著,因为远处定位源的杠杆效应会在其视图中产生较大的影响。

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

如果你有一个高度动态的全息图(例如,人物围绕用户附近的墙壁或浮动 UI),最好跳过本地空间锚,并直接在由以下各项提供的固定的引用框架中放置全息影像。在Unity中,可以通过在不使用WorldAnchor的情况下直接在世界坐标中放置全息影像来实现此目的。当用户远离全息影像时,固定框架中的全息影像可能会出现偏移。但是对于动态全息影像来说,这种偏移可能不太明显:这可能是因为全息影像经常移动,或者它的运动不断地使其靠近用户,从而减小了偏移量。

动态全息影像的一个有趣的例子是创建一个从一个锚定坐标系到另一个锚定坐标系的动画对象。例如,你可能有两个城堡,每个距离10米,每个都有自己的空间锚,其中一个城堡会触发cannonball。在触发cannonball时,可以将其呈现在固定参照框架中的适当位置,使其与第一个城堡的定位坐标系统中的cannon一致。然后,它可以沿着在固定参照系中的轨迹飞行10米。当cannonball到达另一个城堡时,您可以选择将其移动到第二个城堡的定位坐标系,以允许与该城堡的严格主体进行物理学计算。

如果要跨设备共享高度动态的全息图,则需要选择某个云空间锚作为父代,因为不能跨设备共享固定的参考框架。但是,在这种情况下,应确保动态全息图或查看它的设备仍在锚定的3米半径内,以确保在所有设备上都能稳定显示。

8.4 释放不需要的空间定位点

本地空间锚点处于活动状态时,系统会将保留在该锚点附近的传感器数据排定优先顺序。如果你不再使用空间定位点,请停止访问其坐标系。这允许根据需要删除其基础传感器数据。

这对于你持久保存到空间定位点存储的局部定位点尤其重要。这些定位点后面的传感器数据将永久保留,以允许你的应用程序在将来的会话中查找该定位点,这将减少用于跟踪其他锚点的空间。仅保留需要在未来的会话中再次查找的本地锚,并在用户不再有意义的情况下将其从应用商店中删除。

对于云空间定位点,存储可以根据场景需要进行扩展。你可以根据需要存储任意数量的云定位点,仅当你知道用户不需要在该定位点上再次查找全息影像时才会将其释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值