认识 Reality Composer Pro:visionOS 的 3D 内容编辑器
Meet Reality Composer Pro
2023年6月5日
一句话判断
Reality Composer Pro 是 visionOS 开发的标配工具——它用 Swift Package 管理项目,支持 USD 格式导入、粒子系统、Shader Graph 和性能统计,还可以直接在设备上预览。
这场 Session 讲了什么
Session 全面介绍了 Reality Composer Pro 的功能和使用方式,以构建一个”国家公园微缩模型”Diorama 应用为主线。
项目结构。Reality Composer Pro 项目以 Swift Package 的形式存在。在 Xcode 中创建 xrOS App 模板时自动生成关联的 RCP 项目。放入 .rkassets 文件夹的 USD 文件会在构建时编译成框架,供 Xcode 项目使用。USD(Universal Scene Description)是苹果推荐的 3D 内容格式。
UI 布局。中央是视口(Viewport),支持 WASD 键和游戏手柄导航。左侧是层级面板(Hierarchy),用于搜索和整理 3D 对象。右侧是检查器面板(Inspector),编辑选中对象的属性(位置、旋转、缩放),底部有 Add Component 按钮添加 RealityKit 组件。底部编辑面板包含 Project Browser、Shader Graph、Audio Mixer 和 Statistics 四个标签页。
三种导入资产方式:从本地导入已有资产、使用内建的 Content Library(苹果提供的素材库)、以及通过 Object Capture 将照片转为 3D 模型。
粒子系统。由粒子(Particle)和发射器(Emitter)两部分组成。粒子控制颜色、属性、力场和渲染;发射器控制时机、形状和生成。Session 演示了用粒子系统制作云朵效果——先创建可复用的 Cloud Chunk 场景,再组合多个 Chunk 成完整云朵,最后放入主场景。
性能统计。Statistics 面板显示渲染性能数据,帮助优化 3D 场景的帧率和资源使用。
值得深挖的点
USD 的引用机制:场景中的对象是对 USD 文件的引用。如果更新了源文件,场景中所有引用该文件的对象都会更新。这支持了”修改一处、全局生效”的工作流程。比如示例中三个地点标记引用同一个 USD 文件,更新文件后三个标记全部更新。
场景的分层设计:RCP 项目可以包含多个场景,场景可以是最终成品也可以是可复用组件。示例中的云朵就采用了分层策略——Cloud Chunk 场景作为基础组件,完整 Cloud 场景组合多个 Chunk,主场景再引用不同的 Cloud。这种模式在复杂项目中很有价值。
Shader Graph 和 Audio Mixer:这两个高级编辑器在底部的编辑面板中。Shader Graph 用于创建自定义材质效果,Audio Mixer 管理场景中的音频混合。虽然 Session 没有深入,但它们是制作沉浸式体验的关键工具。
代码片段
在 Xcode 项目中使用 Reality Composer Pro 的内容:
import SwiftUI
import RealityKit
// RCP 项目编译后的框架
import DioramaContent
struct DioramaView: View {
var body: some View {
// 从 RCP 项目的 .rkassets 加载场景
RealityView { content in
// 加载主场景
if let scene = try? await Entity(
named: "MainScene",
in: DioramaContent.bundle
) {
content.add(scene)
}
}
}
}
粒子系统的组件配置(在 RCP 编辑器中):
// 在 RCP 中通过 Add Component 添加粒子发射器
// 粒子属性(在 Inspector 面板中配置):
// - 颜色:白色半透明
// - 生命周期:3-5 秒
// - 大小:从 0.5 到 0.1 渐变
//
// 发射器属性:
// - 形状:Box(长扁形模拟云朵分布)
// - 生成速率:10 个/秒
// - 持续时间:无限循环
//
// 力场:
// - 轻微向上漂浮
// - 随机水平漂移
最佳实践
- 使用 xrOS App 模板创建项目,自动关联 RCP 项目和 Swift Package
- 用分层场景设计复杂内容——可复用组件 + 组合场景 + 主场景
- 利用 USD 的引用机制实现”修改一次、全局更新”
- 使用 Statistics 面板监控渲染性能,在开发阶段就发现瓶颈
- Content Library 提供了现成的材质和对象,优先使用减少建模工作量
还有什么值得关注
- Shader Graph 的详细使用方式和自定义材质效果
- Object Capture 在 iOS 上的工作流程和输出质量
- Audio Mixer 在空间音频场景中的配置方式
- RCP 项目与 Xcode 项目的热重载/实时预览体验