我是增强现实领域的初学者,正在研究使用智能手机创建建筑物平面图(平面图、房间平面图等具有精确测量值)的应用程序。所以我正在研究可用于此的最佳 AR SDK。将 Vuforia 与 ARCore 和 ARKit 相提并论的文章并不多。
请建议最好的 SDK 使用,每个的优缺点。
我是增强现实领域的初学者,正在研究使用智能手机创建建筑物平面图(平面图、房间平面图等具有精确测量值)的应用程序。所以我正在研究可用于此的最佳 AR SDK。将 Vuforia 与 ARCore 和 ARKit 相提并论的文章并不多。
请建议最好的 SDK 使用,每个的优缺点。
更新日期:2022 年 2 月 24 日。
Google ARCore
允许您为 Android 和 iOS 构建应用程序。与Apple ARKit
您一起为 iOS 构建应用程序;with Apple RealityKit
– 适用于 iOS 和 macOS。一个伟大的旧PTC Vuforia
的旨在为 Android、iOS 和通用 Windows 平台创建应用程序。
Vuforia 的一个关键特性是它使用ARCore
/ARKit
技术,如果它运行的硬件支持它,否则 Vuforia 使用它自己的 AR 技术和引擎,称为software solution without dependant hardware
.
在为 Android OEM 智能手机进行开发时,您可能会遇到一个令人不快的问题:不同制造商的设备需要进行传感器校准才能观察到相同的 AR 体验。幸运的是,Apple 设备没有这样的缺点,因为那里使用的所有传感器都在相同的条件下进行了校准。
让我把第一件事放在首位。
ARCore 于 2018 年 3 月发布。ARCore 基于三个主要的基本概念:Motion Tracking
和. ARCore 允许受支持的移动设备使用称为并发里程计和映射的特殊技术以 6 个自由度 (6DoF) 跟踪其相对于世界的位置和方向。COM 帮助我们检测水平、垂直和倾斜跟踪表面的大小和位置。由于来自 RGB 相机的 60 fps光学数据,加上来自陀螺仪和加速度计的 1000 fps惯性数据,以及来自 ToF 传感器的 60 fps深度数据,运动跟踪工作稳健Environmental Understanding
Light Estimation
. 当然,ARKit、Vuforia 和其他 AR 库的运行方式几乎相同。
当您在真实环境中移动手机时,ARCore 会跟踪周围空间以了解智能手机相对于世界坐标的位置。在跟踪阶段,ARCore“播种”了所谓的feature points
. 这些特征点通过 RGB 摄像头可见,ARCore 使用它们来计算手机的位置变化。然后,视觉数据必须与IMU (惯性测量单元)的测量结果相结合,以估计ArCamera随时间推移的位置和方向。如果手机没有配备 ToF 传感器,ARCore 会寻找看似位于水平、垂直或倾斜表面上的特征点集群,并将这些表面作为平面提供给您的应用程序(我们将此技术称为平面检测)。在检测过程之后,您可以使用这些平面在场景中放置 3D 对象。带有指定着色器的虚拟几何图形将由 ARCore 的伴侣——支持实时基于物理的渲染(又名 PBR)引擎的 Sceneform—— Filament渲染。
尽管如此,此时 Sceneform 存储库已存档,Google 不再积极维护它。最后发布的版本是 Sceneform 1.17.1。这听起来可能很奇怪,但 ARCore 团队成员说“没有直接替代 Sceneform 库的方法,ARCore 开发人员可以自由地将任何 3D 游戏库与 Android AR 应用程序一起使用(视频来自 GoogleIO'21 - 时间 06:20)。
ARCore 的环境理解让您能够以与现实世界真实融合的方式放置具有正确深度遮挡的 3D 对象。例如,您可以使用Depth hit-testing和ArAnchors将一杯虚拟咖啡放在桌子上。
ARCore 还可以定义真实环境的照明参数,并为您提供给定相机图像的平均强度和颜色校正。这些数据可让您在与周围环境相同的条件下照亮虚拟场景,从而显着提高真实感。</p>
当前的ARCore 版本具有诸如Raw Depth API和Full Depth API
, Lighting Estimation
, Augmented Faces
, Augmented Images
, Instant Placement
, Debugging Tools
, 365-days Cloud Anchors和. Android Studio 中的 ARCore 相对于 Xcode 中的 ARKit 的主要优势是Android Emulator允许您使用虚拟设备运行和调试 AR 应用程序。</p>
Recording and Playback
Multiplayer support
下表介绍了 Raw Depth API 和 Full Depth API 之间的区别:
|------------|--------------------|--------------------|
| | "Raw Depth API" | "Full Depth API" |
|------------|--------------------|--------------------|
| Accuracy | Awesome | Bad |
|------------|--------------------|--------------------|
| Coverage | Not all pixels | All pixels |
|------------|--------------------|--------------------|
| Distance | 0.5 to 5.0 m | 0 to 8.0 m |
|------------|--------------------|--------------------|
ARCore 比 ARKit 更老。你还记得 2014 年发布的 Project Tango 吗?粗略地说,ARCore 只是一个重写的 Tango SDK。但明智地收购FlyBy Media、Faceshift、MetaIO、Camerai和Vrvana 不仅帮助苹果赶超,而且大大超过了谷歌。假设它对 AR 行业有利。
最新版本的 ARCore 支持 OpenGL ES 加速,并与 Unity、Unreal 和 Web 应用程序集成。目前,在 Android 平台上实现 AR 体验的最强大和最节能的芯片组是Snapdragon 8 Gen 1 (4 nm) 和Exynos 2200 (4 nm)。
ARCore 价格:免费。
|------------------------------|------------------------------|
| "ARCore PROs" | "ARCore CONs" |
|------------------------------|------------------------------|
| iToF and Depth API support | No Body Tracking support |
|------------------------------|------------------------------|
| Quick Plane Detection | Cloud Anchors hosted online |
|------------------------------|------------------------------|
| Long-distance-accuracy | Lack of rendering engines |
|------------------------------|------------------------------|
| ARCore Emulator in AS | Poor developer documentation |
|------------------------------|------------------------------|
| High-quality Lighting API | No external camera support |
|------------------------------|------------------------------|
| A lot of supported devices | Poor Google Glass API |
|------------------------------|------------------------------|
这是用 Kotlin 编写的 ARCore 代码片段:
private fun addNodeToScene(fragment: ArFragment,
anchor: Anchor,
renderable: Renderable) {
val anchorNode = AnchorNode(anchor)
anchorNode.setParent(fragment.arSceneView.scene)
val modelNode = TransformableNode(fragment.transformationSystem)
modelNode.setParent(anchorNode)
modelNode.setRenderable(renderable)
modelNode.localPosition = Vector3(0.0f, 0.0f, -3.0f)
fragment.arSceneView.scene.addChild(anchorNode)
modelNode.select()
}
平台特定方向:Android (Kotlin/Java)、Android NDK (C) 和 Unity (AR Foundation)。
ARKit 于 2017 年 6 月发布。和它的竞争对手一样,ARKit 也使用特殊的技术进行跟踪,但它的名字是Visual Inertial Odometry。VIO 用于非常准确地跟踪您设备周围的世界。VIO 与 ARCore 中的 COM 非常相似。ARKit中也有3个类似的基本概念:World Tracking
,Scene Understanding
(包括四个阶段:Plane Detection , Ray-Casting , Light Estimation , Scene Reconstruction),并且Rendering
在ARKit同伴的大力帮助下——SceneKit框架,这实际上是一个Apple 3D游戏引擎自 2012 年以来,RealityKit专为 AR 制作并从头开始用 Swift 编写的框架(2019 年发布),以及带有 2D 引擎的SpriteKit框架(自 2013 年起)。
VIO 将60 fps的 RGB 传感器数据与1000 fps的 Core-Motion 数据 (IMU)和 LiDAR 数据融合在一起。除此之外,应该注意的是,由于非常高的能量影响(由于 CPU 和 GPU 的巨大负担),iPhone 的电池将很快耗尽。Android设备也是如此。
ARKit 有一些有用的方法来进行稳健的跟踪和准确的测量。在其武器库中,您可以找到用于保存和检索ARWorldMaps的易于使用的功能。世界地图是持久性和多用户 AR 体验不可或缺的“门户”,它允许您在应用程序变为非活动状态之前回到充满相同选择的 3D 内容的相同环境。支持同步front
和back
摄像头捕捉和支持collaborative sessions
,也很棒。
对游戏玩家来说有个好消息:借助 MultipeerConnectivity框架,最多 6 人可以同时玩同一个 AR 游戏。对于 3D 几何图形,您可以使用由 Pixar 开发和支持的全新USDZ文件格式。对于具有多个 PBR 着色器、物理、动画和空间声音的复杂 3D 模型,USDZ 是一个不错的选择。您还可以为 ARKit 使用以下 3D 格式。
ARKit 还可以帮助您执行人物和对象遮挡技术(基于alpha和深度LiDAR Scene Reconstruction
通道的Body Motion Capture tracking
分割)、、、、、Vertical and Horizontal Planes detection
和Image detection
。借助人物和物体遮挡工具,您的 AR 内容可以真实地在现实世界实体的前后传递,使 AR 体验更加身临其境。,它使用机器学习算法,并允许您一次最多跟踪 3 个面孔,也可供您使用。</p>
3D Object detection
3D Object scanning
Realistic reflections
Face tracking experience
使用 ARKit 和 iBeacons,您可以帮助支持 iBeacon 的应用程序了解它所在的房间,并显示为该房间选择的正确 3D 内容。使用 ARKit,您应该集中利用ARAnchor类及其所有子类。</p>
特别注意 RealityKit 的卫星Reality Composer
应用程序,它现在是 Xcode 的一部分。这个全新的应用程序可帮助您制作 AR 场景原型。Reality Composer 中构建的场景可以包含动态、简单动画和 PBR 着色器。Reality Composer 可以作为独立应用程序安装在 iOS 和 iPadOS 上。
要创建 ARKit 5.0 应用程序,您需要 macOS Monterey、Xcode 13 和运行 iOS 15 的设备。ARKit 是与 Metal 框架结合以实现 GPU 加速的理想选择。不要忘记 ARKit 与 Unity 和 Unreal 紧密集成。目前,用于 AR 体验的最强大和最节能的芯片组是Apple M1(5 纳米)和A15 Bionic(5 纳米)。
ARKit 价格:免费。
|------------------------------|------------------------------|
| "ARKit PROs" | "ARKit CONs" |
|------------------------------|------------------------------|
| LiDAR and Depth API support | No AR glasses support |
|------------------------------|------------------------------|
| Stable 6 DoF World Tracking | No auto-update for Anchors |
|------------------------------|------------------------------|
| Collaborative Sessions | iOS / Chipsets Restrictions |
|------------------------------|------------------------------|
| WorldMaps, iBeacon-awareness | No ARKit Simulator in Xcode |
|------------------------------|------------------------------|
| 4 rendering technologies | No external camera support |
|------------------------------|------------------------------|
| Rich developer documentation | Quickly drains your battery |
|------------------------------|------------------------------|
这是用 Swift 编写的 ARKit 代码片段:
func renderer(_ renderer: SCNSceneRenderer,
didAdd node: SCNNode,
for anchor: ARAnchor) {
guard let planeAnchor = anchor as? ARPlaneAnchor else { return }
let planeNode = tableTop(planeAnchor)
node.addChildNode(planeNode)
}
func tableTop(_ anchor: ARPlaneAnchor) -> SCNNode {
let x = CGFloat(anchor.extent.x)
let z = CGFloat(anchor.extent.z)
let tableNode = SCNNode()
tableNode.geometry = SCNPlane(width: x, height: z)
tableNode.position = SCNVector3(anchor.center.x, 0, anchor.center.z)
return tableNode
}
请特别注意在 WWDC 2019 中引入的RealityKit。从那时起,围绕它进行了大量炒作。RealityKit 支持实体-组件-系统范式,并允许您为 iOS/macOS 创建 AR/VR 体验。这个高级框架适用于可以从独立 macOS/iOS 应用程序 - Reality Composer (RC)导入的.usdz
资产.rcproject
和.reality
文件。Cupertino 软件工程师从一开始就为增强现实应用程序构建了 RealityKit,您无需重复代码即可创建这些应用程序。它从头开始与 Swift 一起工作——没有 Objective-C 的遗产。当然,RealityKit 不仅在 SwiftUI 和 UIKit 上大放异彩,在 Metal 上也大放异彩。
RealityKit 框架基于两个基本块:ModelEntity类(依赖于MeshResource和Materials)和AnchorEntity类(自动跟踪目标,与 ARKit 中的 ARAnchor 不同)。
RealityKit为您提供了一组丰富的工具来处理 AR/VR:新的声明性 Swift 语法、3D 图元、PBR 材质、遮挡和视频材质、具有逼真的光线追踪阴影的灯光、空间音频处理、10 种不同的锚点类型、简化的设置用于协作会话、强大的物理设置、不可或缺的内置 ML 算法和许多其他功能。在 macOS Monterey 中,RealityKit 支持Object Reconstruction API。
普遍接受的观点是,与垂直表面相比,所有 AR 框架在定义水平表面方面都更好更快。RealityKit 和这里考虑的所有模块一样,也不例外。
Reality Composer简单直观的 UI 非常适合制作 AR 场景的原型。RC 有一个免费的库,其中包含可下载的 3D 资产,允许您构建具有动画、音频和动态的复杂 3D 场景,其中包含对这些对象的构建或行为方式的全面描述。您还可以将您的合成导出为轻量级的AR 快速查看体验,让用户可以放置和预览内容。在 Reality Composer 中,您可以使用以下五种锚类型之一启动项目:horizontal
、vertical
、image
和face
–object
对应于所需的跟踪类型。
RealityKit 和 Reality Composer 价格:免费。
|------------------------------|------------------------------|
| "RealityKit PROs" | "RealityKit CONs" |
|------------------------------|------------------------------|
| Can create AR apps w/o ARKit | Intensive CPU/GPU usage |
|------------------------------|------------------------------|
| A bit of boilerplate code | iOS 13+, macOS 10.15+ only |
|------------------------------|------------------------------|
| Suitable for AR/VR projects | Start lagging on old devices |
|------------------------------|------------------------------|
| Robust API for RC scenes | There's no particle system |
|------------------------------|------------------------------|
| Asynchronous asset loading | Lack of Apple documentation |
|------------------------------|------------------------------|
| Autoupdating tracking target | No AR glasses support |
|------------------------------|------------------------------|
这是用 Swift 编写的 RealityKit 代码片段:
override func viewDidLoad() {
super.viewDidLoad()
let textAnchor = try! SomeText.loadTextScene()
let textEntity: Entity = textAnchor.realityComposer!.children[0]
var textMC: ModelComponent = textEntity.children[0].components[ModelComponent]!
var material = SimpleMaterial()
material.baseColor = .color(.yellow)
textMC.materials[0] = material
textMC.mesh = .generateText("Hello, RealityKit")
textAnchor.realityComposer!.children[0].children[0].components.set(textMC)
arView.scene.anchors.append(textAnchor)
}
苹果 AR 生态系统的另一个重要部分是Reality Converter
应用程序。现在,您可以使用Reality Converter代替命令行转换工具。全新的应用程序使您可以轻松地.usdz
在 Mac 上转换、查看和自定义 3D 对象。只需拖放常见的 3D 文件格式,例如.obj
、.gltf
或.usd
,即可查看转换.usdz
结果,使用您自己的纹理和文件元数据自定义材质属性。您甚至可以.usdz
使用内置的基于图像的照明 (IBL) 选项在各种照明条件下预览对象。
2015 年 10 月,PTC 以 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、Vuzix M400 和 ODG R7。
Vuforia Engine 拥有与最新版本的 ARKit 大致相同的主要功能,但它也有自己的功能,例如具有深度学习的模型目标、用于无标记 AR 体验的 VISLAM 和适用于 iOS 的外部摄像头支持、新的实验性 API ARCore 和 ARKit,支持行业最新的 AR 眼镜。Vuforia 相对于 ARKit 和 ARCore 的主要优势在于它拥有更广泛的受支持设备列表,并且它支持为基于英特尔的 Windows 10 设备(包括 Microsoft Surface 和 HoloLens)开发通用 Windows 平台应用程序。
Vuforia 有一个独立版本和一个直接嵌入 Unity 的版本。它具有以下功能:
Smart Terrain
,可以将数字内容放置在地板和桌面上;Vuforia Fusion是一项旨在解决 AR 支持技术(如相机、传感器、芯片组和 ARKit 等软件框架)中的碎片化问题的功能。借助 Vuforia Fusion,您的应用程序将自动提供最佳体验,您无需额外工作。
Vuforia 引擎区域目标使开发人员能够将整个空间(无论是工厂车间还是零售店)用作 AR 目标。使用第一个受支持的设备(Matterport Pro2
相机),开发人员可以创建所需位置的详细 3D 扫描。建议位置在室内,大部分是静态的,并且不超过 1,000 平方米(约 10,000 平方英尺)。扫描生成 3D 模型后,可以使用 Vuforia 区域目标生成器将其转换为区域目标。然后可以将此目标带入 Unity。
Vuforia API 允许使用Static
orAdaptive
模式。当真实世界的模型保持静止时,例如大型工业机器,实施Static
API 将使用显着减少的处理能力。这为这些模型提供了更持久和更高性能的体验。对于不会静止的对象,Adaptive
API 允许持续稳健的体验。
该External Camera
功能是 Vuforia 引擎驱动程序框架的一部分。外置摄像头为增强现实的可能性提供了新的视角。它允许 Vuforia Engine 访问手机和平板电脑中配备的摄像头之外的外部视频源。通过使用独立的摄像头,开发人员可以创建一种 AR 体验,提供来自玩具、机器人或工业工具的第一人称视角。
Occlusion Management
是构建逼真的 AR 体验的关键功能之一。当您使用遮挡管理时,Vuforia 引擎会检测和跟踪目标,即使它们部分隐藏在日常障碍物(例如您的手)后面。特殊的遮挡处理允许应用程序显示图形,就好像它们出现在物理对象中一样。
Vuforia 支持 iOS 设备的 Metal 加速。您还可以将 Vuforia 示例用于您的项目。例如:该Vuforia Core Samples
库包括使用 Vuforia 功能的各种场景,包括一个预配置的对象识别场景,您可以将其用作对象识别应用程序的参考和起点。
这是用 C# 编写的 AR Foundation 代码片段:
private void UpdatePlacementPose() {
var screenCenter = Camera.main.ViewportToScreenPoint(new Vector3(0.5f, 0.5f));
var hits = new List<ARRaycastHit>();
arOrigin.Raycast(screenCenter, hits, TrackableType.Planes);
placementPoseIsValid = hits.Count > 0;
if (placementPoseIsValid) {
placementPose = hits[0].pose;
var cameraForward = Camera.current.transform.forward;
var cameraBearing = new Vector3(cameraForward.x,
0,
cameraForward.z).normalized;
placementPose.rotation = Quaternion.LookRotation(cameraBearing);
}
}
Vuforia SDK 定价选项:
免费许可证——您只需要注册一个免费的开发许可证密钥
基本许可证(每月 42 美元,按年计费)– 学生
基本 + 云许可证(每月 99 美元)– 适用于小型企业
代理套餐(个人价格)– 5 个短期许可证
专业版许可证(个人价格) - 适用于所有公司类型
这是优点和缺点。
|------------------------------|------------------------------|
| "Vuforia PROs" | "Vuforia CONs" |
|------------------------------|------------------------------|
| Supports Android, iOS, UWP | The price is not reasonable |
|------------------------------|------------------------------|
| A lot of supported devices | Poor developer documentation |
|------------------------------|------------------------------|
| External Camera support | SDK has some issues and bugs |
|------------------------------|------------------------------|
| Webcam/Simulator Play Mode | Doesn't support Geo tracking |
|------------------------------|------------------------------|
| Cylinder Targets support | Poor potential in Unity |
|------------------------------|------------------------------|
结论:
与 ARCore 和 ARKit 相比,使用 PTC Vuforia 进行开发没有重大限制。Vuforia 是一个古老的伟大产品,它支持更广泛的 Apple 和 Android 设备列表(甚至那些不受官方支持的设备),它支持几种最新型号的 AR 眼镜。
但在我看来,带有Reality Family工具包(RealityKit、Reality Composer 和 Reality Converter)的 ARKit 具有 Vuforia 和 ARCore 仅部分拥有的大量有用的最新功能。ARKit 个人在房间内的短距离测量精度比任何兼容 ARCore 的设备都要好,无需任何校准。这是通过使用 Apple LiDAR dToF 扫描仪实现的。ARCore 现在使用 iToF 相机和Raw Depth API
. iToF 和 LiDAR 都允许您创建高质量的虚拟网格OcclusionMaterial
用于场景理解阶段的真实世界表面。该网格已准备好进行测量和准备碰撞。借助 iToF 和 dToF 传感器,框架可以立即检测非平面表面和完全没有特征的表面,例如光线不足的房间中没有纹理的白墙。
如果您实施 iBeacon 工具、ARWorldMaps 和对 GPS 的支持,它将帮助您消除随着时间累积的许多跟踪错误。ARKit 与 Vision 和 CoreML 框架的紧密集成为强大的 AR 工具集做出了巨大贡献。与 Apple Maps 的集成允许 ARKit 目前GPS Location Anchors
以尽可能高的精度放置在户外。
Vuforia 的测量精度取决于您开发的平台。一些 Vuforia 功能构建在跟踪引擎(ARKit 或 ARCore)之上。甚至流行的Vuforia Chalk应用程序也使用 ARKit 位置跟踪器。
优秀的信息。不过想根据使用 ARCore 和 ARkit 的经验补充几点。在映射方面,与 ARkit 相比,ARCore 具有管理更大地图的能力。与 ARkit 相比,ARcore 跟踪更多的特征点。另一点是ARKit比ARcore更好地区分表面的水平和垂直检测。
AR KIT 和 AR CORE,它们是最佳选择。库由操作系统(android / Apple 设备)开发社区开发,因此您可以获得设备最新技术进步的最新更新和支持。
所以如果你打算在 AR 领域工作更长时间,你需要坚持这 2 点(只是我的看法)。我在 vuforia 上工作了很长时间。它教会了我 AR 的基础知识,并创建了许多不同的应用程序。但在一定程度上它有障碍,对我来说主要的障碍是导致某些限制的价格。ar-foundation / AR core / AR kit是免费的,更稳定,也有点灵活。比较
您可以探索 AR-FOUNDATION:它是一个令人惊叹的统一软件包,您只需编写一次代码,它将使用 ARCORE 和 ARKIT 导出到 Android 和 IOS
VUFORIA 的特点:https ://library.vuforia.com/getting-started/vuforia-features
AR基金会的特点:https : //unity.com/unity/features/arfoundation[![ARfoundation网站截图] 1 ] 1