ARConfiguration

706 阅读10分钟

包含如何配置增强现实会话信息的基本对象。

ARConfiguration为您可以在AR体验中配置的不同选项定义了一个基类。

所有AR配置都在设备居住的现实世界与您建模内容的虚拟3D坐标空间之间建立了对应关系。当您的应用程序将虚拟内容与实时相机图像混合时,用户体验到您的虚拟内容是现实世界一部分的错觉。

要获取实时相机图像,ARKit为您管理相机捕获管道(有关更多信息,请参阅选择要增强的相机源)。根据您选择的配置,它决定了捕获图像的相机,以及应用程序显示的哪个相机。

AR应用程序可以识别感兴趣的现实世界区域。在运行时,ARKit为其识别的真实对象生成ARAnchor,允许应用程序引用其详细信息,如大小和物理位置。您选择的配置决定了ARKit识别并向您的应用程序提供的真实对象类型。

不要自己分配ARConfiguration;相反,实例化其子类之一。

选择您的配置

要实现您的AR体验功能,请创建以下子类之一,并通过run(with:). 会话一次只能运行一个配置,因此请选择最有利于所需AR体验的配置。

选择框架功能

一些配置支持与会话帧相关的子功能。通过在配置中设置以下标志来启用这些功能 frameSemantics

Use supportsFrameSemantics(_:) 验证iOS设备是否支持 ARConfiguration.FrameSemantics 设置前你渴望 frameSemantics.

运行时切换配置

要切换平面检测、帧语义和环境纹理等功能,您可以在运行时通过调用 run(with:) 在您现有的会话中。在可能的情况下,ARKit在之前的配置下维护会话期间收集的所有信息,例如有关物理环境和锚的信息。

验证设备支持

class var isSupported: Bool

一个布尔值,指示当前设备是否支持此会话配置类。

启用框架功能

var frameSemantics: ARConfiguration.FrameSemantics

帧上的一组活动语义。

struct ARConfiguration.FrameSemantics

您可以在应用程序中启用的可选帧功能的类型。

class func supportsFrameSemantics(ARConfiguration.FrameSemantics) -> Bool

检查特定功能是否受支持。

配置AR会话 

var isLightEstimationEnabled: Bool

一个布尔值,指定ARKit是否分析捕获相机图像中的场景照明。

var worldAlignment: ARConfiguration.WorldAlignment

一个值,指定会话如何将现实世界的设备运动映射到3D场景坐标系统中。 

enum ARConfiguration.WorldAlignment

ARKit如何根据现实世界的设备运动构建场景坐标系统的选项。

Managing Video Capture Options

var videoFormat: ARConfiguration.VideoFormat

AR会话的相机类型、分辨率和帧速率。

class var supportedVideoFormats: [ARConfiguration.VideoFormat]

当前设备上可用的一组视频捕获格式。

class ARConfiguration.VideoFormat

用于AR会话的视频大小和帧速率规范。

录制音频

var providesAudioData: Bool

一个布尔值,指定是否在AR会话期间捕获音频。

重构场景

struct ARConfiguration.SceneReconstruction

使ARKit能够检测物理环境形状的选项。

ARPositional​Tracking​Configuration

通过以尽可能低的分辨率和帧速率运行相机,实现iOS设备的6度自由度跟踪。当您不需要解析相机提要时,例如虚拟现实场景,请使用此配置。

创建配置

init()

创建新的位置跟踪配置。

var initialWorldMap: ARWorldMap?

尝试使用此会话配置恢复的上一个AR会话的状态。

ARObject​Scanning​Configuration

要创建识别物理环境中对象的应用程序,首先使用ARObjectScanningConfiguration在开发过程中扫描它们。扫描对象后,调用createReferenceObject(transform:center:extent:completionHandler:)将其转换为ARReferenceObject,您可以在运行时再次检测它。当用户运行您的应用程序时,您要求ARKit通过运行世界跟踪配置并为其检测对象属性分配参考对象来查找扫描的对象。

管理设备摄像头行为

var isAutoFocusEnabled: Bool

一个布尔值,用于确定设备相机是使用固定对焦还是自动对焦行为。

ARFace​Tracking​Configuration

人脸跟踪配置可以检测设备前置摄像头3米以内的人脸。当ARKit检测到面部时,它会创建一个ARFaceAnchor对象,提供有关一个人面部位置、方向、拓扑和表情的信息。

面部跟踪支持在iOS 14和iPadOS 14中配备Apple神经网络引擎的设备,并需要在iOS 13和iPadOS 13及更低版本上配备原深感摄像头的设备。要确定设备是否支持人脸跟踪,请在尝试使用此配置之前,在ARFaceTrackingConfiguration上支持呼叫。

当您启用isLightEstimationEnabled设置时,人脸跟踪配置通过将检测到的面孔称为光探针来估计方向和环境照明(ARDirectionalLightEstimate对象)。

跟踪多面孔

var maximumNumberOfTrackedFaces: Int

会话期间要跟踪的面孔数量。

class var supportedNumberOfTrackedFaces: Int

框架可以跟踪的最大面数。

ARImage​Tracking​Configuration

所有AR配置都在设备居住的现实世界和可以建模内容的虚拟3D坐标空间之间建立对应关系。当您的应用程序将该内容与实时相机图像一起显示时,用户会体验到您的虚拟内容是现实世界一部分的错觉。

使用ARImageTrackingConfiguration,ARKit建立一个3D空间,不是通过跟踪设备相对于世界的运动,而只是通过在相机的角度检测和跟踪已知2D图像的运动。ARWorldTrackingConfiguration也可以检测图像,但每种配置都有自己的优势:

世界跟踪的性能成本高于仅图像跟踪,因此您的会话可以使用ARImageTrackingConfiguration一次可靠地跟踪更多图像。

只有当虚拟内容在相机视图中时,仅允许将虚拟内容锚定为已知图像。通过图像检测进行世界跟踪允许您使用已知图像向3D世界添加虚拟内容,即使在图像不再查看后,也可以继续跟踪该内容在世界空间中的位置。

世界跟踪在稳定、不动的环境中效果最好。在更多情况下,您可以使用仅图像跟踪为已知图像添加虚拟内容——例如,移动地铁车内的广告。

当图像跟踪配置检测到已知图像时,它会以六自由度(6DOF)跟踪它们的运动:具体来说,三个旋转轴(滚动、音高和偏航)和三个平移轴(以x、y和z为单位的移动)。

要使用ARImageTrackingConfiguration,请定义ARReferenceImage对象(在运行时或通过在Xcode资产目录中捆绑它们),并将其分配给配置的跟踪图像属性。然后,与任何AR配置一样,将配置传递给会话的run(_:options:)方法。

选择要跟踪的图像

var trackingImages: Set<ARReferenceImage>

ARKit试图在用户环境中检测和跟踪的一组图像。

var maximumNumberOfTrackedImages: Int

同时跟踪移动的最大图像数量。

AROrientation​Tracking​Configuration

所有AR配置都在设备居住的现实世界和可以建模内容的虚拟3D坐标空间之间建立对应关系。当您的应用程序将该内容与实时相机图像一起显示时,用户会体验到您的虚拟内容是现实世界一部分的错觉。

创建和维护空间之间的这种对应关系需要跟踪设备的运动。“AROrientationTrackingConfiguration”类以三种自由度(3DOF)跟踪设备的运动:具体来说,三个旋转轴(滚动、俯仰和偏航)。

这种基本水平的运动跟踪可以创造有限的增强现实体验:虚拟对象可能看起来像现实世界的一部分,即使用户旋转设备查看该对象的上方、下方或旁边。然而,这种配置无法跟踪设备的移动:非平凡地更改设备的位置会打破AR错觉,导致虚拟内容似乎相对于现实世界漂移。例如,用户无法四处走动查看虚拟对象的侧面和背面。此外,3DOF跟踪不支持平面检测或命中测试。

ARBody​Tracking​Configuration

当ARKit识别后置摄像头馈送中的人时,它会调用session(_:didAdd:),传递一个可用于跟踪身体运动的ARBodyAnchor。

当您启用平面检测和图像检测时,您可以使用身体锚来显示虚拟字符,并将字符设置在您选择的表面或图像上。

默认情况下,frameSemantics包括bodyDetection,它允许您访问ARKit通过frame的检测身体在相机馈送中检测到的人的联合位置。、

估计身体规模

var automaticSkeletonScaleEstimationEnabled: Bool

确定ARKit是否估计其正在跟踪的物体的高度的标志。

添加逼真的反思

var wantsHDREnvironmentTextures: Bool

指示ARKit以HDR格式创建环境纹理的标志。 

var environmentTexturing: ARWorldTrackingConfiguration.EnvironmentTexturing

ARKit用于生成环境纹理的行为。

ARGeo​Tracking​Configuration

此配置创建位置锚 (ARGeoAnchor)指定特定的纬度、经度和可选的高度,以使应用程序能够跟踪AR体验中感兴趣的地理区域。

The isSupported 在具有A12或更高版本芯片和蜂窝移动网络(GPS)功能的iOS 14和iPadOS 14设备上,属性返回此类的“true”。地理跟踪可在特定地理位置进行。要确定运行时用户位置的可用性,请致电 checkAvailability(completionHandler:).

地理跟踪仅在户外进行。如果地理跟踪应用程序在路点之间导航用户,您的应用程序需要处理沿途的任何事件。用户必须有互联网连接,您可以向他们提供有关数据使用的信息,如 ARGeoAnchor

鼓励用户安全

为了让您的用户在旅行时专注于道路,请阻止他们在运动时(例如骑自行车时)查看设备。在不熟悉的地区导航时,让用户随时了解情况。例如,您可以建议他们避开私有财产,或提醒他们在开始漫长的路线之前检查设备的电池电量。

使用图像细化用户的位置

为了准确放置位置锚点,地理跟踪需要比仅使用GPS更了解用户的地理位置。根据用户的GPS坐标,ARKit下载描述该地区物理环境的图像。Apple通过从街道上拍摄视图的照片并记录每张照片的地理位置,提前收集此本地化图像。通过将设备的当前相机图像与此图像进行比较,会话将用户的精确地理位置与场景的本地坐标匹配。有关用户在本地空间中位置的信息,请参阅 transform

本地化图像捕捉到公共街道和汽车可访问的路线的视图,但不包括门禁或仅限行人的区域的图像。

地理跟踪会话使用本地化图像 ARGeoTrackingStatus.State.localizing state.

ARWorld​Tracking​Configuration