在将 3D 集成到 iOS 应用程序的无数项目中,我改进了一个 USDZ 工作流程,该流程始终能提供可靠、高性能的 AR Quick Look 预览。我的流程侧重于干净的导出管线、严格的验证以及与 Xcode 的紧密集成。本指南适用于需要将资产从创建无缝转移到功能性 AR 预览的 iOS 开发者和 3D 艺术家。关键在于将 USDZ 视为核心的、优化的交付物,而不是事后才考虑的。
主要收获:
ARKit 和 QuickLook 将 USDZ 集成到您的应用程序中非常简单,但真实世界的比例和照明设置决定了用户体验的成败。对于 iOS AR,USDZ 不仅仅是一个选项,它更是标准。Apple 的生态系统,从 Safari 到信息再到原生应用,都通过 AR Quick Look 内置了对 USDZ 的支持。我使用它是因为它是一个普遍认可的容器,可以在 iPhone 和 iPad 上“开箱即用”,无需自定义 AR 引擎即可开始。
主要优势是无处不在。通过导出到 USDZ,我知道模型可以在任何支持 AR Quick Look 的上下文中进行预览。它正确处理 PBR(基于物理的渲染)材质,这对于资产在 iOS 的光照下看起来逼真至关重要。我还依赖它的可组合性;一个 .usdz 文件可以包含动画、多个 LOD(细节级别)和声音,使资产包保持整洁。
从开发角度来看,集成是轻量级的。我不需要为基本的预览功能捆绑一个沉重的 3D 渲染框架。这可以减小应用程序大小并简化代码库,因为我正在利用系统级功能而不是自己构建。
我早期的错误教会了我宝贵的经验。最常见的陷阱是忽略真实世界比例。以任意单位导出的模型在 AR 中会显得巨大或微小。我现在总是以米为单位进行建模和导出。
另一个常见问题是过于复杂的几何体。来自电影管线的超高多边形模型会在移动设备上卡顿。我学会了在 USDZ 导出之前将精细细节烘焙到法线贴图中并积极减少多边形数量。最后,使用不支持的纹理格式或不正确的材质图(例如非 PBR 着色器)会导致 Quick Look 中渲染破损。我坚持使用标准的 PNG/JPG 纹理和简单的金属/粗糙度或镜面/光泽度工作流程。
这是我的动手实践管线,从完成的模型到经过验证的 USDZ 文件。一致性在这里可以避免日后的麻烦。
在我打开导出对话框之前,我都会对模型进行准备清单检查。首先,我确保几何体是干净的——没有非流形边、多余顶点或重叠的 UV。接下来,我验证所有纹理都是方形、2 的幂次方尺寸(例如,1024x1024),并且打包成标准 PBR 材质集(基础色、法线、粗糙度、金属度)。
我的预导出清单:
我主要使用 Blender 进行最终的 USDZ 导出,因为它强大且免费支持 USD。我的导出设置特意保持简单:
文件 > 导出 > USD (.usd, .usda, .usdc, .usdz)。选定对象 复选框。网格数据 下,我确保在需要时选中 UVs、法线 和 顶点颜色。骨架 下,除非需要,否则我禁用动画导出。比例 设置为 1.00 并确保 转换方向 正确(通常是 Y 向上)。对于快速生成或从概念开始时,我经常使用 Tripo AI 从图像或文本提示创建基础 3D 网格。它的输出已经优化且防水,这让我有一个巨大的领先优势。然后我将 OBJ 或 GLB 导入 Blender 进行材质分配和最终的 USDZ 导出。这种混合方法可以缩短我从概念到预览的时间。
导出并不是最后一步。我立即验证文件。我将 .usdz 拖放到 usdzcheck 命令行工具(来自 Apple 的 USDZ Tools)上,以扫描合规性错误。然后,我进行实时测试:
如果它在设备上通过了这些测试,我就认为它已准备好投入生产。
将 USDZ 文件导入应用程序并使其可查看是最后令人满意的一步。
我通常为了简单起见,将 USDZ 文件直接嵌入到应用程序包中。我将文件拖到我的 Xcode 项目中,确保它已添加到正确的目标。对于动态或可下载的资产,我将 .usdz 文件托管在服务器上,并通过 URLSession 获取它。关键是 AR Quick Look 可以从本地文件 URL 和远程 HTTPS URL 启动。
在代码中,我保留了对该资产的引用。对于本地文件,我使用 Bundle.main.url(forResource:withExtension:)。对于远程文件,我将下载的文件缓存到设备的临时目录,以避免每次查看时重新下载。
使用 QuickLook 和 ARKit 呈现 AR 视图非常简单。我创建一个 QLPreviewController 并将其数据源设置为指向我的 USDZ 文件的 URL。为了获得更定制的 AR 体验,我使用 ARKit 中的 ARQuickLookViewController,它让我可以更好地控制 AR 放置,并允许我添加自定义的“放置”按钮或说明。
我重用的代码片段:
import QuickLook
import ARKit
func presentARQuickLook() {
guard let fileURL = Bundle.main.url(forResource: "model", withExtension: "usdz") else { return }
let previewController = QLPreviewController()
previewController.dataSource = self
present(previewController, animated: true)
}
我总是提供清晰的 UI 提示,例如 AR 图标按钮,让用户知道他们可以点击以在 AR 中查看。我还优雅地处理设备上 AR 不可用的情况。
技术上有效的 USDZ 如果未优化,仍然可能提供糟糕的用户体验。以下是我如何确保质量的方法。
移动 GPU 有其限制。为了获得 60fps 的流畅 AR 体验,我将主对象的多边形数量控制在 100,000 个三角形以下。我使用自动重新拓扑工具来减少密集的扫描或雕刻。对于纹理,我尽可能将多个材质打包到一个纹理图集中并压缩纹理。Apple 建议对于在 AR 中从手臂长度观看的大多数对象使用 2K 或 1K 纹理。
比例至关重要。一个 3 米高的虚拟椅子是无用的。我在导出之前在 3D 软件中校准比例。对于光照,我依赖 Apple 在 AR Quick Look 中的基于环境的光照。这意味着我确保我的 PBR 材质设置正确(金属度/粗糙度值准确),以便它们能真实地响应真实世界的相机馈送和估计的光照。我避免烘焙会与实时环境冲突的强烈阴影或环境光遮蔽。
为了快速原型制作或从 2D 参考工作时,AI 驱动的 3D 生成已成为我管线的关键部分。我使用 Tripo AI 在几秒钟内从产品照片或草图生成基础网格。这为我提供了一个干净、流形的起点,该起点已经针对 3D 进行了优化,从而绕过了耗时的建模和重新拓扑阶段。然后我将该资产导入我的标准 USDZ 精化和导出工作流程。这种方法对于创建电子商务、设计模型或任何其他需要从概念到 AR 快速生成的工具的预览非常宝贵。
moving at the speed of creativity, achieving the depths of imagination.
文字/图片转 3D 模型
每月获赠免费额度
极致细节还原