ARFoundation之路-概述

版权声明: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之路-概述_第1张图片

(二)、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之路-概述_第2张图片
  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

你可能感兴趣的:(ARFoundation之路)