OpenXR

OpenXR logo

OpenXR 是来自 Khronos 的一种开放式免版税 API 标准,它对涵盖混合现实的各种设备提供引擎本机访问。

你可在桌面上的 HoloLens 2 或 Windows Mixed Reality 沉浸式 VR 头戴显示设备上使用 OpenXR 进行开发。 如果你无法访问头戴显示设备,可以改用 HoloLens 2 仿真器或 Windows Mixed Reality 模拟器。

为什么使用 OpenXR?

借助 OpenXR,可以构建适用于全息设备(如 HoloLens 2)和沉浸式 VR 设备(如用于台式电脑的 Windows Mixed Reality 头戴显示设备)的引擎。 使用 OpenXR,只需编写一次代码,即可在各种硬件平台上移植。

OpenXR API 使用加载程序将应用程序直接连接到头戴显示设备的本机平台支持。 最终用户可以获得最高性能和最低延迟,无论他们使用的是 Windows Mixed Reality 还是任何其他头戴显示设备。

什么是 OpenXR?

OpenXR API 提供核心姿势预测、帧计时和空间输入功能,你需要构建一个适用于全息设备和沉浸式设备的引擎。

若要了解 OpenXR API,请查看 OpenXR 1.0 规范API 参考快速参考指南。 有关详细信息,请查看 Khronos OpenXR 页面

若要获取 HoloLens 2 的全部功能,你还将使用跨供应商和供应商特定的 OpenXR 扩展,这些扩展可实现 OpenXR 1.0 核心之外的其他功能,例如铰接式手部跟踪、眼动跟踪、空间映射和空间定位点。 有关详细信息,请参阅下面关于今年晚些时候将推出的扩展的路线图部分

OpenXR 本身并不是一个混合现实引擎。 但是,OpenXR 使 Unity 和 Unreal 等引擎只需编写一次可移植代码,然后即可访问用户的全息设备或沉浸式设备的本机平台功能,无论该平台是由哪个供应商构建的。

蓝图

OpenXR 规范定义了一种扩展机制,使运行时实施者能够公开基本 OpenXR 1.0 规范中定义的核心功能之外的其他功能。

有三种类型的 OpenXR 扩展:

  • 供应商扩展(例如 XR_MSFT_...:在硬件或软件功能中实现每个供应商的创新。 任何运行时供应商都可以随时引入和交付供应商扩展。
    • 实验性扩展供应商扩展(例如 XR_MSFTX_...:实验性供应商扩展正在预览以收集反馈。 XR_MSFTX_... 扩展仅适用于开发人员设备,当真正的扩展交付时将被删除。 若要体验这些扩展,可以在开发人员设备上启用预览版扩展
  • 跨供应商 EXT 扩展:跨供应商扩展由多个公司定义和实现。 感兴趣的公司可以随时引入 EXT 扩展。
  • 官方 KHR 扩展:官方 Khronos 扩展获批为核心规范版本的一部分。 KHR 扩展与核心规范本身具有相同的许可证。

Windows Mixed Reality OpenXR 运行时支持一组 MSFTEXT 扩展,这些扩展将全套 HoloLens 2 功能引入 OpenXR 应用程序:

功能区域 扩展可用性
系统 + 会话 OpenXR 1.0 核心规范:
XrInstanceXrSystemIdXrSession
参考空间(视图、本地、场地) OpenXR 1.0 核心规范:
XrSpace
视图配置(单声道、立体声) OpenXR 1.0 核心规范:
XrView...
交换链 + 帧计时 OpenXR 1.0 核心规范:
XrSwapchain... + xrWaitFrame
合成层
(投影、四面体)
OpenXR 1.0 核心规范:
XrCompositionLayer... + xrEndFrame
输入和触觉 OpenXR 1.0 核心规范:
XrAction...
Direct3D 11/12 集成 已发布的官方 KHR 扩展:
XR_KHR_D3D11_enable
XR_KHR_D3D12_enable
无界限参考空间
(世界规模体验)
已发布的 MSFT 扩展:
XR_MSFT_unbounded_reference_space
空间定位点

已发布的 MSFT 扩展:
XR_MSFT_spatial_anchor

在运行时 108 中发布的 MSFT 扩展:(仅 HoloLens 2)
XR_MSFT_spatial_anchor_persistence

手动交互
(手柄/瞄准姿势、隔空敲击、抓取)

仅限 HoloLens 2

已发布的 MSFT 扩展:
XR_MSFT_hand_interaction
手部清晰度 + 手部网格

仅限 HoloLens 2

已发布的 EXT 扩展:
XR_EXT_hand_tracking

已发布的 MSFT 扩展:
XR_MSFT_hand_tracking_mesh

眼睛凝视

仅限 HoloLens 2

已发布的 EXT 扩展:
XR_EXT_eye_gaze_interaction
混合现实捕获
(从 PV 相机的第三个渲染)

仅限 HoloLens 2

已发布的 MSFT 扩展:
XR_MSFT_secondary_view_configuration
XR_MSFT_first_person_observer
运动控制器交互配置文件
(Samsung Odyssey 和 HP Reverb G2)
运行时 103 中发布的 MSFT 扩展:
XR_EXT_samsung_odyssey_controller
XR_EXT_hp_mixed_reality_controller
运动控制器呈现模型 运行时 104 中发布的 MSFT 扩展:
XR_MSFT_controller_model
场景理解(平面、网格)

仅限 HoloLens 2

运行时 106 中发布的 MSFT 扩展:
XR_MSFT_scene_understanding
XR_MSFT_scene_understanding_serialization
合成层重投影模式
(自动平面或“仅朝向”的重投影)
运行时 106 中发布的 MSFT 扩展:
XR_MSFT_composition_layer_reprojection
与其他混合现实 SDK 互操作
(例如 QR
已发布的 MSFT 扩展:
XR_MSFT_spatial_graph_bridge
与 UWP CoreWindow API 互操作
(例如与键盘/鼠标互操作)
运行时 103 中发布的 MSFT 扩展:
XR_MSFT_holographic_window_attachment
具有旧版混合现实 WinRT API 的互操作
(例如 SpatialAnchorTransferManager

运行时 105 中发布的 MSFT 扩展:
XR_MSFT_perception_anchor_interop

其他跨供应商扩展

已发布的官方 KHR 扩展:
XR_KHR_composition_layer_depth
XR_KHR_visibility_mask
XR_KHR_win32_convert_performance_counter_time
XR_KHR_composition_layer_color_scale_bias

已发布的 EXT 扩展:
XR_EXT_win32_appcontainer_compatible
XR_EXT_debug_utils

尽管其中一些扩展刚开始可能是特定供应商的 MSFT 扩展,但 Microsoft 和其他 OpenXR 运行时供应商正在通力合作,为其中许多功能领域设计跨供应商的 EXTKHR 扩展。 使用跨供应商扩展,可以将你为这些功能编写的代码在运行时供应商之间移植,就像核心规范一样。

可在何处使用 OpenXR?

Screenshot of Minecraft being played by a user wearing a mixed reality headset

我的世界的新 RenderDragon 引擎已使用 OpenXR 构建其桌面 VR 支持!

Microsoft 一直与 Unity 和 Epic Games 合作,确保混合现实的未来是开放的,不仅适用于 HoloLens 2,而且适用于所有电脑 VR,包括 HP 新推出的 Reverb G2 头戴显示设备。 OpenXR 为当今发售的主要游戏(如我的世界和 Microsoft Flight Simulator)提供跨供应商 VR 支持。 有关 HoloLens(第一代)开发的详细信息,请参阅发行说明

若要了解如何在 Unity、Unreal Engine 或你自己的引擎中开始使用 OpenXR,请继续阅读!

Unity 中的 OpenXR

Microsoft 目前建议用于 HoloLens 2 和 Windows Mixed Reality 开发的 Unity 配置是带有 Mixed Reality OpenXR 插件的 Unity 2020.3 LTS。 此插件支持 OpenXR 扩展,这些扩展可实现 HoloLens 2 和 Windows Mixed Reality 头戴显示设备的全部功能,包括手部/眼动跟踪、空间定位点和 HP Reverb G2 控制器。 MRTK-Unity 从 MRTK 2.7 开始支持 OpenXR。 有关 Unity 2020 和 OpenXR 入门的详细信息,请参阅选择 Unity 版本和 XR 插件

如果要针对 HoloLens(第一代)进行开发,则需要继续使用 Unity 2019.4 LTS 和旧版 WinRT API 后端。 若要在 Unity 2019 应用中使用新的 HP Reverb G2 控制器,请参阅 HP Reverb G2 输入文档

从 Unity 2021.3 LTS 开始,OpenXR 将是唯一支持用于 HoloLens 2 和 Windows Mixed Reality 头戴显示设备的 Unity 后端

Unreal Engine 中的 OpenXR

Unreal Engine 4.23 是第一个提供 OpenXR 1.0 预览支持的主要游戏引擎版本! 现在,在 Unreal engine 4.26 中,可通过 Unreal Engine 的内置 OpenXR 支持为 HoloLens 2、Windows Mixed Reality 和其他桌面 VR 头戴显示设备提供支持。 Unreal Engine 4.26 还支持 Microsoft 的 OpenXR 扩展插件,可用于实现手动交互和 HP Reverb G2 控制器支持,并实现 HoloLens 2 和 Windows Mixed Reality 头戴显示设备的全部功能。 Unreal Engine 4.26 如今可在 Epic Games Launcher 上使用,MRTK-Unreal 0.12 支持 OpenXR 项目。

使用 OpenXR 进行本机开发

你可在桌面上的 HoloLens 2 或 Windows Mixed Reality 沉浸式 VR 头戴显示设备上使用 OpenXR 进行开发。 如果你无法访问头戴显示设备,可以改用 HoloLens 2 仿真器或 Windows Mixed Reality 模拟器。

若要开始为 HoloLens 2 或 Windows Mixed Reality VR 头戴显示设备开发 OpenXR 应用程序,请参阅如何开始使用 OpenXR 开发

有关 OpenXR API 的所有主要组件的教程,以及目前使用 OpenXR 的实际应用程序的示例,请观看这段 60 分钟的演练视频:

另请参阅