ARKit之路-ARKit原理

版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。

  ARKit提供如此出众AR体验的背后是苹果公司强大的软硬件整合能力和做到极致的用户体验,苹果公司的生态拥有其他企业无法比拟的优势,这不仅包括强大的硬件资源,还包括精细健壮的软件技术和追求完美的场景渲染。本节,我们主要学习了解ARKit的核心功能及ARSession、ARAnchor、ARFrame在AR应用发开中的关键作用,更具体的内容会在后续学习中进一步了解。

(一)ARKit三大基础能力

  ARKit整合了SLAM、计算机视觉、机器学习、传感器融合、表面估计、光学校准、特征匹配、非线性优化等等大量的低层技术,提供给开发者简洁易用的程序界面。ARKit提供的能力总体可以分为三个部分:运动跟踪、场景理解、渲染,如下图所示,在这三大基础能力之上,构建了形形色色的附加功能。

在这里插入图片描述

  (1)运动跟踪

  运动跟踪实时跟踪用户设备在现实世界中的运动,是ARKit的核心功能之一,利用该功能可以实时获取到的用户设备姿态信息。在运动跟踪精度与消除误差积累方面,ARKit控制得非常好,表现在使用层面就是加载的虚拟元素不会出现漂移、抖动、闪烁。ARKit的运动跟踪整合了VIO和IMU,即图像视觉跟踪与运动传感器跟踪,提供6DOF(Degree Of Freedom)跟踪能力,不仅能跟踪设备位移,还能跟踪设备旋转。

  更重要的是,ARKit运动跟踪没有任何设置要求,不需要对环境的先验知识,也没有额外的传感器要求,仅凭现有的移动设备就能满足ARKit运动跟踪的所有要求。

  (2)场景理解

  场景理解建立在运动跟踪、计算机视觉、机器学习等技术之上。场景理解提供了关于设备周边现实环境的属性相关信息,如平面检测功能,提供了在现实环境中物体表面(如地面、桌面等)检测平面的能力,如下图所示。技术上讲,ARKit通过检测特征点和平面来不断改进它对现实世界环境的理解。ARKit可以检测看起来位于常见水平或垂直表面(例如桌子或墙)上的成簇特征点,并允许将这些表面用作应用程序的工作平面,ARKit也可以确定每个平面的边界,并将该信息提供给应用,使用此信息将可以将虚拟物体放置于平坦的表面上而不超出平面的边界。场景理解是一个渐进的过程,随着设备探索的环境不断拓展而不断加深,并可随着探索的进展不断修正误差。
在这里插入图片描述
  ARKit通过VIO检测特征点来识别平面,因此它无法正确检测像白墙一样没有纹理的平坦表面。 当加入LiDAR传感器后,ARKit对环境的感知能力得到大幅度提高,不仅可以检测平坦表面,也可以检测非平坦有起伏的表面,由于LiDAR的特性,其对弱纹理、光照不敏感,可以构建现实环境的高精度几何网格。

  场景理解还提供了射线检测功能,利用该功能可以与场景中的虚拟对象、检测到的平面、特征点交互,如放置虚拟元素到指定位置、旋转移动虚拟物体等。场景理解还对现实环境中的光照信息进行评估,并利用这些光照估计信息修正场景中的虚拟元素光照。除此之外,场景理解还实现了反射现实物理环境以提供更具沉浸性的虚实融合体验。

  (3)渲染
  严格意义上讲,ARKit并不包含渲染功能,AR的渲染由第三方框架提供。但除提供场景理解能力之外,ARKit还提供连续的摄像头图像流,这些图像流可以方便的融合进任何第三方渲染框架,如RealityKit、SceneKit、SpriteKit、Metal,或者是自定义的渲染器。ARKit与渲染器之间的关系如下图所示。
在这里插入图片描述

  运动跟踪、场景理解、渲染紧密协作,形成了稳定、健壮、智能的ARKit,在这三大基础能力之上,ARKit还提供了诸如2D图像识别跟踪、3D物体识别跟踪、物理仿真等实用功能。

  在苹果公司的强力推动下,ARKit正处于快速发展中,更好的硬件和新算法的加入,提供了更好更快的检测速度(如平面检测、人脸检测、3D物体检测等等),更多更强的功能特性(如人形遮挡、人体运动捕捉、人脸BlendShape、场景几何等等)。ARKit适用的硬件范围也在拓展,可以预见,ARKit适用的硬件一定会拓展到苹果公司的AR眼镜产品。

(二)ARSession

  ARSession(AR会话)是ARKit中最重要的概念之一,其主要的功能是管理AR应用的状态和整个生命周期,是ARKit API的主要入口。

  ARSession整合了底层的所有技术为开发者提供程序界面,这些技术包括从设备运动传感器硬件中读取数据、捕获摄像头图像数据并进行分析、控制虚拟场景摄像机与硬件设备摄像头的对齐、执行Session空间与AR世界空间的转换等等。ARSession综合所有的这些信息,在设备所处的现实空间和虚拟空间之间建立联系。每一个ARKit应用都需要且仅需要一个ARSession,由其向上提供服务。

  ARKit提供了非常多的功能特性,每一个功能特性对软硬件都有其独特的要求(如进行人脸检测的功能与进行2D图像检测识别的功能对硬件及前置需求均不一样),因此应用程序需要使用某项功能时应当在运行前进行配置。负责功能配置的为配置信息类(ARConfiguration),配置信息决定了ARKit如何跟踪设备、使用的硬件、可以使用的功能集以及更多其他细节。如ARWorldTrackingConfiguration允许用户使用后置摄像头以6DOF的模式开启运动跟踪,而ARFaceTrackingConfiguration则要求使用设备的前置摄像头检测跟踪人脸。

  利用ARSession可以检测设备是否支持ARKit以及支持的功能子集,可以在运行时检测ARKit的运行跟踪状态,并可根据需要暂停、停止、重启Session进程。

(三)ARAnchor

  ARAnchor(AR锚点)也是ARKit中最重要概念之一,任何需要锚定到现实空间、现实2D图像、现实3D物体、人体、人脸的虚拟对象都需要通过特定的锚点连接,另外,共享AR体验也必须通过ARAnchor才能实现。在后续的学习中,我们还会详细讲述ARAnchor,现在需要知道的是,不通过锚点就无法将虚拟元素、虚拟对象添加到场景中。

  (1)锚点的工作原理

  AR应用中,摄像头和虚拟物体在现实世界空间中的位置会在帧与帧之间更新,即虚拟物体在现实世界空间中的姿态每帧都会更新,由于陀螺仪传感器的误差积累,虚拟物体会出现飘移现象,为解决这个问题,我们需要使用一个锚点将虚拟对象固定在现实空间中。如前所述,这个锚点的姿态信息偏差必须要能用某种方式消除以确保锚点的姿态不会随着时间而发生变化。消除这个偏差的就是视觉校准技术,通过视觉校准能让锚点保持相同的位置与方向,这样,连接到该锚点的虚拟对象也就不会出现飘移。一个锚点上可以连接一个或多个虚拟对象,锚点和连接到它上面的物体看起来会待在它们在现实世界中的放置位置,随着锚点姿态在每帧中进行调整以适应现实世界空间更新,锚点也将相应的更新虚拟物体姿态,确保这些虚拟物体能够保持它们的相对位置和方向,即使在锚点姿态调整的情况下也能如此。

  (2)使用锚点

  一般来说,虚拟对象之间、虚拟对象与可跟踪对象之间、虚拟对象与现实世界空间之间存在相互位置关系时,我们可以将一个或多个物体连接到一个锚点以保持它们之前的相互位置关系。
有效使用锚点可以提升AR应用的真实性和沉浸感,连接到附近锚点的虚拟对象会在整个AR体验期间保持它们的位置和彼此之间的相对位置关系,而且借助于锚点有利于减少CPU开销。

  使用锚点的注意事项:

  (1)尽可能复用锚点。在大多数情况下,应当让多个相互靠近的虚拟物体使用同一个锚点,而不是为每个虚拟物体创建一个新锚点。如果虚拟物体需要保持与现实世界空间中的某个可跟踪对象或位置之间独特的空间关系,则需要为该物体创建新锚点。因为锚点将独立调整姿态以响应ARKit在每一帧中对现实世界空间的估算,如果场景中的每个虚拟物体都有自己的锚点则会带来很大的性能开销。另外,独立锚定的虚拟对象可以相对彼此平移或旋转,从而破坏虚拟物体的相对位置应保持不变的AR场景体验。

  例如,假设AR应用可以让用户在房间内布置虚拟家具。当用户打开应用时,ARKit会以平面形式开始跟踪房间中的桌面和地板。用户在桌面上放置一盏虚拟台灯,然后在地板上放置一把虚拟椅子,在此情况下,应将一个锚点连接到桌面平面,将另一个锚点连接到地板平面。如果用户向桌面添加另一盏虚拟台灯,此时我们可以重用已经连接到桌面平面的锚点。这样,两个台灯看起来都粘在桌面平面上,并保持它们之间的相对空间关系,椅子也会保持它相对于地板平面的位置。

  (2)保持物体靠近锚点。锚定物体时,最好让需要连接的虚拟对象尽量靠近锚点,避免将虚拟物体放置在离锚点几米远的地方,以防止由于ARKit更新世界空间坐标而产生意外的旋转运动。如果确实需要将虚拟物体放置在离现有锚点几米远的地方,应该创建一个更靠近此位置的新锚点,并将物体连接到新锚点。

  (3)分离未使用的锚点。为提升应用的性能,通常需要将不再使用的锚点分离销毁。因为每个可跟踪对象都会产生一定的CPU开销,ARKit不会释放具有连接锚点的可跟踪对象,从而造成无谓的性能损失。

  (3)锚点种类

  为更好的表达锚点的性质及其附带信息,ARKit将ARAnchor分为9类,如下表所示,各类ARAnchor的具体使用将在后续的学习中进行详细介绍。

锚点种类描述
ARPlaneAnchorARKit检测到的物理环境中的平面Anchor。
ARImageAnchor在世界跟踪中检测到的2D图像Anchor,用以表示该2D图像的姿态。
ARObjectAnchor在世界跟踪中检测到的3D物体Anchor,用以表示该3D物体的姿态。
ARFaceAnchorARKit检测到的设备摄像头图像中的人脸Anchor,包含人脸姿态及表情信息。
ARBodyAnchorARKit检测到的设备摄像头图像中的3D人体Anchor。
ARParticeipantAnchor在多人共享的AR体验中表示其他参与方的Anchor。
AREnvironmentProbeAnchor用于表示环境光探头的Anchor,ARKit使用环境光探头进行环境反射。
ARMeshAnchor使用LiDAR重建场景后每一个场景几何网格的Anchor。
ARGeoAnchor用于表示地理位置信息的Anchor。

(四)ARFrame

  运行中的ARSession会从设备摄像头中采集视频图像流,并利用这些视频图像流进行分析以评估用户设备的姿态和进行其他视觉计算,这些视频图像流会以帧(Frame)的形式进行更新,ARKit也以ARFrame的形式向用户提供这些信息。

  ARFrame(AR帧)最直观的理解是摄像头获取的一帧图像,ARKit背景渲染的画面就来自摄像头获取的图像帧。但在ARKit中,ARFrame还包含更丰富的内容,它提供了某一个时刻的AR状态,这些状态包括:当前Frame中的环境光照信息(如在绘制内容的时候根据光照控制虚拟物体绘制的颜色,使其更真实);WorldMap状态;当前场景的参数;当前Frame中检测到的特征点云及其姿态;当前Frame中包含的Anchors和检测到的平面集合;手机设备当前的姿态、帧获取的时间戳、AR跟踪状态和摄像头的视矩阵等。

  ARFrame也构成了AR应用使用者可见的场景,是ARKit与使用者交互的窗口。

参考资料

1、ARKit documents ARKit documents

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
课程介绍 本套课程从技术理念到项目实践,教大家系统掌握ARKit技术开发,随心打造iOS端AR增强现实应用。由一开始的开发环境搭建,到Unity ARKit Plugin、ARFoundation ARKit等不同时期技术的讲解。从平面模型放置、识别图片、手势交互、3D物体识别、面部AR贴纸、光照估计、环境探针、多人AR技术,甚至包含ARKit3.0的动作捕捉技术等。除了以上课程内容,更加入了随着技术更新与时俱进更新的ARKit连载技术教学内容。课程收益 轻松理解ARKit的技术原理,从零到一创建自己的第一个AR项目。学习UnityARKit Plugin经典技术,了解ARKit中的常见概念和原理。学会在 ARFoundation 中使用ARKit,进行企业级AR项目开发。学会如何在AR项目里播放模型动画,通过触屏手势交互实现模型的旋转和缩放。 了解ARKit的图片识别,掌握AR卡片、AR书籍的实现方法。 学会使用面部增强技术,实现热门短视频应用的AR贴纸效果,实现面部表情追踪。学会使用ARKit物体检测技术,实现3D物体识别,可以广泛应用于工业、建筑、古董、玩具手办、艺展览等不同场景。学习ARKit中的经典交互案例,优化AR项目的用户体验。熟练使用环境纹理、光照估计技术,让AR内容随当前现实场景自动变化调节,看起来更加真实。基于WorldMap、CollaborativeSession AR技术,实现AR场景的持久化及多人AR体验效果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_DavidWang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值