版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。
(一)、什么是ARFoundation
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开发包,这也提高了利用其他工具进行开发的开发者学习成本。在这种情况下,Unity构建了一个AR开发平台,这就是ARFoundation,这个平台架构于ARKit和ARCore之上,其目的就是利用Unity的跨平台能力构建一种与平台无关的AR开发环境,换句话说,ARFoundation对ARKit与ARCore进行了再次封装,并按照用户的发布平台自动选择合适的底层SDK版本。
因此,ARFoundation是ARKit XR插件(com.unity.xr.arkit)和ARCore XR插件(com.unity.xr.arcore)的集合,虽然最终都使用ARKit SDK和ARCore SDK,但因为Unity再次封装的缘故,与专业平台(如ARKit插件和ARCore SDK for Unity)相比,C#调用的API略有不同。
ARFoundation的目标并不局限于ARKit与ARCore,它的目标是建成一个统一、开放的AR开发平台,因此,ARFoundation极有可能在下步发展中纳入其他AR SDK,进一步丰富AR开发环境。在进一步的发展中,ARFoundation不仅支持移动端AR设备,还会支持穿戴式AR设备开发。
从上面的描述我们也可以看出,ARFoundation它并不提供AR的底层开发API,这些与平台相关的API均由第三方如ARKit与ARCore提供,因此ARFoundation对某特定第三方功能的实现要比原生的晚(ARFoundation将某第三方SDK的特定功能集成需要时间)。
(二)、ARFoundation与ARCore、ARKit的关系
ARFoundation提供了一个独立于平台的脚本API和MonoBehaviour,因此,开发者可以通过ARFoundation使用ARCore和ARKit共有的核心功能构建同时适用于iOS和Android两个平台的AR应用程序。换句话说,这可以让开发者只需开发一次应用,就可以部署到两个平台的设备上,不必做任何改动。
如前所述,ARFoundation实现实现某底层SDK的功能会比原生的晚,因此,如果我们要开发ARFoundation尚不支持的功能,可以单独使用对应的原生SDK。目前,如果我们只面向ARCore进行开发并希望获取完整的功能集,Google为Unity开发提供了ARCore SDK for Unity;如果只面向ARKit进行开发并希望获取完整的功能集,Unity提供了适用于Unity开发的ARKit插件(Apple并未提供Unity的ARKit SDK开发插件,在ARFoundation发展起来以后,Unity肯定不会再继续维护ARKit插件)。
ARFoundation与ARCore、ARKit的关系如下图所示:
ARFoundation与ARCore、ARKit的区别如下表如示:
SDK | 简介描述 |
---|---|
ARFoundation | AR Foundation将ARKit和ARCore的底层API封装整合到一个统一、开入的框架中,并提供 一些额外的实用功能,如Session生命周期管理,以及用于展示环境中已检测功能的MonoBehaviour。 |
Google ARCore SDK for Unity | 该SDK为ARCore支持的重要AR功能提供原生API,并在Unity中向Android平台公开这些API,以方便开发者调用。 |
Unity ARKit Plugin | 该插件是Unity公司开发的ARKit Unity插件,用于在Unity中构建ARKit应用,它在Unity中公开了C#语言的ARKit Objective-C API,以便开发者调用,该插件还提供一些辅助功能,可以利用兼容iOS设备的前置和后置摄像机。 |
(三)、ARFoundation支持的功能
ARFoundation与ARCore、ARKit都正处于快速发展中,ARCore基本保持每两个月进行一次更新频率,ARKit也已经迭代到了ARKit3.0,作为ARKit与ARCore上层的ARFoundaion也已经到了v2.2版。
但如前文所说,ARFoundation功能的实现要比底层的原生API稍晚一些,下表展示了ARFoundation,ARCore和ARKit功能对比和开发路线图。
支持功能 | AR Foundation | ARCore | ARkit |
---|---|---|---|
垂直平面检测 | √ | √ | √ |
水平平面检测 | √ | √ | √ |
特征点检测 | √ | √ +支持特征点姿态 | √ |
光照估计 | √ | √ +Color Correction | √ + Color Temperature |
射线测试(Hit Testing,对特征点与平面的射线碰撞测试) | √ | √ | √ |
图像跟踪 | √ | √ | √ |
3D物体检测与跟踪 | √ | - | √ |
环境光探头(Environment Probes) | √ | - | √ |
世界地图(World maps) | √ | - | √ |
人脸跟踪(识别、姿态、网格和形状混合) | √ | √ | √(iPhoneX 及更高型号) |
云锚点(Cloud Anchors) | √ | √ | - |
远程调试(Editor Remoting) | 开发中 | √-Instant Preview | √ -ARKit Remote |
模拟器(Editor Simulation) | √ | - | - |
LWRP支持(支持使用ShaderGraph) | √ | 开发中 | 开发中 |
摄像机图像API | √ | √ | - |
人体动作捕捉(Motion capture) | √ | - | √(iPhoneX 及更高型号) |
人形遮挡(People occlusion) | √ | - | √(iPhoneX 及更高型号) |
多人脸检测 | √ | - | √ (iPhoneX 及更高型号) |
多人协作(Collaborative session) | √ | - | √ (iPhoneX 及更高型号) |
多图像识别 | √ | √ | √(iPhoneX 及更高型号) |
AR应用是计算密集型应用,对计算硬件要求较高,就算在应用中什么虚拟对象都不渲染,AR也在对环境、特征点跟踪进行实时解算。由于移动端硬件设备资源限制,一些高级AR应用只能在最新的处理器(包括CPU和GPU)上才能运行。同时得益于Apple强大的独立生态与软硬件整合能力,在ARKit3中推出了很多新功能,但由于Android系统碎片化严重,ARCore预计要等到新版Android发布后才能提供类似的功能。
参考文献
1、Unity’s Handheld AR Ecosystem Unity’s Handheld AR Ecosystem