码到成功

3d重建ios原生

关键词:iOS 3D 扫描、iPhone 3D 重建、Object Capture、PhotogrammetrySession、RealityKit、USDZ、SwiftUI、本机三维重建、离线 3D 建模、AR 模型预览。

 

## 项目用途

 

Rebuilder3D 的目标是验证并实现一套纯 iOS 本机 3D 重建流程:

 

- 使用 iPhone 相机围绕物体多角度拍摄。

- 使用 Apple Object Capture 引导用户采集物体照片。

- 在本机生成 3D 模型。

- 输出 `model.usdz`,可用于 AR Quick Look、RealityKit 预览和系统分享。

- 全流程本地运行,不需要云端服务器,不需要上传照片。

 

适合的使用场景:

 

- 小型商品、摆件、模型、工艺品的 3D 扫描原型。

- 学习 Apple Object Capture 和 RealityKit Photogrammetry。

- 构建离线 3D 扫描 App 的 MVP。

- 生成可在 iPhone / iPad 上预览和分享的 USDZ 模型。

 

## 开发环境

 

推荐开发环境:

 

- macOS:建议使用较新的 macOS 版本。

- Xcode:当前工程已用 Xcode 26.2 验证构建。

- iPhoneOS SDK:当前本机 SDK 为 26.2。

- Swift:Swift 5。

- UI 框架:SwiftUI。

- 最低部署版本:iOS 17.0。

- 网络要求:无。扫描和重建均在本机完成。

 

注意:需要真机验证,模拟器只能用于编译和普通 UI 检查。

 

## 核心功能

 

- 新建本机扫描任务。

- 展示 Apple 原生物体扫描界面。

- 支持检测物体、开始拍摄、完成扫描。

- 拍摄过程中按最高每秒 2 张的节奏请求照片。

- 当系统提示当前状态不适合拍照时自动跳过当前节拍。

- 扫描结束后使用本机重建。

- 重建前检查有效照片数量,少于 30 张会提示补拍。

- 重建失败时会尝试使用更保守配置自动重试一次。

- 生成 USDZ 模型并支持本地预览。

- 模型预览页提供关闭和分享入口。

- 扫描结果保存在 App 的 Application Support 目录中。

 

## 运行方法

 

在 macOS 上打开工程:

 

```bash

open Rebuilder3D.xcodeproj

```

 

中文说明:使用 Xcode 打开项目后,选择 iPhone 12 Pro Max 或其他支持的真机运行。首次启动时需要允许相机权限。

 

## 使用方法

 

1. 打开 App。

2. 点击右上角 `+` 新建扫描任务。

3. 将物体放在稳定桌面上,保持柔和、均匀的光线。

4. 点击 `检测物体`,让系统识别扫描目标。

5. 点击 `开始拍摄`,缓慢绕物体移动手机。

6. 尽量覆盖物体正面、侧面、背面、顶部和边缘。

7. 拍摄足够照片后点击 `完成扫描`。

8. 进入本机重建流程,等待生成 `model.usdz`。

9. 生成完成后点击预览,查看或分享 3D 模型。

 

建议每个物体保留 70 到 150 张有效照片。照片数量越少,重建失败或细节缺失的概率越高。

 

## 拍摄建议

 

为了获得更稳定的 iPhone 3D 重建效果,建议:

 

- 使用纹理明显、边缘清晰的物体。

- 避免透明玻璃、镜面金属、纯白、纯黑、毛发和会移动的物体。

- 保持物体不动,移动手机绕物体拍摄。

- 移动速度要慢,保证相邻照片有足够重叠。

- 光线要均匀,避免强阴影和过曝。

- 背景不要过于杂乱。

- 不要让手、身体或其他杂物遮挡物体。

 

## 技术架构

 

主要目录:

 

```text

Rebuilder3D/

  App/

    Rebuilder3DApp.swift

  Models/

    ScanJob.swift

  Services/

    ScanLibrary.swift

    CaptureViewModel.swift

    ReconstructionController.swift

  Views/

    HomeView.swift

    CaptureScreen.swift

    ReconstructionProgressView.swift

    QuickLookPreview.swift

```

 

核心模块说明:

 

- `CaptureViewModel`:管理 Object Capture 扫描状态、反馈信息、拍摄节拍和取消逻辑。

- `CaptureScreen`:展示原生 Object Capture 扫描界面和拍摄控制。

- `ReconstructionController`:管理 `PhotogrammetrySession` 本机重建流程。

- `ScanLibrary`:管理扫描任务目录、元数据和本地结果。

- `QuickLookPreview`:用于预览生成的 USDZ 模型。

 

## 输出文件

 

每个扫描任务会生成独立目录,主要包含:

 

- 原始采集图片目录。

- Object Capture checkpoint。

- Photogrammetry checkpoint。

- 输出模型目录。

- `model.usdz` 三维模型文件。

- `scan.json` 扫描任务元数据。

 

## 常见问题

 

### 为什么模拟器不能完整测试?

 

Object Capture 和本机 Photogrammetry 依赖真实设备相机、传感器和系统能力,模拟器不能完成真实物体扫描和三维重建。

 

### 为什么需要很多照片?

 

Apple 原生 Photogrammetry 属于多视角照片重建,系统需要通过大量重叠照片估计相机位姿、生成点云、构建网格并贴图。照片太少会导致对齐失败、模型缺面或重建失败。

 

### 遇到 `CoreOC.PhotogrammetrySession.Error error 6` 怎么办?

 

这是 Apple Object Capture 内部重建错误。项目已加入一次保守配置重试。如果仍然失败,建议重新扫描,增加不同角度照片,降低移动速度,改善光线,并避免反光、透明或纯色物体。

 

### 能不能完全离线使用?

 

可以。当前版本只依靠 iOS 原生能力,不连接服务器,不上传图片。本机完成拍摄、重建、预览和分享。

 

## 当前限制

 

- 目前主要输出 USDZ 模型。

- 高精度测量、工业扫描、3D 打印级拓扑不是当前 MVP 目标。

- 重建质量高度依赖物体材质、拍摄角度、照片数量和光照条件。

 

## 适合人群

 

- 想开发 iOS 3D 扫描 App 的开发者。

- 想验证 iPhone 离线三维重建流程的产品原型团队。

- 想把真实物体转换为 USDZ / AR 预览模型的移动端开发者。