OpenXR

OpenXR logo

OpenXR is an open royalty-free API standard from Khronos that provides engines native access to a wide range of devices from many vendors that span across the mixed reality spectrum.

You can develop using OpenXR on a HoloLens 2 or Windows Mixed Reality immersive headset on the desktop. If you don't have access to a headset, you can use the HoloLens 2 Emulator or the Windows Mixed Reality Simulator instead.

Why OpenXR?

With OpenXR, you can build engines that target both holographic devices (like HoloLens 2) that place digital content in the real world as if it were really there, as well as immersive devices (like Windows Mixed Reality headsets for desktop PCs) that hide the physical world and replace it with a digital experience. OpenXR lets you write code once that's then portable across a wide range of hardware platforms.

The OpenXR API uses a loader that connects your application directly to your headset's native platform support. This offers your end users maximum performance and minimum latency, whether they're using a Windows Mixed Reality headset or any other headset.

What is OpenXR?

The OpenXR API provides the core pose prediction, frame timing and spatial input functionality you'll need to build an engine that can target both holographic devices like HoloLens 2 and immersive devices like Windows Mixed Reality headsets.

To learn about the OpenXR API, check out the OpenXR 1.0 specification, API reference and quick reference guide. For more information, see the Khronos OpenXR page.

To target the full feature set of HoloLens 2, you'll also use cross-vendor and vendor-specific OpenXR extensions that enable additional features beyond the OpenXR 1.0 core, such as articulated hand tracking, eye tracking, spatial mapping and spatial anchors. See the Roadmap section below for more information on the extensions coming later this year.

Note that OpenXR is not itself a mixed reality engine. Instead, OpenXR enables engines like Unity and Unreal to write portable code once that can then access the native platform features of the user's holographic or immersive device, regardless of which vendor built that platform.

Roadmap

The OpenXR specification defines an extension mechanism that enables runtime implementers to expose additional functionality beyond the core features defined in the base OpenXR 1.0 specification.

There are three kinds of OpenXR extensions:

  • Vendor extensions (e.g. MSFT): Enables per-vendor innovation in hardware or software features. Any runtime vendor can introduce and ship a vendor extension at any time.
    • Experimental vendor extensions (e.g. MSFT_preview): Experimental vendor extensions being previewed to gather feedback. MSFT_preview extensions are for developer devices only and will be removed when the real extension ships. To experiment with them, you can enable preview extensions on your developer device.
  • Cross-vendor EXT extensions: Cross-vendor extensions that multiple companies define and implement. Groups of interested companies can introduce EXT extensions at any time.
  • Official KHR extensions: Official Khronos extensions ratified as part of a core spec release. KHR extensions are covered by the same license as the core spec itself.

As of July 2020, the Windows Mixed Reality OpenXR Runtime supports a set of MSFT and EXT extensions that brings the full set of HoloLens 2 features to OpenXR applications:

Feature area Extension availability
Systems + sessions OpenXR 1.0 core spec:
XrInstance, XrSystemId, XrSession
Reference spaces (view, local, stage) OpenXR 1.0 core spec:
XrSpace
View configurations (mono, stereo) OpenXR 1.0 core spec:
XrView...
Swapchains + frame timing OpenXR 1.0 core spec:
XrSwapchain... + xrWaitFrame
Composition layers
(projection, quad)
OpenXR 1.0 core spec:
XrCompositionLayer... + xrEndFrame
Input and haptics OpenXR 1.0 core spec:
XrAction...
Direct3D 11 integration Official KHR extension released:
XR_KHR_D3D11_enable
Direct3D 12 integration Official KHR extension released:
XR_KHR_D3D12_enable
Unbounded reference space
(world-scale experiences)
MSFT extension released:
XR_MSFT_unbounded_reference_space
Spatial anchors MSFT extension released:
XR_MSFT_spatial_anchor
Hand interaction
(grip/aim pose, air-tap, grasp)

HoloLens 2 only

MSFT extension released:
XR_MSFT_hand_interaction
Hand articulation + hand mesh

HoloLens 2 only

EXT extension released in runtime 102:
XR_EXT_hand_tracking

MSFT extension released in runtime 102:
XR_MSFT_hand_tracking_mesh
Eye gaze

HoloLens 2 only

EXT extension released:
XR_EXT_eye_gaze_interaction
Interop with other HoloLens SDKs
(e.g. QR)

HoloLens 2 only

MSFT extension released in runtime 102:
XR_MSFT_spatial_graph_bridge

MSFT extension in preview runtime 104:
XR_MSFT_perception_anchor_interop_preview

Mixed Reality Capture
(third render from PV camera)

HoloLens 2 only

MSFT extensions released in runtime 102:
XR_MSFT_secondary_view_configuration
XR_MSFT_first_person_observer
Interop with UWP CoreWindow API
(e.g. for keyboard/mouse)
MSFT extension released in runtime 103:
XR_MSFT_holographic_window_attachment
Motion controller interaction profiles (Samsung Odyssey and HP Reverb G2) MSFT extensions released in runtime 103:
XR_EXT_samsung_odyssey_controller
XR_EXT_hp_mixed_reality_controller
Motion controller render models MSFT extension in preview runtime 104:
XR_MSFT_controller_model
Scene understanding (planes, meshes)

HoloLens 2 only

In preview runtime 102 or later:
Use XR_MSFT_spatial_graph_bridge with Scene Understanding SDK

MSFT_preview extension in future preview runtime (planned)

Other cross-vendor extensions

Official KHR extensions released:

XR_KHR_composition_layer_depth
XR_KHR_visibility_mask
XR_KHR_win32_convert_performance_counter_time

EXT extensions released:

XR_EXT_win32_appcontainer_compatible
XR_EXT_debug_utils

While some of these extensions may start out as vendor-specific MSFT extensions, Microsoft and other OpenXR runtime vendors are working together to design cross-vendor EXT or KHR extensions for many of these feature areas. This will enable the code you write for those features to be portable across runtime vendors, just as with the core specification.

Get started with OpenXR

You can develop using OpenXR on a HoloLens 2 or Windows Mixed Reality immersive headset on the desktop. If you don't have access to a headset, you can use the HoloLens 2 Emulator or the Windows Mixed Reality Simulator instead.

To start developing OpenXR applications for HoloLens 2 or immersive Windows Mixed Reality headsets, see how to get started with OpenXR development.

For a tour through all the major components of the OpenXR API, along with examples of the real-world applications using OpenXR today, check out this 60-minute walkthrough video:

See also