基于标记的跟踪
AR 不是什么新的概念,现在的摄像头设备已经在很多年前做到这点了,通过使用 tracking cards
和一种基于标记的 AR 技术
tracking card
提供了真实世界的锚点,使用了特殊的算法分析摄像头的数据,然后确定 card 的位置,大小和方向,然后根据这些信息添加 3D 元素,使用它们添加的摄像头的图片上。
但是如果跟踪的内容会因为卡片离开摄像头而丢失。
无标记的跟踪
想象下你有一个神奇的眼镜,你所能看到的东西都能添加虚拟的 3D 元素,如果你把他们放在上面,你可以无缝的融合那些内容和真实世界的体验,使所有东西看起来很真实,可以去触摸它们的感觉
ARKit 简介
ARKit 是众多 AR 框架中的一个,例如有 Vuforia 等,ARKit 是无标记跟踪的吗,它不需要 tracking cards.
跟踪
ARKit 通过跟踪设备的移动,它通过设备自动的采集移动的数据和更新虚拟的内容,它通过移动虚拟世界的视角来匹配设备的视角
了解场景
为了实现无标记的跟踪,ARKit 创建和管理它自己虚拟的平面和检测平面,当检测到新的平面的时候都会触发特殊的事件。当平面改变或者平面移除,能给你难以置信的控制场景和内容
评估灯光
ARKit 使用当前的视频帧评估当前环境的灯光的情况。它自动更新亮度来匹配当前环境的亮度可,如果你的提供你的虚拟是基于物理材质的话,可以适应灯光的变化。
场景交互
ARKit 提供了 hit-test 函数来让我们和 3D 内容交互。你可以使用这种交互和传统的手势结合,可以通过 SiriKit 来命令 ARKit
度量标度系统
为了在场景中计算距离或者大小,ARKit 使用了相对精确的度量标度系统,无论你使用什么图形的 API,在 ARKit 中,一个单位就是 1 米
集成渲染
ARKit 没有提供图形 API, 它只通过了跟踪平面检测平面的信息,ARKit 可以容易的整合其他的图形框架,例如 SpriteKit, SceneKit 和 Metal
ARKit 的局限
- 平面检测需要的时间:平面检测的时间需要一定的时间
- 移动处理滞后:频繁的移动会导致卡和图形模糊,频繁的移动使 ARKit 难以理解他检测的内容,
- 灯光低的情况下,设备无法场景。
- 光滑没纹理的平面难以检测
- 使用 ARKit 的时候,你可能会观察到一些违背物理的场景,例如一个虚拟的对象被其他真实的对象穿透。
ARKit 背后的技术
ARKit 使用了 Visual Inertial Odometry (VIO) 来跟踪设备的移动,VIO 基于融合了 AVFoundation 图形的输入和 CoreMotion 设备移动的数据。