Meet Object Capture for iOS
System & Services 进阶 20m

认识 iOS 上的 Object Capture

Meet Object Capture for iOS

2023年6月5日

在 Apple 官方观看视频

一句话判断

Object Capture 从 Mac 搬到了 iPhone 上——用 LiDAR 扫描低纹理物体、引导式自动拍摄、设备端实时重建 3D 模型,几分钟就能生成 USDZ。电商、教育、AR 类 App 应该立刻下载示例项目试试。

这场 Session 讲了什么

Session 介绍了 Object Capture 在 iOS 上的全新实现。

核心能力

  • 之前 Object Capture 只能在 Mac 上运行(拍照后传输到 Mac 重建)。
  • 现在拍摄和重建都在 iOS 设备上完成——不需要 Mac。
  • 输出 USDZ 格式的 3D 模型。

LiDAR 支持低纹理物体

  • 之前 Object Capture 对低纹理物体(如纯色椅子)效果差。
  • 今年新增 LiDAR 点云数据辅助,RGB 图像 + 点云融合重建。
  • 显著提升了低纹理物体的模型质量。

引导式拍摄(Guided Capture)

  • 自动拍摄模式:系统自动选择清晰度、曝光合适的时机拍照。
  • 拍摄转盘(Capture Dial):指示哪些角度已经有足够的图像,引导用户填满所有区域。
  • 实时反馈:太暗/太亮、移动太快/太慢、距离太近/太远、物体出框等提示。
  • 翻转建议:API 判断物体是否有足够纹理支持翻转扫描,给出建议。

翻转策略

  • 刚性物体可以翻转;可变形物体不建议翻转。
  • 纹理丰富的物体建议翻转;对称/重复纹理的不建议翻转。
  • 翻转时扫描三个方向,每个方向间需要有重叠区域。
  • 不能翻转的物体建议从三个不同高度拍摄。

API 结构

  • Session(状态机):控制拍摄流程的各个阶段。
  • SwiftUI View:显示相机画面,自动根据 session 状态调整 UI。
  • 重建 API:在设备端执行 3D 模型重建。

设备要求

  • iPhone 12 Pro 及更新机型、iPad Pro 2021 及更新机型。
  • 提供设备支持检查 API。

值得深挖的点

引导式拍摄的”自动时机选择” 解决了最大的用户痛点。之前用户需要自己判断什么时候按快门——角度对不对、模糊了没有、光线够不够。Guided Capture 自动评估这些因素,只在图像质量达标时才采集。这把 Object Capture 从”需要摄影技巧”降低到了”按提示绕物体走一圈”。

翻转建议 API 是一个容易被忽略但很实用的能力。翻转物体可以帮助扫描底部,但如果物体是对称纹理的(比如圆柱形花瓶),翻转后系统无法对齐前后扫描的图像。API 会判断物体是否适合翻转,避免用户做了无用功。

从 Mac 到 iOS 的迁移不只是平台移植,而是工作流的简化。之前的流程是”iPhone 拍照 → 传到 Mac → Mac 上重建”,现在是”iPhone 上拍摄 → iPhone 上重建”。对普通用户来说,这把 3D 扫描的门槛从”需要一台 Mac”降到了”只需要一部 iPhone”。

代码片段

检查设备支持并启动 Object Capture:

import ObjectCapture

// 检查设备是否支持 Object Capture
if ObjectCaptureSession.isSupported {
    // 创建拍摄 session
    let session = ObjectCaptureSession()

    // SwiftUI 视图自动展示相机画面和引导 UI
    ObjectCaptureView(session: session)
}

引导式拍摄的状态机控制:

// ObjectCapture Session 的状态机流程
let session = ObjectCaptureSession()

// 1. 开始扫描
session.start(imagesDirectory: saveDirectory)

// 2. 用户围绕物体拍摄——系统自动选择最佳时机采集图像
// Capture Dial 指示哪些角度已覆盖

// 3. 完成一个扫描段后,可以翻转物体继续扫描
// session 会建议是否翻转

// 4. 扫描完成后开始重建
let reconstruction = try await session.reconstruct(
    outputDirectory: outputDir
)
// 在设备端完成 USDZ 模型重建

判断物体是否适合翻转:

// API 建议物体是否有足够纹理支持翻转
// 纹理丰富的物体:翻转建议 ✅
// 对称/重复纹理的物体:翻转建议 ❌
// 低纹理物体(有 LiDAR 时):翻转可能有困难

// 在 UI 中展示翻转建议
if session.canFlipObject {
    showFlipGuidance()
} else {
    // 建议从不同高度拍摄以覆盖底部
    showMultiHeightGuidance()
}

最佳实践

  • 使用引导式拍摄而非手动拍照,自动模式能采集质量更一致的数据。
  • 填满拍摄转盘的所有区域——遗漏角度会导致模型不完整。
  • 保持均匀的漫反射光线,避免强烈阴影和高光。
  • 刚性物体建议翻转扫描三面,可变形物体从不同高度拍摄。
  • 扫描段之间保持图像重叠——重叠区域帮助系统对齐不同扫描段。
  • 低纹理物体放在有纹理的背景上,帮助系统区分物体和背景。
  • 避免反光、透明和极细结构的物体——这些目前仍然有挑战。

还有什么值得关注

  • Apple 提供完整的示例 App 源代码,可以直接下载使用或作为起点。
  • LiDAR 支持需要 iPhone 12 Pro 及以上或 iPad Pro 2021 及以上机型。
  • 重建在设备端完成,不需要网络连接——对隐私和离线场景都很友好。
  • 搭配 Reality Composer Pro 可以对生成的 USDZ 模型做进一步编辑。
  • 生成的 USDZ 模型可以直接用于 Quick Look 预览和 AR 体验。
WWDC 2023