前言
对ARKit感兴趣的同学,可以订阅ARKit教程专题
源代码地址在这里
正文
增强现实(AR
)是一种技术,无疑将在我们的数字进化中发挥重要作用,因为它开始将科幻小说变成科学事实。再加上最近对人工智能 (AI
) (尤其是机器学习) 的兴趣激增,我们才刚刚开始了解这些技术如何协同工作,将现实世界与数字世界无缝融合。
对于一群生活在太空中飞驰的微小的蓝色球体上的灵长类动物来说,这还不错,嗯,让我们用视觉辅助来解释增强现实背后的基本概念。这是我的宠物变色龙, Elon
——就像在Cham-E-Leon
,能拿到吗?呃...我们继续。
Elon
是个可爱的小家伙,你同意吗?事实是,Elon
不是真的他实际上只是一个逼真的3D
模型。
从左边的照片开始,你可以看到我的旧iPad
封面。突然,变色龙的Elon
,从稀薄的空气出现。当我移动相机时,伊隆一直呆着,然而,他的头和眼睛跟着我。当我离开他的观点时,他四处走动,以便能监视我。
这究竟怎么可能呢?是某种先进的绝地思维技巧吗?
增强现实
虽然很酷,但AR
不是绝地思维的把戏。相反,错觉来自将虚拟内容叠加到来自相机的实时图像源之上。也就是说,AR
增强了(增强)现实世界(现实)。为了使错觉无缝,虚拟内容的位置、缩放和旋转会不断使用设备的实时运动数据在真实空间中移动时进行更新。
最终结果是什么?让你质疑自己现实的惊人效果。
让我们来看看它是如何工作的。
基于标记的跟踪
AR
不是一个新概念;在过去的几年里,许多配备摄像头的现代智能设备已经能够做到这一点。这通常是通过使用跟踪卡和一种称为基于标记的增强现实的技术来实现的。
跟踪卡用作真实表面上的锚点;并一种特殊的算法分析摄像机数据,以确定卡的位置、比例和方向。然后,该跟踪信息用于投影、缩放和放置3D
内容,这些内容叠加在摄像机的图像上。一个很好的例子是Om Nom Candy Flick
,一个令人惊讶的有趣的增强现实游戏。
不幸的是,当卡离开摄像机视图时,跟踪丢失,破坏了整个 AR
体验。AR
的下一个边界是创建不需要跟踪物理标记的 AR
内容。
无标记跟踪
想象一下,你有一副神奇的眼镜,能够将虚拟 3D
元素叠加到你所看到的一切上。如果你把它们穿上,你可以无缝地将你的真实世界体验与那内容融合在一起,使一切看起来如此真实,以至于你几乎可以伸手去触摸它!
我会让你了解一个小秘密:那些神奇的眼镜已经存在,一个例子是微软HoloLens
。
然而,HoloLens
远非神奇。相反,它是一个高度复杂的设备,能够跟踪你的一举一动。它还具有空间感知能力,这意味着它不仅看到并了解你周围的世界。它跟踪真实世界空间的移动,并积极绘制环境图,创建虚拟的 3D
"世界空间"。
由于HoloLens
是可穿戴设备,因此标准人机界面(如操纵杆或鼠标)无法很好地用于输入。因此,Microsoft
想出了一些聪明的方法供用户与虚拟内容进行交互:
Gaze
(目光):使用放置在显示中间的焦点立方体,它的作用类似于虚拟鼠标光标。你可以倾斜头部,将光标移到对象顶部,以便与对象进行交互。Gesture
(手势):HoloLens
可以识别用手进行的捏合手势,以模拟鼠标单击。Voice
(声音): 你还可以向HoloLens
说出命令,就像使用Siri
或Microsoft Xbox Connect
一样。
HoloLens
是一个梦幻般的设备,但它并不完美。又大又笨,这与我们在科幻故事中承诺的动感太阳镜般的耳机相去甚远。此外,该设备仍然相当昂贵,这使得技术无法为大多数人所用。
然而,当苹果宣布ARKit
时,这些进入壁垒就消失了。
ARKit介绍
ARKit
是苹果的移动AR
开发框架。有了它,你可以创建身临其境的迷人体验,将虚拟 2D
和 3D
内容与你周围的世界实时摄像机源混合在一起。
使 ARKit
与其他 AR
框架(如 Vuforia
)不同之处在于 ARKit
执行无标记跟踪。没错!无需跟踪卡。最重要的是,ARKit
可立即将任何具有 A9
或更高处理器的Apple
设备转换为无标记AR
的设备。想想看——此时此刻,数百万苹果用户已经拥有了一款精密的AR
设备。
ARKit可以为你做什么?
如果你已经使用 Apple
的任何其他框架,你可能预计需要很长时间才能解决问题。但是,使用 ARKit
,只需几行代码 – ARKit
为你承担了大部分繁重的工作,因此你可以专注于重要内容:创建身临其境且引人入胜的AR
体验。
让我们来看看ARKit
能为你做什么。
跟踪
与 HoloLens
类似,ARKit
通过真实世界空间实时跟踪设备移动。它使用来自设备的采样运动数据来自动更新虚拟内容转换。它通过在虚拟场景中移动虚拟摄像机的视点来匹配设备的视图来为此。
2D 图像和 3D 对象检测
ARKit
可以检测 2D
图像和 3D
对象,允许你将增强的内容叠加到对象上,如经典艺术作品。现在你可以给蒙娜丽莎一个微笑——迈克尔·安吉洛的大卫的裤子怎么样?:]
场景理解和持久性
为了实现无标记跟踪,ARKit
创建和管理其检测到的表面的世界地图。ARKit
中的特殊事件挂钩在每次检测到新曲面、修改曲面或移除曲面时都会触发。这使你能够对场景进行难以置信的控制,包括内容如何与这些曲面交互。
ARKit
还可以加载和保存世界地图,以便快速识别以前的扫描空间。在多台设备上加载相同的世界地图时,你可以轻松地使用基本网络创建共享体验。
你还可以在多个 ARKit
会话中保持虚拟放置内容的持久性。现在告诉我,我又把我的杯子放哪儿了?
光线估计
ARKit
使用当前视频帧实时估计环境照明条件。然后,它可以自动调整虚拟内容的亮度级别以匹配环境条件,前提是虚拟内容使用基于物理的材料,你将在后面的章节中了解这些材料。
实时环境图
ARKit
可以通过对即时空间进行采样来生成实时环境地图。这允许你为基于PBR
的对象提供逼真的反射,以及实时照明信息。
场景交互
ARKit
还提供命中测试功能,可让你不受限制地与场景中的3D
内容进行交互。你还可以将这种交互与传统基于触摸的手势结合使用,这是 Apple
在其基于 AR
的应用程序的"人机界面指南"中推荐的。但是,由于你位于Apple
的生态系统中,因此没有什么能阻止你使用 Apple 的任何其他伟大框架,如 Core ML
或 Vision
。你甚至可以使用 SiriKit
并命令你的声音获得 AR
体验!
米制测量系统
为了计算场景中的距离和大小,ARKit
使用相当精确的米制测量系统。使用哪种图形 API
并不重要 , 在ARKit
中,1
个单位等于 1
米。
渲染集成
ARKit
没有自己的图形API
;它只为你提供跟踪信息和表面检测功能。虽然你仍在为场景中的图形提供功能,但 ARKit
可轻松与图形框架(如 SpriteKit
、SceneKit
和Metal
)集成。
苹果与游戏开发社区的关系也导致了一些优秀的插件为流行的游戏引擎Unity
和Unreal
的出现。
ARKit的局限性
尽管 ARKit
为移动设备上的用户体验提供了新的范例,但它具有一些限制性,会影响你开发ARKit
应用。
表面检测需要时间
表面检测和实际了解需要大量时间,几乎不是即时的。因此,你需要管理用户期望并引导他们完成应用的表面检测阶段。
运动处理滞后
过多的设备运动可能导致图像不顺畅和模糊,使 ARKit
难以理解其正在查看的内容。当真实场景变得不稳定时,ARKit
处理也会变得有点不稳定。在那些崎岖不平的公路上慢下来是很重要的。
低光照条件
低光照条件存在问题。设备摄像头无法识别低光场景和人眼,这意味着ARKit
在低光照条件下将难以进行场景检测;它甚至可能无法识别任何表面。
如果你在低光照条件下努力观察事物,ARKit
发现它变得更糟十倍。
光滑的无纹理表面
光滑、无纹理的表面使 ARKit
难以检测和跟踪表面。表面纹理越大,ARKit
就越容易检测和跟踪这些表面的运动。
作为开发人员,你的工作是在使用启用AR
的应用之前确保用户了解这一点,否则当他们无法将虚拟家具放在抛光的黑色大理石地板上时,他们会感到沮丧。
幽灵效果
使用AR
一段时间后,你可能会注意到一些虚拟内容违反物理定律。例如,虚拟内容可能通过真实世界的对象,就像鬼通过关闭的门一样。
由于这种情况可能会中断AR
体验,因此最好鼓励用户在开阔的空间或干净桌面上使用应用程序。
ARKit 背后的技术支持
当你在 ARKit
的框架下查看时,你可能会惊讶地发现,有些技术非常熟悉,并且已经存在了一段时间。
ARKit
使用Visual Inertial Odometry
(VIO
) 来跟踪设备的运动及其周围的世界。VIO
将来自摄像机传感器的基于 AVFoundation
的输入与通过 CoreMotion
捕获的设备运动数据融合在一起。如果你以前使用过这些框架中的任何一个,你将立即识别它们如何协同工作以支持 ARKit
的场景识别和跟踪。
挑战
欢迎来到你的第一个挑战部分!你可能没想到这本书这么快就会面临挑战,是吗?
完成本书中的挑战将很好地帮助你完成 ARKit
之旅。这些挑战让你有机会应用你的知识,并确保你在继续前已掌握这些概念。如果你尝试一个挑战,并真正卡住,不要担心,解决方案是在项目文件中提供的。
由于这是你的第一个挑战,我们使其变得简单:快速阅读以下资源,并对其进行书签。由于单靠 Googling
在 ARKit
上查找资源可能比较困难,因此我们为你策划了一份列表。
官方 ARKit 文档
这是苹果的ARKit
文档官方网站。在这里,你可以找到有关ARKit
及其相关技术的最新信息。
- Apple Developer Documentation for ARKit
增强现实的人机界面指南
Apple
还提供一套人机界面指南,指导你在设计 ARKit
应用时的最佳做法。本指南将准确显示该做什么和不该做什么。不遵守这些准则可能会导致 Apple
拒绝你的应用提交。
- Human Interface Guidelines for AR
官方WWDC 2017/2018 ARKit视频
Apple
总是将大量信息打包到他们的WWDC
演示文稿中 - 他们在 ARKit
上的视频也不例外,绝对值得观看一次。
Introducing ARKit - Augmented Reality for iOS (2017)
What’s New In ARKit 2
Understanding ARKit Tracking and Detection
Going Beyond 2D with SpriteKit (2017)
SceneKit - What’s New (2017)
What’s New in ARKit 2 (2018)
Understanding ARKit Tracking and Detection (2018)
使用 ARKit 的交互式内容
这是苹果的官方ARKit
演示之一,它是获得一些与ARKit
的实践经验的一个有趣的方式。按照链接并查找"下载示例代码"按钮。找到后,下载zip
文件,提取内容并使用最新版本的 Xcode
生成项目。然后,在具有 A9
处理器或更好处理器(iPhone SE
、iPhone 6s
和更高版本)的物理设备上运行它。此时,你无法在模拟器上测试AR
应用。
在这个演示中,你将见到变色龙Elon
,但要小心 - 他总是在看!
- Interactive Content with ARKit
在本演示中,你将了解有关创建共享 AR
体验的所有介绍。
- Inside SwiftShot - Creating an AR Game
要点
你已经到达第一章的末尾,并在创建你自己的启用 AR
的游戏和应用程序的旅程中迈出了第一步。
以下是你在本章中所做的简要概述:
你了解了什么是增强现实,以及智能设备如何使用其车载摄像头和运动传感器实现
AR
。你发现了基于标记和无标记跟踪之间的差异。
你被介绍到
ARKit
。你了解了它是什么,它做什么,它的一些限制是什么。
你了解到 ARKit
不是图形库;因此,你知道 ARKit
不是图形库。相反,它是一个框架,为你做AR
的繁重工作。
在下一章中,你将学习如何使用 Xcode
创建第一个 ARKit
应用程序。
上一章 | 目录 | 下一章 |
---|