02_ARKit 基础知识1

2022-09-21  本文已影响0人  Zhen斌iOS

1、选择要增强的摄像头源

通过前置或后置摄像头对用户的环境进行增强。

iOS 设备配备两个摄像头,因此对于每个 ARKit 会话,您需要选择要增强哪个摄像头的内容。从 ARKit 3 开始,您可以从 ARKit 同时提供的两个摄像头中获取数据,但是您一次仍然只能选择一个摄像头的内容来展现给用户。

使用后置摄像头的增强现实体验

最常见的增强现实体验是在通过设备后置摄像头捕捉的场景中增添其他视觉内容,让用户能够以一种全新的方式观察周围的世界并进行互动。

ARWorldTrackingConfiguration 可提供以下体验:ARKit 会追踪用户所在的现实世界,然后将这一场景与坐标空间匹配起来,供您放置虚拟内容。现实场景追踪还提供了一些功能,可带来更身临其境的增强现实体验,例如识别用户环境中的物体和图像,以及响应现实世界的光照条件。

使用前置摄像头的增强现实体验

对于配备原深感摄像头的 iOS 设备,ARFaceTrackingConfiguration 可让您在对前置摄像头的内容进行增强的同时,实时追踪面部姿态和表情。有了这些信息,您就可以选择叠加逼真的虚拟面具等操作。您还可以忽略摄像头视图,并使用面部表情数据来制作虚拟角色动画,就像在适用于 iMessage 信息的动话表情 App 中那样。

2、验证设备支持和用户权限

确保您的 App 可以使用 ARKit 并尊重用户隐私。

ARKit 要求使用 iOS 11.0 或更高版本,以及搭载 A9 或更新处理器的 iOS 设备。某些 ARKit 功能会要求使用更高的 iOS 版本或特定设备。另外,ARKit 会使用设备摄像头,因此需要配置 iOS 隐私控制,以便用户能允许 App 访问摄像头。

设备兼容性支持的处理方式取决于您的 App 将如何使用 ARKit:
(1) 如果 App 的基本功能需要使用增强现实(通过后置摄像头):请将 arkit 键添加到 App Info.plist 文件的 UIRequiredDeviceCapabilities 部分中。使用这个键可确保只有兼容 ARKit 的设备能使用您的 App。
(2) 如果增强现实体验是 App 的次要功能:请通过测试相应 ARConfiguration 子类的 isSupported 属性,检查当前设备是不是支持您想要使用的增强现实配置。
(3) 如果 App 使用面部追踪 AR:面部追踪要求使用 iPhone X 上的前置原深感摄像头。您的 App 仍可以在其他设备上使用,因此请务必测试 ARFaceTrackingConfiguration。isSupported属性来确定当前设备上是否支持面部追踪。

提示:在 App UI 中提供增强现实功能之前,应先检查 isSupported 属性,这样使用不受支持设备的用户就不会尝试访问这些功能,也不会因此而感到失望。

处理用户授权和隐私

您的 App 必须获得用户明确授予的 App 摄像头访问权限,才能使用 ARKit。在您的 App 首次运行增强现实会话时,ARKit 会自动请求用户授予权限。

iOS 要求 App 提供一条静态信息,供系统请求摄像头或麦克风权限时显示。App 的 Info.plist 文件必须包含 NSCameraUsageDescription键。为这个键提供说明文字,解释您的 App 为什么需要摄像头访问权限,让用户能够放心地向 App 授予权限。

如果您的 App 使用 ARFaceTrackingConfiguration,ARKit 会为您的 App 提供个人面部信息。如果您使用 ARKit 面部追踪功能,App 中必须包含隐私政策,向用户说明面部追踪和面部数据的用途。

3、管理会话生命周期并追踪质量

让用户能够清楚了解当前会话状态并在中断后恢复。

现实场景追踪增强现实 (AR) 会话采用一种称为“视觉惯性里程计”的技术。这一过程将动作传感器数据和摄像头影像的计算机视觉分析相结合,从而追踪设备在现实世界中的位置和方向 (也称为位姿,用 ARCamera 的 transform 属性表示)。为了获得最佳结果,现实场景追踪需要持续不断的传感器数据和具有视觉复杂性或可辨别特征的摄像头影像。

当您启动会话时,ARKit 需要一些时间来收集足够的数据,从而精确地为设备位姿建模。在会话期间,影响现实场景追踪质量的条件可能会发生变化。ARSessionObserver 委托方法和 ARCamera 属性可用来追踪这些变化。

增强现实会话的基本生命周期

下图显示了开始运行增强现实会话后追踪状态的变化情况。

刚运行新会话时,给定帧的追踪状态为 ARCamera.TrackingState.notAvailable ,表示 ARKit 尚未收集到足够的信息来预估设备的位姿。

数帧过后,追踪状态变为 ARCamera.TrackingState.limited(_:) ,表示设备位姿已经可用,但准确性尚不确定。受限状态始终会包含追踪质量下降的原因;在这个例子中,会话仍处于 ARCamera.TrackingState.Reason.initializing 状态。

经过短暂的时间后,追踪状态变为 ARCamera.TrackingState.normal ,表示设备位姿准确,并且所有 ARKit 功能均可用。

针对追踪质量变化提供反馈

下图显示了用户互动或环境变化可能引起的追踪状态变化。

当追踪质量为 ARCamera.TrackingState.limited(_:) 时,依靠 ARKit 映射用户局部环境的功能无法使用:
(1) 平面检测不会增加或更新平面锚点
(2) 命中检测方法不提供任何结果

根据用户局部环境的变化或用户移动设备的情况,会话可能会随时进入 ARCamera.TrackingState.limited(_:) 追踪状态。例如,如果用户将设备指向一面空白墙壁,或者房间内的灯光熄灭,追踪质量可能会因为 ARCamera.TrackingState.Reason.insufficientFeatures 而下降。

这时可以使用关联的 ARCamera.TrackingState.Reason 值来提供反馈,指导用户解决这种情况,以便追踪状态可以恢复为 ARCamera.TrackingState.normal 。

从会话中断恢复

必须有正在运行的 ARSession ,ARKit 才能追踪设备位姿。默认情况下,如果会话中断 (例如,切换到另一个 App 时),这个会话中的虚拟内容有可能会相对于现实环境发生错位。

您可以使用“重定位”尝试从中断恢复。如果 sessionShouldAttemptRelocalization(:) 方法返回 true,ARKit 会尝试使用当前的摄像头和传感器数据来协调中断前对用户环境的认知。在这个过程中,追踪状态为 ARCamera.TrackingState.limited(:) (原因为 ARCamera.TrackingState.Reason.relocalizing) 。如果成功,追踪状态会很快恢复为 ARCamera.TrackingState.normal 。

要成功完成重定位,设备必须恢复为会话中断时它所在的大致位置和方向。如果不能满足这些条件 (例如,设备已经移到了完全不同的环境),会话会无限期保持 ARCamera.TrackingState.Reason.relocalizing 状态。

重要信息:当 App 处于 ARCamera.TrackingState.Reason.relocalizing 状态时,应向用户提供一种还原会话的方法 (使用 run(_:options:) 和 resetTracking ),以防重定位一直无法成功。

打造持续的增强现实体验

在 iOS 12.0 及更高版本中,ARWorldMap 类会储存 ARKit 用来恢复会话的信息。通过将现实场景地图存储到文件,便可以使用同一重定位流程来从短暂中断恢复,或者从之前的某个会话恢复,即使 App 已经重新启动过也不受影响。现实场景地图包含锚点,因此您还可以重新放置虚拟内容,以便与之前的会话保持一致。

重要信:使用 ARWorldMap 是否能可靠地恢复会话很大程度上取决于现实环境。例如,如果地图是在具有一致人工照明的室内录制的,或者是刚刚捕捉的,重定位很容易取得成功。如果局部环境的照明条件或特征已经随着时间而发生了变化,那么成功率会下降。

为了让用户在退出 App 后能够回到同一个增强现实会话,您可以在用户进行某项操作时明确地存储现实场景地图,或者在 applicationDidEnterBackground(_:) 中自动存储。仅当增强现实会话具有值得存储的状态时,才应存储现实场景地图;例如,用户放置了虚拟物体,您想要记住这些物体的位置,并且会话处于 ARFrame.WorldMappingStatus.mapped 状态 (或在会话期间至少曾有过一次这样的状态)。

提示:为了成功完成重定位,设备需要对准在创建地图前经过的局部环境区域——您可以让用户存储现实场景地图的截屏,并在尝试重定位时显示这个截屏作为放置指南,以此协助用户完成这个任务。

从现实场景地图恢复的会话包含对应现实场景地图中存储的所有锚点。如果您使用 name 属性来标识放置了锚点的虚拟物体,可以在恢复的会话中参考锚点来重现相应的虚拟内容。为确保正确放置这类内容,请仅在会话追踪状态变为 ARCamera.TrackingState.normal 后显示它们。

上一篇下一篇

猜你喜欢

热点阅读