通过整合iOS设备的摄像头和运动特性,在你的app或者游戏中提供增强现实体验


综述

增强现实(Augmented reality - AR)描述一种将2D或者3D元素通过一个设备的摄像头添加到实时影像当中的用户体验,这种方法使得这些元素毫无违和感的出现在真实世界中。ARKit整合了动作追踪(motion tracking),摄像头场景捕捉(camera scene capture),高级场景处理(advanced scene processing)和为了简化构建一个AR体验任务的便捷显示。你可以使用这些技术通过iOS设备的前置或后置摄像头来创造多种多样的AR体验。

主题


必要概念

  • {} 选择哪一个相机来实现增强(既可以通过前置摄像头也可以通过后置摄像头来增强用户所处的环境)
  • {} 验证设备支持和用户权限(检查你的app在运行时是否可以使用ARKit以及是否尊重用户的隐私)
  • {} 管理会话(Session)生命周期和跟踪质量(无论是在当前的会话状态还是从中断中恢复都能够保证用户得到通知)
  • class ARSession (用来控制AR体验的主要对象)
  • class ARConfiguration (一个用来定义 在某个时间你在会话中启用的某些ARKit特征 的对象)
  • class ARAnchor (物理世界中某个关注物体的位置和方向)

摄像头

获取用户iOS设备的细节,例如设备在3D空间中的位置和方向,摄像头中的视频数据和曝光值等。

  • {} 将虚拟内容覆盖于人体之上(将你的app的虚拟内容覆盖于ARKit识别到的人体之上)。
  • class ARFrame (一个被位置追踪信息所捕获的作为会话一部分的视频图片)
  • class ARCamera (关于给出框架的相机位置和图片生成参数的相关信息)

快速开始(Quick Look)

添加AR体验到你的app或者网站最简单的方法

  • 预览一个基于AR快速开始的模型(展示一个用户可以移动、测量和分享的模型或场景)
  • class ARQuickLookPreviewItem (用来自定义AR快速开始体验的对象)
  • 在AR快速开始和RealityKit中添加虚拟效果(通过模型策略来平衡AR体验的展现效果和性能)
  • 在AR快速开始中添加一个Apple Pay按钮或者一个自定义操作(在一个AR体验中提供一个用户可以通过点击来完成购买或者自定义操作的banner)

展示(Display)

通过使用一个为你处理渲染的界面来创造一个功能齐全的AR体验。

  • class ARView (一个可以让你通过RealityKit展示AR体验的界面)
  • class ARSCNView (一个可以让你通过SceneKit展示AR体验的界面)
  • class ARSKView (一个可以让你通过SpriteKit展示AR体验的界面)

世界追踪(World Tracking)

通过追踪表面、图像、物体、人和人脸来增强用户周围的环境

  • 了解世界追踪 (探索支撑概念、特性和创建非常棒的AR体验的最佳实践)
  • class ARWorldTrackingConfiguration (一个用于监控iOS设备的位置和方向的配置,可以让你增强用户前方的环境)
  • class ARPlaneAnchor (ARKit在物理环境中检测到的一个2D平面)
  • {} 平面的追踪和呈现 (检测物理环境中的平面并将其形状和位置呈现在3D空间中)
  • class ARCoachingOverlayView (一个展示用来引导用户的可视化说明的界面)
  • 放置物体和处理3D交互 (在真实世界的平面上放置虚拟物体,并使得用户可以通过手势与虚拟内容进行交互)
  • class ARWorldMap (空间映射状态和一系列世界追踪会话中的锚点)
  • 保存和加载世界数据 (序列化一个世界追踪会话并在之后恢复它)
  • 投影和碰撞测试 (在给定屏幕点的情况下,在真实世界的平面上找到3D位置)

人脸追踪

追踪出现在前置摄像头信息流中的人脸

  • 追踪和呈现人脸 (在摄像头信息流中检测人脸,并实时叠加匹配的虚拟内容和动画面部表情)
  • class ARFaceAnchor (关于通过ARKit在前置摄像头信息流中捕获到的面部姿势, 拓扑和表情的信息)
  • class ARFaceTrackingConfiguration (当你通过设备前置摄像头追踪人脸时用到的配置)

ARKit在摄像头信息流中识别出人的反应

  • {} 捕获3D的人体动作 (通过追踪一个人在物理环境中并应用同样的人体运动到一个虚拟人物来呈现人的动作)
  • class ARBodyTrackingConfiguration (用来在3D空间中追踪人的动作的配置)
  • class ARBodyAnchor (一个追踪通过ARKit从摄像头信息流中识别到3D空间中人体的动作的对象)
  • class ARBody2D (ARKit在摄像头信息流中识别到的人的屏幕空间展示)

图像追踪

识别物理环境中的图像并追踪其位置和方向

  • {} 追踪和变换图片 (基于用户环境中找到的矩形形状创建图片,并增强其外观)
  • {} 在AR体验中检测图片 (在用户环境中找到已知的2D图片,并用其位置展示AR内容)
  • class ARRreferenceImage (你想要通过ARKit在物理环境中检测到的图片描述)
  • class ARImageAnchor (在世界追踪的AR会话中检测到的图片的位置和方向的信息)
  • class ARImageTrackingConfiguration (当你只需要通过设备的后置摄像头信息流来追踪已知图片信息的配置)

对象追踪

通过扫描器app首次扫描时,可以实时的识别出已知物体

  • {} 扫描和识别3D物体 (记录真实世界物体的空间特性,并通过这些结果在用户环境找找到这些物体并触发AR内容)
  • class ARReferenceObject (在AR会话中,一个你想通过ARKit在物理环境中寻找的真实物体的描述)
  • class ARObjectAnchor (在一个世界追踪的AR会话中,关于一个真实3D物体的位置和方向的信息)
  • class ARObjectcanningConfiguration (用来在物理环境中收集真实物体的高保真空间数据的配置项)

方向追踪

  • class AROrientationTrackingConfiguration (当你只想通过设备的后置摄像头追踪设备的方向时使用的配置项)

位置追踪

  • class ARPositionalTrackingConfiguration (当你只想追踪设备在空间中的位置时使用的配置项)

效果渲染

  • {} 在AR体验中增加真实的镜像效果 (使用ARKit从摄像头图像中生成环境探测纹理并渲染镜像的虚拟物体)
  • class AREnvironmentProbeAnchor (在一个世界追踪AR会话中,针对一个指定的空间区域提供其环境光照信息的对象)
  • class ARLightEstimate (在一个AR会话中,与捕获视频帧相关的场景光照信息的估算值)
  • class ARDirectionalLightEstimate (在一个人脸追踪的AR会话中,与捕获视频帧相关的环境光照信息估算值)

多用户

通过与其他设备通信来创造一个共享的AR体验

  • {} 创建一个协作会话 (通过使用点对点策略,使得附近的设备可以共享一个AR体验)
  • {} 创建一个多用户的AR体验 (通过使用主客策略,使得附近的设备可以共享一个AR体验)
  • {} SwiftShot: 创建一个增强现实游戏 (查看苹果如何构建WWDC18的功能齐全的Demo,并获得通过ARKit, SceneKit和Swfit创建你自己的多人游戏的指导)
  • class ARSession.CollaborationData (一个存储了某个用户已经收集到的物理世界的信息的对象)
  • class ARParticipantAnchor (一个用来展现多人AR体验中其他用户的锚点)

声音

  • {} 创建一个融合声音的AR体验 (通过音效和环境声音层来创建一个融合的AR体验)

文字

通过展示锚定的文字来对AR体验进行注释

  • {} 在一个AR体验中为物体创建屏幕注释 (通过将虚拟标签纸在屏幕上覆盖真实或虚拟物体的方式为一个AR体验增加注释)
  • {} 认知和标签化随机物体 (通过使用自定义的光学识别算法, 为你创建用来追踪在摄像头信息流中识别到的物体的锚点)

自定义显示

通过实现你自己的渲染器来创建一个功能完备的AR体验

  • 通过Metal来呈现AR体验(控制你的app的虚拟内容在摄像头信息流最上层的渲染)
  • class ARMatteGenerator (创建用来整合app的虚拟内容和通过ARKit在摄像头信息流中识别到的人的哑光质地的对象)
  • {} 在自定义的渲染器中实现人的遮挡 (将ARKit通过哑光生成器在摄像头信息流中识别到的人遮挡在app的虚拟物体上)