基本想法
由内而外的头跟踪系统是一项令人赞叹的新技术。 就它们的优点来说,它们非常神奇。 但它们也有自己的缺点。
由内而外的头跟踪系统(如 HoloLens 中的那些)非常适用于指示头相对于附近物理特征的位置。 同样地,它们非常适用于指示实际特征相对于头的位置。
但它们并不适用于指示头相对于头之前位置的位置。 当头从点 A 移到点 B 时,跟踪系统通常会稍微算错头的移动距离。 这意味着跟踪系统对点 A 和 B 之间的距离计算不正确。这种效应经常被晦涩地称为“缩放问题”。
然后,当头从点 B 移回点 A 时,它将再次算错移动距离。 它非常接近正确值,但是明显不正确。 这种效应也称为“偏移”。
该常见问题解答中讨论了这些问题。
重点是 World Locking Tools 可以解决这些问题。 在后一种情况下,发生偏移时,World Locking Tools 可以识别出头从点 A 附近的物理特征回到点 A,然后更正头的坐标。
在前一种情况下,对于缩放问题,World Locking Tools 可以从应用程序获取输入,以了解点 B 相对于点 A 的位置,并且还可以更正该移动距离。
如需进一步了解 World Locking Tools 如何解决这些问题,了解一些额外的术语将会有所帮助。
海绵状和世界锁定空间
海绵状空间
World Locking Tools 的核心是优化引擎。 它会输入世界当前活动空间定位点的图,以及当前的头跟踪信息。 此输入通常在此文档以及相关文档和代码中称为“海绵状态”。 海绵状态之所以如此命名,是因为它一直不断变化。 空间定位点总是在它们的原生海绵状坐标空间内相对于彼此运动,因为传入的传感器数据会优化其状态。
此海绵状空间是以前唯一一个可供混合现实应用程序开发人员使用的坐标系统。
世界锁定空间
在海绵状态中,World Locking Tools 引擎将计算一个稳定空间,该空间以最佳方式将海绵状空间与物理世界对齐。 此稳定空间称为“世界锁定空间”,它的完整状态被称为“冰冻状态”。
值得注意的是,海绵状空间和世界锁定空间都是固定笛卡尔坐标系,事实上,它们之间的差异仅在于旋转和偏移。 但是,从海绵状空间转换到世界锁定空间会改变每个帧,因为处理了新的传感器数据。
这两个空间的不同之处在于,如果传入的传感器数据可自由优化(即移动)空间定位点与彼此和海绵状空间中头的相对位置,选择世界锁定空间来最大程度地减少此类移动。 这种差异使得处于世界锁定状态的场景对象在物理世界中显示为固定,而不会附加到各个空间定位点。 每个框架都将计算其中基础定位点最稳定的世界锁定空间。 也就是说,其中虚拟对象保持最佳状态的世界锁定空间与实际特征对齐。
通过在场景图中调整照相机的父对象的局部转换,将此转换应用于每个帧的场景中。 由于照相机定义了原始海绵状空间,因此,将此“海绵状中的世界锁定”转换插入到照相机的层次结构,可将场景的根空间确定为世界锁定空间。
持久性
可选择性地跨会话保留冰冻状态。 可以通过手动控制来保存当前状态并从保存状态进行加载。 此外,World Locking Tools 管理器上的标志可启用或禁用冰冻状态的自动定期保存,以及在启动时自动加载上次保存状态。
通过使用这些功能可以扫描和稳定实际空间,以持久保留在多个会话中。
此外,如果使用空间 Pin 功能将建模空间与实际空间对齐,则可以持久保存该对齐方式。 在这种情况下,在初始对齐会话设置空间 Pin 以使建模场景与物理空间对齐后,后续会话可以通过调整虚拟特征和实际特征对齐来将模型化场景自动加载到物理空间。
照相机移动含义
此处需要注意的一个细节但很重要的点是,通过将更正转换应用于照相机,本机 Unity“固定的参考框架”已转换为最佳的世界锁定参考框架。 由于场景中没有对象被移动,此更正不会干扰物理模拟或其他动态计算。
但是,在固定的参考框架内移动照相机确实会有影响。 具体而言,任何假定头转换是固定引用框架与照相机空间之间的唯一转换的子系统都是错误的。
该错误通常不是问题,因为传送这样的能力早已取决于在照相机和根空间之间放置转换的功能。
此外,MRTK 已考虑了此类转换的需要,因此对于 MRTK 服务的用户来说,这将“正常工作”。
针对需要直接访问无法利用 MRTK 的低级系统的用户,提供了用于生成适配器的示例。 以下列出了几个示例: