OpenXR Parity with Oculus XR Plugin

We are excited to share that as of OpenXR 1.14, Unity’s OpenXR Meta 2.1 package has achieved outcome parity with the Oculus XR plugin, allowing for migration towards a more cross-platform development experience.

OpenXR is an open standard that provides a common set of APIs for developing XR applications that run across a wide range of AR and VR devices. This reduces the time and cost required to bring experiences to Quest devices from other platforms and vice versa.

As part of outcome parity, key features requested by developers that are now enabled via the OpenXR package include:

  • Software Dynamic Resolution which helps developers maintain their application’s frame rate while rendering at an optimal resolution. Dynamic Resolution automatically adjusts the resolution during heavy GPU work and increases image quality when possible.
  • Occlusion, which helps developers implement realistic dynamic occlusions so that real-world objects can obscure virtual objects in passthrough.
  • Support for Meta Quest Touch Plus Controller via the OpenXR interaction profile.
  • Compatibility with Meta Core SDK where developers can take advantage of additional features and assets to create immersive experiences.
  • Quest Link support which allows developers to connect to a Windows PC and test their XR experiences on headset while leveraging additional GPU processing capabilities.

Consolidating feature development on OpenXR

Looking ahead, we expect to maintain our current support and feature set for the OculusXR package for supported versions of Unity (Unity 6.x, 2022 LTS), while focusing the development of new features on the OpenXR: Meta package, including features such as:

  • Multiview Per-View Viewports (MVPVV), which allows developers to set multiple viewports and scissors per Viewport. This enables the drivers to skip shader invocations (and rendering work) for screen areas outside of the user’s view.
  • Shared Spatial Anchors, which allow multiple users to place, persist, and synchronize virtual objects in a shared physical space, enabling collaborative and connected mixed reality experiences across devices.

Getting Started with OpenXR

Supported Versions

  • Unity 6000.0.0f1 or newer.
  • OpenXR 1.14 or newer (com.unity.xr.openxr)
  • OpenXR Meta 2.1 or newer (com.unity.xr.meta-openxr)

Starting a new project

To enable the Unity OpenXR: Meta in your project, follow the steps below:

  1. Go to Edit > Project Settings… > XR Plug-in Management.
  2. In the Android tab, under Plug-in Providers, enable OpenXR.
  3. While still in the Project Settings window, go to XR Plug-in Management > OpenXR.
  4. In the Android tab, under Enabled Interaction Profiles, add Oculus Touch Controller Profile.
  5. Under OpenXR Feature Groups, enable the Meta Quest feature group.

To learn more, please refer to our documentation.

Migrating an existing project

  1. Ensure you are using the latest version of Unity 6.
  2. Install OpenXR Plugin: Go to the Unity Package Manager, search for the OpenXR Plugin, and install it.
  3. Configure Your Project Settings: Navigate to Edit > Project Settings > XR Plug-in Management. Select OpenXR for the target platforms you are working on (e.g., Android for Quest).
  4. Update Interaction Profiles: Replace any Oculus-specific interactions with corresponding OpenXR profiles. This typically involves updating your Input Actions and Controller Models.

For more information please refer to the package changelog. Please leave any feature requests and feedback on our product roadmap here.

7 Likes

This is great to read! Establishing OpenXR as the interoperability contract without specific vendor lock-in will allow us developers to much easier port games between devices. I know the pain from the past quite well :slight_smile:

2 Likes

Awesome! Does this mean the Meta SDK (and building blocks) also now can work on other devices? (If they have an OpenXR implementation with the same features)
Or does every manufacturer still need to provide their own occlusion extensions and scripts?

Hey there! Meta Core SDK contains various Quest platform-specific features that other platforms have not yet incorporated, even though these features might be based on OpenXR standards.

1 Like

Hi! How to use Software Dynamic Resolution with OpenXR ? Would this work with HDRP ?
Thank you.

2 Likes

Here’s some documentation on how you can enable software dynamic resolution with Quest platforms. For Quest platforms, we recommend using URP.

I am targeting PCVR with HDRP and I am not using anything Meta related. Is there a way to get dynamic resolution to work ? Or a way to get accurate frame timings ? I have tried to use OpenXRFeature for this but I never managed to do it (Need help retrieving frame timings from OpenXR)

1 Like

Hello! Since in these days a lot of news are being released about Meta features and this OpenXR update, can we have a little bit more infos about the implications on our development with XR Interaction Toolkit vs Meta SDK (building blocks etc.)?

Taking a concrete example, does this means that new features like the recent Camera access of Meta XR Core SDK v74 will be easily available even using your cross-platform XR Interaction Toolkit SDK? Or does it mean that we can now develop cross-platform applications even using the Meta XR SDK?

How do we compare the two toolkits after this update?

When running on Quest 3 build from Unity 6000.0.42f1 with OpenXR 1.14.1 and URP 17.0.4, enabling dynamic resolution results in nauseating screen distortion every time resolution changes at runtime. It’s not shippable. Is this a known issue? This was apparently a known issue in past Unity versions - has it regressed or am I missing some important part of project configuration?

Howdy! I’m building a quest 3 mixed reality application in Unity 6.0.4, using OpenXR 1.14.2 and Unity OpenXR Meta 2.1.
I noticed that the feature for Boundary Visibility can be enabled. However, I get told that this feature is not compatible with my current OpenXR runtime.

Furthermore, when looking at the Unity OpenXR Meta package documentation for 2.1, I can see that the following is missing information in Architecture section:

I’m assuming that this feature is not ready yet? Any information would be excellent.

I have already reported this bug several times to the Meta engineers as it seems to be the issue with their SDK

1 Like

I’ve looked far and wide, but I cannot see parity with how the Oculus XR Plugin provided the OculusUsages class for accessing the thumbrest, triggerTouch, and thumbTouch features from InputDevices. I see this is available via the Input Actions, but I’m wondering where this parity lies for accessing direct input data via the UnityEngine.XR.InputDevice.TryGetFeatureValue method?