Bring your Unity VR app to a fully immersive space
System & Services 进阶 20m

将 Unity VR app 带入全沉浸空间

Bring your Unity VR app to a fully immersive space

2023年6月5日

在 Apple 官方观看视频

一句话判断

Unity 开发者只需要切换 build target 就能把 VR 内容带到空间计算平台,但要获得最佳体验还需要做几件事。

这场 Session 讲了什么

Unity 将其引擎和 XR 生态系统带到了空间计算平台,让 Unity 开发者可以用熟悉的工作流将项目移植过来。以 Rec Room 为实例,Session 展示了全沉浸体验的完整流程。

工作流很简单:选择平台的 build target、启用 XR Plug-in、编译原生插件、从 Unity 生成 Xcode 项目、然后在 Xcode 中构建运行到设备或模拟器。

图形方面有几个关键点。推荐使用 Universal Render Pipeline(URP),因为它支持 Foveated Rendering(注视点渲染)——在镜头中心区域集中更多像素密度,外周区域减少细节。Single-Pass Instanced Rendering 现在支持 Metal API,默认启用,减少 CPU 开销。还要确保正确写入深度缓冲区,系统合成器用它做重投影。

交互方面,XR Interaction Toolkit(XRI)提供高级交互系统,抽象了输入类型,让交互代码跨平台工作。Unity Input System 可以响应系统手势,Unity Hands Package 提供原始手关节数据用于自定义交互。

值得深挖的点

深度缓冲区的正确写入是一个容易被忽视但关键的点。天空盒通常写入零深度值(反向 Z),这在设备上会导致错误颜色显示。Unity 已经修复了所有内置着色器的深度写入问题,但如果你有自定义效果(如自定义天空盒、水面效果、透明效果),需要确保每个像素都写入某个深度值。

Foveated Rendering 是提升视觉质量的关键技术。由于渲染在非线性空间中进行,着色器中有新的宏来处理坐标重映射。

代码片段

Unity VR 移植工作流:

1. 选择平台 build target
2. 启用 XR Plug-in
3. 重新编译原生插件(.mm 文件无需改动)
4. Unity 生成 Xcode 项目
5. Xcode 构建运行到设备/模拟器

图形优化:
- 使用 Universal Render Pipeline
- Static Foveated Rendering 自动启用
- Single-Pass Instanced Rendering 默认开启
- 确保深度缓冲区正确写入

交互方案:
- XR Interaction Toolkit: 高级交互(hover/grab/select)
- Unity Input System: 响应系统手势
- Unity Hands Package: 原始手关节数据

最佳实践

  • 使用 URP 获得 Foveated Rendering 支持
  • 确保自定义着色器正确写入深度值
  • XRI 抽象了输入类型,让代码跨平台工作
  • 检查自定义天空盒和透明效果的深度写入
  • 在模拟器上快速迭代,真机上验证最终效果

还有什么值得关注

  • 参考 “Create immersive Unity apps” 了解混合透视的方案
  • XRI 的 Locomotion 系统让用户在全沉浸空间中舒适移动
  • 手部追踪让现有的 VR 控制器输入有了新的适配方向
WWDC 2023