如何在AR应用程序中包含和运行图像跟踪配置和世界跟踪配置

时间:2018-06-21 03:26:52

标签: ios iphone swift arkit

我正在体验ARkit,并且在线观看了一些教程,我知道如何进行图像跟踪和世界跟踪,但是当相机跟踪图像时,我不知道如何将它们组合到同一个应用程序中,设备会自动运行图像跟踪配置,但是当图像不在相机上时,它将运行世界跟踪配置。

我知道我也可以使用世界跟踪来跟踪图像,但是图像跟踪配置似乎具有更稳定的跟踪结果。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:14)

您不需要切换配置。 (可以切换,但您可能不应该。)

您可以在ARKit 2(iOS 12)的世界跟踪配置中使用图像跟踪:

let configuration = ARWorldTrackingConfiguration()
configuration.detectionImages = // your images here
configuration.maximumNumberOfTrackedImages = 1 // or up to 4
// also set other options like plane detection and environment texture if you want
session.run(configuration)

设置maximumNumberOfTrackedImages会将配置从图像检测(仅在图像首次出现时告诉您)更改为图像跟踪(在图像移动时告知您, 60 fps)。

ARKit 2提供了两种进行图像跟踪的方法,因此您可以选择一种适合您的需求:

ARWorldTrackingConfiguration具有图片跟踪功能(如上所示)

世界跟踪的所有其他功能(平面检测,环境纹理,命中测试,物体检测,世界地图保存/恢复)以及图像跟踪。

  • Pro:如果您的AR体验除了图像触发的内容之外还有其他事情发生,您还可以使用所有其他功能。
  • Pro:您可以将AR内容与跟踪的图像关联起来,并以其他方式使其与世界互动(例如,即使触发图像从相机移开后,仍然存在于桌子上)

  • Con:世界跟踪需要一个稳定的,功能丰富的环境,因此在移动参考帧时(如用户在公交车上(运动传感器混乱),在普通或光线不足的环境中)无法很好地工作(没有视觉跟踪的内容),或者背景变化如人群或海浪(视觉跟踪混乱)。

  • 缺点:世界追踪会消耗CPU /电源/散热成本。
  • 缺点:跟踪图像需要已知的物理尺寸才能正确放置。世界跟踪参考框架。

ARImageTrackingConfiguration

仅图像跟踪:当图像在相机上时,您将获得实时更新的锚点。

  • Pro:世界追踪没有限制-您可以在公共汽车上,海边,光线昏暗的环境中(只要图像本身清晰可见)即可检测图像。
  • Pro:降低了CPU /功耗/散热成本。
  • Pro(?):图像的物理尺寸并不重要。相对于图像放置虚拟内容的锚点转换大小与图像成比例的大小。如果您的图像印在明信片上,则可能会出现一条小的虚拟龙。如果在建筑物的侧面上绘制相同的图像,则您的巨龙足以吓到这座城市。
  • 缺点:当图像放在相机上时,您会得到一个相对于其放置内容的锚点...但是,当图像不在相机上时,您就没有在世界上放置内容的参照系。 (好吧,您可以相对于相机放置内容,但是粘贴到相机空间的内容并不是很“ AR-y”。)相对于检测到的图像放置的虚拟内容无法“逃脱”到基于图像的空间之外进行交互与现实世界在一起。
  • 缺点:您无法获得世界跟踪会话的其他功能(平面检测,环境纹理,碰撞测试,物体检测,世界地图保存/恢复)。

选择哪个?

这与您想要创造的体验有关。如果要使实际的贺卡,海报或广告牌看起来像虚拟内容一样“活跃起来”,并且您不关心该内容与现实世界的交互,请使用ARImageTrackingConfiguration。如果您要进行以其他方式与世界互动的AR体验,并且想向其中添加基于图像的内容,请使用ARWorldTrackingConfiguration + detectionImages + maximumNumberOfTrackedImages

如何在它们之间切换?

可能是个坏主意。

每次使用与会话之前运行的配置类型不同的配置类型来调用run(configuration)时,都会重置其所有跟踪状态-在切换之前,它不知道其锚点在哪里。