OpenXR

OpenXR 徽标

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 本身并不是一个混合现实引擎。 但是,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 核心规范:
XrInstanceXrSystemId、、 XrSession
参考空间(视图、本地、场地) 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

MSFT在运行时 108 中发布的扩展:(仅 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
场景标记(QR 码)

仅限 HoloLens 2

MSFT 在运行时 113 中发布的扩展:
XR_MSFT_scene_marker
合成层重投影模式
(自动平面或“仅朝向”的重投影)
运行时 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?

使用混合现实头戴显示设备的用户正在玩我的世界的屏幕截图

我的世界的新 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 混合现实头戴显示设备的完整功能,包括手/眼跟踪、空间定位点和 HP Reverb G2 控制器。 MRTK-Unity 从 MRTK 2.7 开始支持 OpenXR。 有关 Unity 2020 和 OpenXR 入门的详细信息,请参阅选择 Unity 版本和 XR 插件

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

从 Unity 2021.3 LTS 开始,OpenXR 是唯一支持面向 HoloLens 2 和 Windows 混合现实头戴显示设备的 Unity 后端。

Unreal Engine 中的 OpenXR

Unreal Engine 4.23 是第一个提供 OpenXR 1.0 预览支持的主要游戏引擎版本! 现在,在 Unreal Engine 4.26 中,通过 Unreal Engine 的内置 OpenXR 支持提供对 HoloLens 2、Windows 混合现实 和其他桌面 VR 头戴显示设备的支持。 Unreal Engine 4.26 还支持 Microsoft的 OpenXR 扩展插件。 这可实现手动交互和 HP Reverb G2 控制器支持,从而点燃 HoloLens 2 和 Windows 混合现实头戴显示设备的完整功能集。 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 分钟的演练视频:

另请参阅