System & Services 进阶 20m
认识 iOS 上的 Object Capture
Meet Object Capture for iOS
2023年6月5日
一句话判断
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