前言
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、光照估计
、场景语义API、Vulkan渲染
(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 Media, Faceshift, MetaIO, Camerai 和 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
RealityKit
和visionOS
是通向空间计算(移动设备后的新台阶)的大门。 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有如下功能:
- Advanced Model Targets 360 | 由AI提供识别。
- Larger Area Targets without a prior | 适用约4,000 m²的空间。
- Model Targets with ML | 允许即时按形状识别对象。
- Barcode Scanner | 一个读取二维码和条形码的API。
- Model Target Runtime 3D Guide Views | 用于在运行时在Unity中创建引导视图。
- Model Target Web API | 使用Web API生成模型目标。.
- Image Targets | 将AR内容放到水平对象上的最简单方式。
- Multi Targets | 用于带平面和多个面的对象。
- Cylinder Targets | 用于将AR内容放到圆柱形状的对象上。
- Ground Plane | 启用将内容放置到地面及桌面上。
- VuMarks | 允许对一系列对象识别和添加内容。
- Object Targets | 用于扫描对象。
- Static and Adaptive Modes | 用于静态及运动对象。
- Simulation Play Mode | 允许“穿越”或环绕3D模型。
- AR Session Recorder | 可在地录制AR体验。
- 当然还有Vuforia Engine Area Targets.
Vuforia Engine Area Targets让开发者可以将整个空间用于AR目标,不论它是工厂地面还是零售店。使用一个支持设备,如Matterport Pro2
3D相机,开发者可创建目标位置的详细3D扫描。扫描成3D模型后,可通过Vuforia Area Target Generator将其转化为Area Target。然后可将这一目标导入Unity。
遮挡管理
是创建真实AR体验的一个关键特性。在使用遮挡管理时,Vuforia引擎监测并追踪对象,哪怕只是部分隐藏于日常障碍如人手之后。特殊的遮挡处理可让应用显示的图像就像是出现在物理对象中一样。
Vuforia API支持Static
或Adaptive
模式。真实世界模型保持静态时,如大型工具设备,实现静态
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, RoomPlan和Realit家族工具集(RealityKit, AR Quick Look, Reality Composer Pro, iOS Reality Composer和Reality Converter) 所拥有的最新特性,Vuforia 和 ARCore并不全都有。ARKit 和 RealityKit自身在室内无需校准的短距测量精度,ARCore兼容设备是不具备的。这要感谢Vision Pro硬件以及一些iOS设备中的LiDAR dToF扫描器。而ARCore使用原始深度API
或Depth 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在未来能给我们提供怎样的硬件和技术吧,每家公司在空间计算领域都有自己的开发生态。