ARKit 锚点在暂停和 运行 后是否仍然存在?

Do ARKit anchors persist after pause and run again?

我正在考虑开发 ARKit 应用程序,但在决定购买之前 iPhone 我想问两个对我来说至关重要的问题。如果有人问过这个问题,请告诉我,因为我在网上其他地方找不到。

问题: 1. 假设运动跟踪丢失(例如,当指向白墙时)然后再次恢复。它是在同一参照系中定位还是从头开始?另外,锚点是否保留? 2. 假设我暂停会话,然后再次 运行(例如,离开应用程序然后返回)。是否定位回暂停前的参考系?另外,锚点是否保留?

我问这个是因为我知道本地化在 ARCore 中还不起作用,我想知道它在 ARKit 中的状态。

谢谢!

ARKit 有两种或三种失去跟踪的方法(取决于你如何看待它们);每个对锚点都有不同的影响。

1。临时跟踪质量问题

(老实说,我在那个词的中间摸索了 caps lock。我的键盘正在为我制作双关语!)

在您提到的第一种情况以及类似的情况下——指着一堵空白的墙,phone 突然推挤,从黑暗的区域移动到明亮的光线,反之亦然——你的应用程序将收到通知影响相机姿势跟踪质量的 ARKit tracking state 更改数量。

当跟踪状态为 limited 时,ARKit 对世界位置的想法可能与现实世界不同步,但它仍然有足够的信息能够在情况过去时重新定位。这包括锚点。 (自己尝试一下;运行 Apple 的 ARKit 示例代码项目之一,并在移动 phone 时遮住相机镜头一点。)

如果影响跟踪状态的任何情况持续很长时间,则重定位不太可能成功。它可以帮助跟踪您处于有限跟踪状态的时间,并为用户提供一种在事情变得太不正常时重新启动会话的方法。

2和3.会话中断和恢复或重启

如果发生某些事情中断了 ARKit 接收相机和运动数据的能力——例如 iPhone 上的来电 phone 呼叫屏幕,或者用户响应交互式通知,您的应用会收到 sessionWasInterrupted message. There’s nothing you can do in this case (as far as session management is concerned) other than wait for a corresponding sessionInterruptionEnded 消息。

如果中断时间很短,并且此后设备没有移动太多,则有机会自动重新定位。当然,你无法判断设备移动了多少,因为运动跟踪已关闭......你可以根据中断的持续时间以及你的 AR 体验对跟踪精度的敏感程度进行有根据的猜测,并据此决定是否重新启动会话。 (例如,space 入侵者漂浮在空中的游戏比让用户通过标记墙壁来绘制平面图的应用受到的影响要小。)

Aside: Traditional iOS UI patterns like modal view controllers, tab views, and navigation controllers can push the view hosting an AR session away, interrupting the session and losing tracking. Like Apple’s Human Interface Guidelines for AR suggest, it can be good to use things like popover views instead, so that you keep the AR experience onscreen and the session running.

When/if 你做 restart your AR session,你可以选择是保留锚点还是重置跟踪。如果你已经失去了本地化,这真正意味着你是否在任意坐标 space 中跟踪锚点,它们是在其中定义的(即使 space 与现实世界不一致不再),或者只是失去所有的锚点。

不过,只要不重新启动会话,就不会导致锚点被删除。而且,如果您暂时失去跟踪以进行重新定位,跟踪真实世界对象的锚点(即平面锚点,而不是您手动创建的锚点)应该调整回现实位置,即使坐标系不完全一致一如既往。