[toc]本篇讨论XR(AR/VR/MR)的渲染 参考资料:Unity Virtual Reality Support ▲Single Pass Stereo rendering(Double-Wide rendering) Single Pass Stereo rendering用于PC和Playstatiion 4的VR应用,其将左眼和右眼相机的渲染结果绘制到同一个Render Texture。 这个RT的宽度为single eye texture的2倍,每个有Renderer组件的GameObject一次绘制使用2个draw call。 在执行Single Pass Stereo rendering的过程中,左眼和右眼相机共享culling和shadow。存在少量的图形命令作为状态转换开关,因为GPU渲染每个GameObjct时左右眼交替执行。 开启Single Pass Stereo rendering: 勾选XR Settings中的Virtual Reality Supported; 在Stereo Rendering Method中选择Single Pass; Unity内置的Standard Shader支持这些特性,其他用户自定义的资源则可能需要修改。 ▲使shader支持Single Pass Stereo rendering 参考内置的Standard Shader,例如URP的Lit。 Shader中不必声明VR相关的keywords。 ▲VR SDK 与 VR设备 在SX Settings中,VR SDK列表表示在运行时将会依次尝试启动对应的设备,首个完成初始化的设备将被启用。 None表示没有VR设备(也就是普通模式),以None开头表示初始状态为非VR模式,可通过C#脚本切换VR SDK。 在切换VR SDK时,新的设备初始化失败的话,会继续使用旧的设备。 ▲当启动VR设备时 当VR设备启用时,将自动发生一些事件。 自动渲染到一个头戴式显示器 Scene中的所有Camera直接渲染到the head-mounted display(HMD)。Unity将自动调整Camera的View和Projection矩阵以解决头部跟踪、位置跟踪、field of view。 Camera.main.stereoTargetEye = StereoTargetEyeMask.Both; Camera组件的stereoTargetEye属性可以禁用渲染到HMD或仅渲染特定眼睛到HMD(例如狙击镜)。 Automatic head-tracked input Unity在2019.1以后不再支持自动头部追踪,可参考”XR Legacy Input Helpers”这个package手动实现。 Understand the Camera VR模式下不能直接使用Camera组件的transform对Camera进行移动、旋转。需要将Camera作为另一个GameObject的子级,并使用父级的transform对Camera进行调整。 ▲VR开发Editor模式 在Editor模式下需要手动模拟VR体验,一个Camera可以渲染一只眼睛。 如果编辑模式下很卡,可以开启Game视图中的Maximize on Play。 ▲VR设备要求 每种设备都需要对应的软件支持,例如使用Unity开发、运行Oculus时,需要安装Oculus Home。