为空间计算构建精彩游戏:从共享空间到完全沉浸
Build great games for spatial computing
2023年6月5日
一句话判断
空间计算游戏不只是 VR——从桌面上的虚拟棋盘到完全沉浸的太空大战,四种沉浸等级覆盖所有游戏类型。
这场 Session 讲了什么
Tricia Gray 从 RealityKit 工具团队出发,讲解了空间计算平台上游戏开发的框架选择和渲染特性:
四种沉浸等级。Shared Space(共享空间)中多个 App 并存,适合棋盘游戏、虚拟宠物等低注意力游戏;Full Space with passthrough(全空间+穿透)关闭其他窗口但保留真实环境,适合需要更多注意力但与真实世界互动的游戏(如飞船从墙洞飞出);Fully Immersive(完全沉浸)替换整个视野,适合 VR 体验;传统 2D 窗口游戏,玩家可以把窗口放桌面、挂墙上或当成巨幕。
渲染特性。在 Shared Space 中,所有 App 的内容由系统合成器统一渲染,使用 MaterialX 的 surface shader 和 geometry shader。系统自动应用动态注视点渲染(foveation),在用户注视的区域使用更高分辨率,无需开发者额外工作。
现实融合效果。深度缓解(内容被真实物体遮挡时变透明)、近场暗角(内容离玩家太近时淡出)、突破(真人走近时自动穿透虚拟内容)、地面阴影(虚拟物体靠近真实物体时投射阴影)——这四个系统效果让虚拟内容自然融入真实空间。
音频。Spatial Audio 自动匹配真实房间的回声和声学特性。使用标准 iOS 音频 API 就能获得空间感。
输入方式。注视+手指捏合、直接触摸、蓝牙手柄和键盘都支持。
值得深挖的点
动态注视点渲染的性能收益。系统在用户注视的区域用更高分辨率渲染,其他区域降低采样率。这不只是节省算力——它让你在不增加纹理尺寸的情况下获得更高的像素密度(每度像素数)。
2D 游戏的增强方式。即使不做 3D 游戏,你也可以利用空间计算平台的特性:多层渲染产生真实的视差效果、粒子和烟雾元素从平面中飞出、自定义手势交互。用少量 3D 元素为 2D 游戏增添空间感。
CompositorServices for 自定义引擎。如果你需要完全控制渲染管线,CompositorServices API 提供 Metal 渲染接口,配合 ARKit 的世界追踪和手部追踪,可以创建完全自定义的沉浸体验。RecRoom 就是用这套方案通过 Unity 编辑器移植过来的。
代码片段
// 游戏场景的沉浸等级选择
@main
struct GameApp: App {
var body: some Scene {
// Shared Space 中的棋盘游戏
WindowGroup {
ChessGameView()
}
.windowStyle(.volumetric)
.defaultSize(width: 0.4, height: 0.4, depth: 0.4, in: .meters)
// 完全沉浸的太空射击游戏
ImmersiveSpace(id: "space-battle") {
SpaceBattleView()
}
.immersionStyle(selection: .constant(.full), in: .full)
}
}
最佳实践
- 根据游戏类型选择沉浸等级——不是所有游戏都需要完全沉浸。
- Shared Space 模式下利用系统自动的环境光采样,让虚拟物体看起来自然。
- 利用动态注视点渲染来优化性能,不需要手动实现 LOD。
- 空间音频用标准 API 就能获得,不需要额外的音频引擎。
- 测试时关注深度缓解和近场暗角的效果,确保虚拟物体在真实空间中的表现自然。
还有什么值得关注
- “Discover Metal for immersive apps” 讲了用 CompositorServices 自定义渲染管线
- “Create immersive Unity apps” 讲了 Unity 的集成方案
- RecRoom 是用 Unity + CompositorServices + ARKit 的实际案例
- RealityKit 自动采样房间光照,PBR 材质在真实光照下效果逼真