Alan Hou的个人博客

一文搞懂ARKit,ARCore,RealityKit和Vuforia

一文搞懂ARKit,ARCore,RealityKit和Vuforia

前言

AR框架的一个核心是含能够理解特征的场景和各种类型的锚点。锚点有很多种,可根据特定场景来摆放3D模型 ,甚至可以真人来做距离测量(ARBodyAnchor)。并且这些框架不容忽视的优势是具有进行场景重建和人形遮挡(occlusion)的32位尝试数据。事实上,AR框架的大部分新功能都增强了AR体验质量。硬件也是如此,苹果全新的U1和R1芯片就带来了AR体验质量的跃升。今年苹果带了全新的Vision Pro头显(微软HoloLens的一大竞争对手),让我们可以通过手势、眼部追踪和声音指令来与AR场景进行交互。

这我们进入了全新的空间计算时代。

有哪些玩家

Google ARCore可用于构建Android和iOS应用。Apple ARKit and RealityKit可用于构建visionOS和iOS应用。PTC Vuforia是设计用于创建Android、iOS和Windows通用平台应用。对于支持ARCore/ARKit的设备,Vuforia会使用ARCore/ARKit技术(也称为平台软硬一体支持)。对于不支持的设备,Vuforia会使用其自有的AR技术和引擎,也称为不依赖硬件的软件方案。实践中,使用Vuforia引擎创建的AR体验会尝试使用最高支持技术,然后依次降级直到设备的运行时提供支持。

在对Android OEM智能手机开发时,可能会遇到一些不愉快的问题:不同厂商的设备需要进行传感器校准才能获得相同的AR体验。所幸苹果的设备没有这一问题,因其所有的传感器都是以相同条件进行校准的。

下面逐一讲解

Google ARCore

ARCore发布于2018年3月。ARCore有三大主要基础概念:动作追踪、环境理解和光照估计。ARCore可在支持的设备上通过称为并发测距与映射Concurrent Odometry and Mapping,简称COM)的技术在6自由度(6DoF)的世界中追踪位置和方向。COM有助于监测水平、垂直和夹角追踪平面的大小和位置。动作追踪的可行,要归功于RGB相机的60 fps光学数据以及陀螺仪和加速计的1000 fps惯性数据以及ToF传感器的60 fps深度数据。当然,ARKit、Vuforia和其它AR库的工作原理基本相同。

在真实场景中移动手机时,ARCore会捕捉周遭的空间理解手机相对世界坐标所处的位置。在捕捉阶段,ARCore会“播种”一些特征点。这些特征点在RGB相机中可见,ARCore使用它们计算手机的位置变化。然后视觉数据要结合IMU(惯性测量单元)的测量数据实时评估ArCamera的位置和方向。如果手机未配备ToF传感器,ARCore会查找横向、垂直或有角度的表面的特征点集,让这些表面对应用以平面呈现(我们称这种技术为平面检测)。在检测结束后我们可以使用这些平面在场景中旋转3D对象。带着色器的虚拟几何体会由ARCore伴侣Filament渲染-支持实时基于物理的渲染(也称PBR)的Sceneform

尽管如此,当前Sceneform仓库已被存档,Google不再维护。最后发布的官方版本是Sceneform 1.17.1。这听起来很奇怪,但ARCore团队成员说“Sceneform库没有直接的替代品,ARCore开发者可在Android AR应用中自由使用任意3D游戏库。但有一个非官方的Sceneform + SceneView分支,因此它是Sceneform框架的一个持续版本(最新版本是Sceneform 1.30)。”

ARCore的环境理解让我们可以以正确的深度遮挡放置3D对象,真实地与现实世界结合。例如,可以使用深度命中测试(hit-testing)和ArAnchors在桌上摆放虚拟咖啡杯。

ARCore也可以定义真实环境的光照参数,提供给定相机图像的平均强度和颜色校正。这一数据可让我们以周围环境相同的条件点亮虚拟场景,大大地增强真实性。

当前ARCore版本有很多知名的API,如原始深度API全深度API、 地理空间API光照估计场景语义APIVulkan渲染(OpenGL之外)、地形锚点API电子防抖增强面部增强图像即时摆放365天云锚点录制和回放多播放器支持。ARCore工具集之外还有Android模拟器,让我们可以使用虚拟设备运行和调试AR应用。

在ARCore 1.31中,Google工程师将16位深度通道中的每个灰度级映射到了一个1 mm的距离。因此它可覆盖65,536毫米的距离(2^16)。下表展示了原始深度API和全深度API的区别:

全深度API (v1.31+) 原始深度API (v1.24+) 全深度API (v1.18+)
精度
覆盖度 所有像素 非所有像素 所有像素
距离 0至65.5米 0.5至5.0米 0至8.2米

ARCore比ARKit更早。还记得2014年发布的Project Tango吗?不严格地说,ARCore就是对Tango SDK的重写。但对FlyBy MediaFaceshiftMetaIOCamerai 和 Vrvana的英明收购让Apple不仅赶上Google并且大幅反超。这种竞争对AR产业应该是良性的。

ARCore的最新版本支持OpenGL ES加速,以及集成了Unity, Unreal和Web应用。当前安卓平台上AR最强大且高能效的芯片是MediaTek Dimensity 9200 (4 nm), Snapdragon 8 Gen 2 (4 nm), Exynos 2200 (4 nm) 和 Google Tensor G2 (5 nm)。

平台方向:Android (Kotlin/Java), Android NDK (C) 和 Unity (AR Foundation)。

ARCore价格: 免费

ARCore的优势 ARCore的劣势
iToF和深度API的支持 AR头显仍处于开发中
快速的平面检测 云端锚点在线上托管
长距精度 缺乏原生渲染引擎
Android Studio中的ARCore模拟器 不支持外部摄像头
g地理空间锚点 快速耗光手机电池

 

Apple ARKit

ARKit于2017年6月发布。和其竞争对手一样,ARKit也使用了特殊的追踪技术,但其名称为视觉惯性里程计(Visual Inertial Odometry)。VIO用于精准捕捉设备周遭的世界。VIO与ARCore中的COM非常相似。ARKit中也有着相似的基本概念:世界追踪场景理解 (包含4个阶段: 平面检测Ray-Casting光照估计 场景重建)和渲染,借助ARKit伴侣-SceneKit框架的强大辅助,它实际上是苹果自2012年以来的3D引擎,还有用Swift全新编写用于AR的RealityKit框架以及其2D引擎SpriteKit框架(2013年起)。

VIO融合了60 fps的RGB传感器、1000 fps的Core-Motion数据(IMU)以及LiDAR数据。此外,应当注意由于较高的能耗(因为会大量使用CPU和GPU),iPhone的电池会很快耗光。对Android设备也是如此。

ARKit有很多有用的方法,可进行高效追踪和精准测量。在其弹药库中我们可以轻松地找到保存和获取ARWorldMaps的功能。世界地图对持续和多用户AR体验是不可或缺的桥梁,通过它可以回到退出前填充相同所选3D内容的环境。对前置和后置摄像头的同步捕捉以及协作会话的支持也非常棒。

对游戏爱好者也有一些好消息:借助MultipeerConnectivity框架,可支持最多6个人同时玩相同的AR游戏。对于3D几何休,我们可以使用全新由Pixar开发和提供支持的USDZ文件格式。USDZ适合复杂的3D模型,支持多PBR着色器、物理特效、动画及空间音频。也可在ARKit中使用如下3D格式

ARKit也可以实现人形和对象遮挡技术(基于alpha深度通道分段)、LiDAR场景重建人体运动捕捉跟踪垂直和水平平面检测图像检测3D对象检测3D对象扫描4K HDR视频捕捉RoomPlan扫描。借助人形和对象遮挡工具,AR内容可真实地出现在现实世界实体之前及之后,让AR体验更具渲染性。使用了机器学习算法的现实反射,以及可同时追踪3张脸的脸部追踪体验也可供我们使用。

使用ARKit和iBeacon,可辅助支持iBeacon的应用知道其所处的房间,显示为该房间所选择的正确3D内容。使用ARKit我们应深度探索ARAnchor类及其子类。

要创建ARKit 7.0应用,我们需要有macOS Sonoma, Xcode 15及运行着iOS 17或visionOS的设备。ARKit可以很好地结合用于GPU加速的Metal框架。也别忘了ARKit可深度集成Unity和Unreal。当前用于AR体验最强大、节能的芯片是Apple M2 (5 nm) 和 A16 Bionic (4 nm)。

ARKit价格: 免费

ARKit的优势 ARKit的劣势
LiDAR和深度API支持 操作系统和芯片限制
Xcode中的visionOS模拟器 ARAnchors无法自动更新
世界地图、AirTags和iBeacon识别 Xcode中无iOS模拟器
Vision Pro头显支持 无外部相机支持
地理空间锚点 快速耗光手机或头显的电池

 

Apple visionOS + RealityKit

RealityKitvisionOS是通向空间计算(移动设备后的新台阶)的大门。 RealityKit在WWDC 2019上发布。它是用于开发visionOS、iOS和macOS应用的高阶框架。它支持当代的实体-组件-系统范式,让我们可高效地实现非AR及AR体验。RealityKit的AR能力(如追踪系统和场景理解能力)完全基于ARKit。坦率地说,没有在这里必要列举所有的RealityKit特性,读者可以阅读这篇StackOverflow帖子

结合了高品质的硬件和软件,测量品质也是高超的。这也是为什么运行了visionOS和基于RealityKit软件的Vision Pro头显可以在大空间中得到高级别品质的度量。Vision Pro头显有12个相机和5个传感器,可完美使用手势和声音指令追踪环境以及与3D模型交互。结合了NearbyInteraction API以及新近更新的CoreLocation框架的RealityKit,为我们提供了精准度量的工具集。

在visionOS中,对于手势有两种策略。人们首先可以使用眼睛和手部与应用进行交互。在间接手势中,人观看模型,然后通过用手指敲击大拇者进行选中(这只是几十种手势中的一种)。在直接手势中,用户的手指直接与3D空间中的模型进行交互。顺便提一下,visionOS实时识别并追踪每只手上的26个骨关节。

关注RealityKit的得力助手-隶属于Xcode的Reality Composer Pro应用。它符合直觉的UI对于快速AR场景原型创建非常有用。Reality Composer Pro中创建的场景可布满锚点、行为以及具有ILM的MaterialX的模型。Reality Composer Pro有一个可下载3D资源的免版权库。可以将合成作品导出为usdz文件或是用于AR Quick Look体验的轻量.reality文件。

RealityKit价格: 免费

RealityKit的优势 RealityKit的劣势
Xcode中的visionOS模拟器 CPU/GPU高强度使用
Vision Pro头显支持 仅支持iOS 13+和macOS 10.15+
多线程渲染 Xcode中无iOS模拟器
 Reality Composer Pro场景支持 快速耗光手机或头显的电池
自动更新追踪目标 无外部相机支持

PTC Vuforia

2015年PTC从高通(Qualcomm)手上以6500万美元收购了Vuforia。高通在2010年便启动了Vuforia项目。可以说Vuforia是AR家庭中的大姐大了。

2016年11月Unity Technologies和PTC官宣了简化AR开发的战略合作。之后便一起合作将Vuforia AR平台的新特性集成到Unity引擎中。Vuforia可使用的开发环境有Unity、MS Visual Studio、Apple Xcode和Android Studio。它支持大量的智能手机、平板和AR智能眼镜,如HoloLens和Magic Leap 2。

Vuforia引擎的视觉惯性同步定位和地图绘制,或称为VISLAM,是一套实现了无标记AR体验的算法。VISLAM结合了视觉惯性里程计(VIO) 和同步定位与地图绘制(SLAM)的优点。

Vuforia引擎具备了ARKit最新版本中同样的主要功能,但也有其自有工具,如深度学习模型目标和对iOS的外部相机支持和对ARCore全新试验API,以及对行业最新AR眼镜的支持。Vuforia相对ARKit和ARCore的主要优势是它有更广泛的设备支持列表并且支持基于Intel的Windows设备的全Windows平台的应用开发,包括Microsoft Surface和HoloLens。Vuforia有独立版本,也有直接集成到Unity的版本。

Vuforia Fusion

Vuforia Fusion是一系列技术,设计用于对广泛的设备提供最佳AR体验。设计它用于解决AR支持技术的碎片化问题,比如相机、传感器、芯片和软件框架。借助Vuforia Fusion,在无额外工作的情况下应用可自动提供最佳体验。

Vuforia Fusion有如下功能:

Vuforia Engine Area Targets让开发者可以将整个空间用于AR目标,不论它是工厂地面还是零售店。使用一个支持设备,如Matterport Pro2 3D相机,开发者可创建目标位置的详细3D扫描。扫描成3D模型后,可通过Vuforia Area Target Generator将其转化为Area Target。然后可将这一目标导入Unity。

遮挡管理是创建真实AR体验的一个关键特性。在使用遮挡管理时,Vuforia引擎监测并追踪对象,哪怕只是部分隐藏于日常障碍如人手之后。特殊的遮挡处理可让应用显示的图像就像是出现在物理对象中一样。

Vuforia API支持StaticAdaptive模式。真实世界模型保持静态时,如大型工具设备,实现静态 API会使用少很多的处理电能。这使得这类模型有更长及更高的性能体验。对于会运动的对象,适配API可提供连续的优良体验。

Vuforia支持iOS设备的Metal加速。也可以在项目中使用Vuforia样本。如,Vuforia Core Samples库包含各种使用Vuforia特性的场景,有预配置的对象识别场景,可用作对象识别应用的参照和初始场景。

以下是其优劣势:

Vuforia的优势 Vuforia的劣势
支持Android, iOS, UWP 价格不合理
广泛支持的设备 开发文档质量差
外部相机支持 PTC的商业涉政
Webcam/模拟器播放模式 不支持地理追踪
圆柱体目标支持 Unity端的未来堪忧

总结

在使用PTC Vuforia进行开发时要比ARCore 和 ARKit有很大的局限。Vuforia是一个支持更广泛Apple和Android设备(甚至有些官方都不支持)的伟大产品,它还支持一些智能眼镜和AR头显的最新模型。

但ARKit, RoomPlanRealit家族工具集(RealityKit, AR Quick Look, Reality Composer Pro, iOS Reality Composer和Reality Converter) 所拥有的最新特性,Vuforia 和 ARCore并不全都有。ARKit 和 RealityKit自身在室内无需校准的短距测量精度,ARCore兼容设备是不具备的。这要感谢Vision Pro硬件以及一些iOS设备中的LiDAR dToF扫描器。而ARCore使用原始深度APIDepth from Motion算法的iToF相机。iToF和LiDAR都可以在场景理解阶段为真实世界的表面通过OcclusionMaterial创建高质量的虚拟网格。这种网格可用于度量和碰撞检测。通过iToF和dToF传感器,框架可即时检测非平面表面以及无追踪特征的表面,如在光照很差的房间内的无纹理白墙。

如果实现了iBeacon工具、ARWorldMaps和对GPS的支持,可有助提升追踪质量并消除很多时间积累导致的追踪错误。ARKit与Vision和CoreML框架的紧密集成为AR工具集的健壮性做出了巨大的藏南。与Apple Maps的集成可心让ARKit在室外放置GPS位置锚点,并且精度较高。ARCore也使用地理空间锚点,借助Google Trekker从Google Earth和街景获取地理数据。

Vuforia的度量精度高度依赖所开发的平台。一些Vuforia特性是基于追踪引擎(ARKit或ARCore)的。即使是知名的Vuforia Chalk应用也使用ARKit位置追踪器。但我们还是期待Apple, Google, PTC和Microsoft在未来能给我们提供怎样的硬件和技术吧,每家公司在空间计算领域都有自己的开发生态。

参考资料:https://stackoverflow.com/questions/60505755/realitykit-vs-scenekit-vs-metal-high-quality-rendering/60513052#60513052

退出移动版