AR Foundation增强现实开发实战(ARKit版)
上QQ阅读APP看书,第一时间看更新

1.3 AR Foundation概述

在2017年,苹果(Apple)公司和谷歌(Google)公司相继推出了AR开发SDK工具包ARKit和ARCore,分别对应iOS平台与Android平台AR开发。ARKit和ARCore推出后,极大地促进了AR在移动端的普及和发展,自此之后,AR开始进入普通消费场景中,并迅速在各领域落地应用。由于当前移动手机操作系统主要为iOS和Android两大阵营,ARKit和ARCore分别服务于各自系统平台,这意味着软件生产商在开发移动AR应用时必须使用ARKit开发一个iOS版本、使用ARCore开发一个Android版本,这无疑增加了开发时间与成本。

ARCore提供了Android、Android NDK、Unity、Unreal开发包,ARKit官方只提供了XCode开发API,这也增加了利用其他工具进行开发的开发者学习成本。为进一步提升XR开发能力和降低开发成本,Unity构建了一个AR开发平台,这就是AR Foundation,这个平台架构于ARKit和ARCore之上,其目的是利用Unity良好的跨平台能力构建一种与平台无关的AR开发环境,即做了一个中间软件抽象层。换言之,AR Foundation对ARKit和ARCore进行了再次封装,提供给开发者一致的开发界面,屏蔽了底层硬件差异,依据AR应用发布平台自动选择合适的底层SDK版本。

AR Foundation是ARKit和ARCore的软件抽象层,虽然最终都使用ARKit SDK或ARCore SDK实现相关功能,但已经将二者之间的使用差异抹平,开发者无须关心底层系统及硬件差异。由于考虑到提供公共的使用界面,因此AR Foundation对底层SDK特异性的功能部分做了取舍,如ARCore的云锚点功能,AR Foundation不提供直接支持,除此之外,函数方法调用与原生API也不同。

AR Foundation的目标并不局限于整合ARKit与ARCore,它的目标是构建一个统一、开放的AR/MR开发平台,经过几年的发展,AR Foundation也已经纳入Magic Leap、HoloLens AR眼镜端开发的相关SDK,进一步丰富了AR/MR开发能力,不仅支持移动端AR设备,也支持穿戴式AR设备开发。

综上所述,AR Foundation并不提供AR/MR的底层开发API,这些与平台相关的API均由第三方(如ARKit、ARCore、Magic Leap)提供,它是一个软件抽象层,通过提供统一的使用界面和功能封装,进一步降低了AR/MR跨设备、跨平台开发门槛。

1.3.1 AR Foundation与ARKit

AR Foundation提供了独立于平台的脚本API和MonoBehaviour组件,因此,开发者可以通过AR Foundation使用ARCore和ARKit公有的核心功能构建同时适用于iOS和Android两个平台的AR应用程序,只需一次开发,就可以部署到两个平台的不同设备上,不必做任何改动。

AR Foundation架构于ARCore和ARKit之上,相比于使用原生SDK进行开发,多了一个软件抽象层,其与ARCore、ARKit的关系如图1-6所示。

图1-6 AR Foundation、ARCore、ARKit相互关系图示

1.3.2 AR Foundation支持的功能

AR Foundation与ARCore、ARKit都处于快速发展中,支持的功能也从核心的运动跟踪、环境理解向周边扩展,对AR应用开发的支持越来越完善,它们的主要功能对比如表1-1所示。

表1-1 AR Foundation、ARCore、ARKit功能对比

AR应用是计算密集型应用,对计算硬件要求较高,AR应用启动后,即使在应用中不渲染虚拟对象,其底层运动跟踪功能也在对环境图像、特征点跟踪进行实时解算,由于移动端硬件设备资源的限制,一些高级AR特性只能在最新的处理器(包括CPU和GPU)上才能运行,如人体姿态跟踪、场景网格、深度API等。

1.3.3 AR Foundation功能概述

AR Foundation功能的实现依赖于其底层SDK,同时,AR Foundation能实现的功能也与底层SDK所在平台相关,如ARKit有ARWorldMap功能,而ARCore没有,因此,即使AR Foundation支持WorldMap功能,该功能也只能在支持ARKit运行的iOS平台上才有效,编译到Android平台则会出现错误。对于ARKit和ARCore都支持的公共功能,AR Foundation可以在编译时根据平台选择无缝地切换所用底层SDK,达到一次开发跨平台部署的目的。除此之外,AR Foundation也提供了很多辅助功能和组件以方便开发者使用。

AR Foundation功能设计参考了ARKit现有功能,并主要以ARKit现有功能为基础设计其功能架构,因此,ARKit支持的主要功能AR Foundation基本支持,并且版本迭代基本与ARKit一致。

1.3.4 AR Foundation体系架构概述

虽然AR Foundation是在底层SDK API之上进行抽象封装,但为实现AR应用开发跨平台能力(平台无关性),AR Foundation搭建了一个开放性的灵活架构体系,使这个架构能够容纳各类底层SDK,能支持当前及后续其他底层AR/MR SDK的加入,宏观上看,AR Foundation希望构建一个能开发各类AR/MR应用的统一平台。

为屏蔽底层系统和硬件差异,AR Foundation建立在一系列的子系统(Subsystem)之上。子系统负责处理与平台相关的工作,进行软件抽象,屏蔽硬件差异,实现功能模块的平台无关性。如XRPlaneSubsystem子系统负责实现平面检测、显示功能,在编译时,AR Foundation根据所选平台自动调用不同底层的SDK,从开发者角度看,只需调用XRPlaneSubsystem功能,而不用关心最终这个实现是基于iOS还是Android,对平台透明化。

这种架构对上提供了与平台无关的功能,对下可以在以后的发展中纳入不同的底层SDK,从而实现最终的一次开发,跨平台部署的目标,更详细内容将在第2章中进行阐述。

1.3.5 基本术语

1.运动跟踪(Tracking)

在2D和3D空间中跟踪用户的运动并定位其位姿是任何AR应用的基础,也是营造虚实融合体验的关键,运动跟踪又称为世界跟踪,指AR设备实时解算其在物理世界中的相对位置和方向的能力。当设备在现实世界中运动时,AR Foundation通过SLAM技术来理解移动设备周边环境、定位设备姿态。SLAM算法会检测从摄像头图像中捕获的视觉差异特征(称为特征点),并使用这些特征来计算其位置变化,这些视觉信息与设备IMU惯性测量结果结合,便可估测摄像头随着时间推移而相对于周围世界的姿态变化。

通过将渲染3D内容的虚拟相机的姿态与设备摄像头的姿态对齐,就能够从正确的透视角度渲染虚拟内容,渲染的虚拟图像可以叠加到从设备摄像头获取的图像上,让虚拟内容看起来就像真实世界的一部分。

2.可跟踪对象(Trackable)

可以被AR设备检测和/或跟踪的真实特征,例如特征点、平面、人脸、2D图像、锚点等。

3.特征点(Feature Point)

SLAM使用摄像头采集的图像分析和跟踪环境中用于构建环境地图的特定点,例如木纹表面的纹理点、书本封面的图像,特征点通常是视觉差异点,包含了被观察到的图像视觉特征集合。

4.会话(Session)

会话用于管理AR系统的状态,是AR功能的入口,是AR应用中非常重要的概念。会话负责处理整个AR应用的生命周期,控制AR系统根据需要开始和暂停摄像头图像帧的采集、初始化、释放资源等。在开始使用AR API时,可通过ARSessionState状态值检查当前设备是否支持AR功能。

5.会话空间(Session Space)

会话空间即为AR会话初始化后建立的坐标空间,会话空间原点(0,0,0)为AR应用完成初始化时设备摄像头所在位置,AR设备跟踪的坐标信息都处在会话空间中,因此在使用时,需要将其从会话空间转换到Unity空间,类似于模型空间和世界空间的转换,AR Foundation默认会执行会话空间到Unity世界空间的转换。

6.射线检测(Ray Casting)

AR Foundation利用射线检测获取世界空间中对应于手机屏幕的XYZ坐标(通过点按或应用支持的任何其他交互方式),实现时将一条射线投射到摄像头的视野中,返回这条射线贯穿的任何平面或特征点及碰撞位置在现实世界空间中的姿态,通过射线检测可以与AR场景中的物体交互。

7.增强图像(Augmented Image)

使用增强图像(图像检测)可以构建能够响应特定2D图像(如产品包装或电影海报)的AR应用,用户将设备摄像头对准特定图像时触发AR体验,如将设备摄像头对准电影海报后加载虚拟模型或者虚拟场景,实现对现实图像的增强。使用增强图像时可离线创建图像数据库,也可以在运行时实时添加参考图像,在AR应用运行时,AR Foundation将检测和跟踪这些图像,并返回其姿态。

8.体验共享(Sharing)

AR数据持久化存储与体验共享是当前AR领域的一个难点问题,ARKit提供了目前业内最好的解决方案。为解决数据持久化存储的问题,ARKit提供了ARWorldMap技术;为解决体验共享的问题,ARKit提供了协作会话(Collaborative Session)技术,通过这两种技术手段将复杂的技术简单化,并给予了开发者良好的支持。除此之外,借助于ARCore中的云锚点(Cloud Anchor)功能或者Azure云服务中的空间定位点功能,可以创建适用于iOS和Android设备的多人共享AR应用,实现AR体验的多人共享。使用云锚点时,一台设备可以将锚点及其附近的环境特征点信息发送到云端进行托管,通过锚点解析可以与同一环境中Android或iOS设备上的其他用户共享相关数据,从而让用户能够同步拥有相同的AR体验。

9.平面(Plane)

为营造更加真实的AR体验,AR场景中大部分内容需要依托于平面建立。AR Foundation中平面可分为水平、垂直两类,平面描述了真实世界中的一个二维平面,包括平面的中心点、平面的XZ轴方向长度、组成平面多边形的顶点等数据。检测到的平面还分为3种状态:正在跟踪、可恢复跟踪和永不恢复跟踪,不在跟踪状态的平面,平面包含的信息可能不准确。随着环境探索的进行,AR Foundation也可能会自动合并两个或者多个平面。

10.姿态(Pose)

在AR Foundation中,姿态用于描述物体位置与方向属性,AR Foundation API中的姿态可以被认为与OpenGL的模型矩阵或DirectX的世界矩阵一致。随着AR Foundation对环境理解的不断加深,它会自动调整坐标系以便与真实世界保持一致,因此每帧中,虚拟物体的姿态都有可能发生变化。

11.光照估计(Light Estimate)

光照估计描述了通过设备摄像头采集的图像信息估计真实环境中光照情况的过程,通过计算机视觉图像算法可以获取当前设备摄像头采集图像中的光照强度、颜色分量及光照方向,使用光照估计信息渲染虚拟对象,照明效果会更真实,并且可以根据光照方向调整AR中虚拟物体的阴影方向,增强虚拟物体的真实感。