ARKit — 什么是它,关键概念和 AR 技术

作者: IT Sectr 发布日期: 2026-03-25 阅读时间: 8 分钟

ARKit 框架 — 来自 Apple 的增强现实平台,允许开发人员无需深厚的计算机视觉知识即可为 iOS 创建 AR 应用。根据 Apple ARKit Documentation, 2025,该框架使用 Visual-Inertial Odometry 在无需外部标记的情况下精确跟踪设备在空间中的位置。场景的语义理解允许识别水平和垂直平面,确定光照并将虚拟对象放置在真实环境中。

要点

  • ARKit — Apple 用于 iOS 增强现实的框架,于 2017 年随 iOS 11 推出。
  • Motion Tracking — 无需外部信标即可跟踪设备在空间中位置的技术。
  • Scene Understanding — 识别用户真实环境中的平面、边界和对象。
  • ARAnchor — 在真实场景中固定虚拟内容位置的对象。
  • ARSCNView — 基于 SceneKit 渲染 3D 内容的主要类。

什么是 ARKit?

ARKit — 来自 Apple 的增强现实框架,于 WWDC 2017 与 iOS 11 一起发布。它结合了相机、M 系列运动处理器和 A 系列芯片神经引擎的功能,无需专用硬件即可创建沉浸式 AR 体验 — 只需 iPhone 或 iPad。

ARKit 使用 Visual-Inertial Odometry(VIO)技术,该技术结合来自相机和 Core Motion 惯性传感器的数据,精确跟踪设备在空间中的运动。VIO 使框架能够理解设备相对于环境的位置,而无需使用 GPS 或外部标记。

根据 Apple WWDC 2024,ARKit 6 支持搭载 A12 及更新芯片的设备(iPhone XS、iPad Pro 2018+)。App Store 中的 AR 应用数量已超过 1.5 万,所有 AR 会话中识别平面的总面积超过 1000 亿平方米。

ARKit 的演进

在六个版本中,ARKit 获得了重大改进:ARKit 1.0(iOS 11)— 基本跟踪和平面识别;ARKit 2.0 — 通过 ARWorldMap 共享 AR 会话和 3D 对象检测;ARKit 3.0 — 人体跟踪、人物分割和前后摄像头同时使用。

ARKit 4.0 引入了 LiDAR Scanner,用于即时确定对象的深度和不透明度,以及用于将 AR 内容锚定到 GPS 坐标的 Location Anchor。ARKit 6 添加了 4K HDR 视频、使用 LiDAR 的平面估计和改进的遮挡处理。

swift
import ARKit

let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.horizontal, .vertical]
configuration.environmentTexturing = .automatic

let arView = ARSCNView(frame: view.bounds)
arView.session.run(configuration)
arView.debugOptions = [.showFeaturePoints]
view.addSubview(arView)

ARKit 如何工作

ARKit 通过 AR 会话周期工作,该会话使用配置启动并持续分析来自相机的视频流。每帧中,框架计算设备的位置(6 自由度),更新已识别平面的地图并校正虚拟对象的位置 — 所有这些都以每秒 60 帧的频率进行。

VIO 过程由两个并行流组成:视觉里程计算法跟踪特征点在帧之间的移动,而 Core Motion 惯性传感器在摄像头快速移动或图像模糊时预测短时间间隔内的运动。两种方法的结合提供高达 1 厘米的跟踪精度。

据 Apple 称,ARKit 每帧处理多达 500 个特征点,环境地图(ARWorldMap)的直径可达 100 米。扫描环境和构建地图在会话启动后大约需要 2-3 秒 — 在这段时间内,ARKit 从摄像头和传感器收集数据。

ARAnchor 和对象放置

ARAnchor — 放置内容的关键对象。当 ARKit 识别出一个平面时,它会创建一个 ARPlaneAnchor,指定表面的位置、大小和方向。开发人员响应 session(_:didAdd:) 委托,并通过 SceneKit 或 RealityKit 在平面检测位置放置 3D 对象。

为了实现对象的拖动,使用 ARHitTestResult:触摸屏幕时,通过 ARKit 帧执行 hit-test,返回射线与已识别平面的交点。找到的点转换为 ARAnchor,对象固定在该位置。

swift
func renderer(
    _ renderer: SCNSceneRenderer,
    didAdd node: SCNNode,
    for anchor: ARAnchor
) {
    guard let planeAnchor = anchor
        as? ARPlaneAnchor else { return }

    let boxNode = SCNNode(
        geometry: SCNBox(
            width: planeAnchor.extent.x,
            height: 0.01,
            length: planeAnchor.extent.z,
            chamferRadius: 0
        )
    )
    node.addChildNode(boxNode)
}

ARKit 的主要功能

ARKit 提供一系列技术,使增强现实逼真且功能强大:6 自由度运动跟踪、通过识别平面和边界理解场景、估计光照以正确投射阴影、人物遮挡以及基于环境地图的反射表面。

Motion Capture(ARKit 3+)— 通过摄像头实时跟踪人体技术。允许使用用户动作对角色进行动画处理,无需外部传感器:以 60 Hz 的频率识别 18 个关节。用于健身应用和动画原型制作。

共享 AR 会话(ARKit 2+)允许多个设备在共享空间中看到相同的虚拟对象。ARWorldMap 保存环境地图,通过网络传输到其他设备。Apple 提供了一个同步精度的例子:同一房间中的两台 iPhone 12 Pro 以不超过 2 厘米的偏差看到对象。

使用 LiDAR

安装在 iPhone 12 Pro 及更新设备上的 LiDAR 扫描仪从根本上改变了 ARKit 的能力。LiDAR 无需通过图像分析进行软件深度确定,而是立即提供深度图,精度高达 3 厘米,范围可达 5 米。这使 ARKit 能够立即识别平面,无需预先使用摄像头扫描。

使用 LiDAR,ARKit 可以确定对象的不透明度:虚拟对象可以隐藏在真实的椅子或桌子后面。此外,Scene Reconstruction 实时构建环境的 3D 网格 — 每个房间多达 1000 万个多边形,用于碰撞物理模拟和逼真光照。

swift
// LiDAR 配置
let lidarConfig = ARWorldTrackingConfiguration()
lidarConfig.planeDetection = [.horizontal]
lidarConfig.sceneReconstruction = .mesh

arView.session.run(lidarConfig)

// 在平面上检测触摸
override func touchesBegan(
    _ touches: Set<UITouch>,
    with event: UIEvent?
) {
    let location = touches.first?.location(in: arView)
    guard let hitPoint = location else { return }

    let results = arView
        .raycastQuery(
            from: hitPoint,
            allowing: .existingPlaneInfinite,
            alignment: .horizontal
        )
}

将 ARKit 集成到应用中

集成 ARKit 从最低要求开始:Xcode 15+、iOS 17 SDK、搭载 A12 Bionic 芯片及更新设备的设备。需要在 Info.plist 中添加 NSCameraUsageDescription 键 — ARKit 使用摄像头进行跟踪和显示 AR 场景。没有此键,应用在启动 AR 会话时会出错终止。

对于内容渲染,iOS 提供三个框架:SceneKit 用于中等复杂度的 3D 图形,RealityKit 用于使用 PBR 材质进行逼真渲染,以及 Metal 用于最高性能。RealityKit — 是新项目的推荐选择,因为它包含对 ARKit 功能、动画和物理的内置支持。

据 Apple 称,将基本 AR 屏幕集成到现有应用中的平均时间 — 对于经验丰富的 iOS 开发人员大约需要 2 小时。主要困难出现在将 UI 元素叠加到 AR 场景上以及处理 AR 会话中断(电话、应用切换或弱光下跟踪丢失)时。

错误和故障处理

ARKit 在多种情况下可能会丢失跟踪:光照不足(低于 100 勒克斯)、缺乏特征点(纯色墙壁)、摄像头快速移动或镜头遮挡。ARSessionDelegate 委托提供处理这些状态的方法 — 建议向用户显示提示:“请更慢地移动设备”或“请打开照明”。

为在故障后恢复,ARKit 自动启动重新定位 — 尝试将当前视频流与保存的环境地图匹配。如果重新定位不可能,会话将使用新配置重新启动。建议在退出应用时保存 ARWorldMap,以便在返回时快速恢复 AR 场景。

swift
class ARViewController: UIViewController {

    let arView = ARSCNView()

    override func viewDidLoad() {
        super.viewDidLoad()
        arView.session.delegate = self

        let config = ARWorldTrackingConfiguration()
        config.planeDetection = [.horizontal]
        config.frameSemantics = .personSegmentation
        arView.session.run(config)
    }

    func sessionWasInterrupted(
        _ session: ARSession
    ) {
        showAlert("会话已中断")
    }
}

常见问题

ARKit 支持哪些设备?

ARKit 支持搭载 A12 Bionic 芯片及更新芯片的 Apple 设备:iPhone XS、XR、11、12、13、14、15、16 和 SE(第 2 代和第 3 代)、iPad Pro 2018+、iPad Air 2020+、iPad mini 2021+。LiDAR 功能需要 iPhone 12 Pro/Pro Max、iPhone 13 Pro/Pro Max、iPhone 14 Pro/Pro Max、iPhone 15 Pro/Pro Max 和 iPad Pro 2020+。

可以在没有 SceneKit 或 RealityKit 的情况下使用 ARKit 吗?

可以,ARKit 可以直接与 Metal 一起使用,但这需要编写自己的着色器和渲染器。SceneKit 和 RealityKit 提供现成的解决方案,在框架级别集成 ARKit。对于初学者,RealityKit 是最佳选择,因为它自动处理 ARKit 功能。

ARKit 如何处理光照变化?

ARKit 通过摄像头自动评估场景光照,并通过 AREnvironmentProbeAnchor 提供光源方向、强度和色温数据。这使虚拟对象能够正确投射阴影并反射环境,与真实世界实现逼真融合。

ARKit 与 ARCore 有何不同?

ARKit 仅适用于 iOS 并使用 Visual-Inertial Odometry 进行跟踪,而 Google 的 ARCore 适用于 Android 并使用基于 IMU 和相机的自有 Motion Tracking。ARKit 由于与 Apple 芯片的硬件集成而具有优势,而 ARCore 则通过 Cloud Anchors 实现跨平台。

可以使用 ARKit 创建游戏吗?

可以,ARKit 非常适合AR 游戏。SceneKit 和 RealityKit 支持物理(SCNPhysicsBody、PhysicsSimulation)、动画、声音和粒子。著名例子 — Pokémon GO(使用自己的引擎与 ARKit)、Angry Birds AR 和 Lego AR Studio。ARKit 还通过 ARWorldMap 支持多人会话。

总结

  • ARKit — 基于 Visual-Inertial Odometry 的 Apple 增强现实框架,始于 2017 年。
  • 6 自由度 — 精确跟踪设备在三维空间中的位置。
  • SceneKit 和 RealityKit — 两个用于渲染不同复杂度 AR 内容的框架。
  • LiDAR 在 Pro 设备上提供即时深度确定和环境重建。
  • 共享会话允许多个用户看到相同的 AR 对象。
  • Motion Capture 跟踪身体的 18 个关节,用于实时角色动画。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读