Unity’s new OpenXR plug-in enables you to target a broad range of AR/VR devices. As of today, it’s available as a Preview package for Unity 2020.2, and we’re inviting you to share your feedback.
What is OpenXR?
OpenXR is an open standard provided by Khronos that aims to simplify AR/VR development by allowing developers to seamlessly target a wide range of AR/VR devices. Unity is a proud member of the Khronos group and an active contributor to the OpenXR standard. We’re excited to share our progress with the OpenXR plug-in now in Preview.
Value to developers
Our mission is to make it as easy as possible for developers to take their content to the platforms they want. With Unity’s OpenXR plug-in, developers can target any conformant OpenXR device/runtime. As more vendors adopt OpenXR, developers will be able to reach a wider range of devices.
How OpenXR fits into Unity’s XR Tech Stack
Today, Unity delivers full support of AR/VR platforms and their native APIs via the existing plug-ins in XR Plug-in Management. In the same fashion, the OpenXR plug-in is implemented as a part of our XR plug-in framework (XR SDK). This means that developers can continue using Unity’s suite of XR workflows and frameworks (AR Foundation, XR Interaction Toolkit, Unity MARS) for platforms that adopt OpenXR, as well as for any platforms that may choose not to adopt it.
Getting Started
To enable OpenXR in your project, follow the steps below:
- Install the OpenXR Plugin package from Package Manager (use the Advanced drop-down to enable preview packages).
- Open the Project Settings window (menu: Edit > Project Settings), and select XR Plug-in Management.
- Enable the OpenXR option and any Feature Sets for the platforms you intend to target.
- In the OpenXR Features tab, select the interaction profile of the device you are testing with.
- In the OpenXR tab, make sure the current active runtime is set to the hardware you are testing with.
More information can be found in our documentation. These should be familiar workflows that are similar to enabling other AR/VR platforms in your projects.
OpenXR Features
Developers can select feature sets for supported platforms, which enable the set of OpenXR features needed for that platform. Note that if you’re developing for HoloLens 2, you will need to download Microsoft’s new OpenXR features package. Additional configuration of OpenXR features can be made in the OpenXR Features window.
Unity Input System
Because OpenXR only supports action-based input, Unity’s OpenXR plug-in makes exclusive use of our Input System for input and interactions. Make sure you have a good understanding of the Input System, including action-based input and device layout bindings. You can import our OpenXR controller sample in the OpenXR plug-in package via Package Manager, or reference this documentation and webinar to learn more about the Input System.
OpenXR Interaction Profiles
Interaction Profiles are controller layouts that users can bind to their actions in Unity’s Input System. For example, the Windows Mixed Reality feature set includes the Microsoft Motion Controller Profile to support Windows Mixed Reality controllers. At least one Interaction Profile must be selected in the OpenXR tab. Several interaction profiles are included with Unity’s OpenXR plug-in, and more can be added via the Features tab.
XR Interaction Toolkit
Developers can use the XR Interaction Toolkit with the OpenXR plug-in. If your project is using a platform-specific toolkit (e.g. MRTK, Oculus Integration), we don’t recommend enabling OpenXR yet, since many vendors are still in the process of adding support for OpenXR. Please refer to the vendors directly on the latest status of their toolkits and integration with OpenXR.
Supported platforms
Unity’s OpenXR plug-in should work with any device that supports conformant PC-based OpenXR runtimes. For this Preview release, Windows Mixed Reality and HoloLens 2 have been fully tested and are officially supported. See here for currently supported features specific to HoloLens 2.
Deploying directly to Oculus Quest/Quest 2 is not yet supported, but is on our roadmap. We plan to expand the number of supported platforms in the future as more of our platform partners adopt the OpenXR standard. However, given the unbounded combinations of possible hardware/software configurations, Unity is unable to test or guarantee that all configurations will work optimally. To help the community as a whole, Unity will continue to submit any runtime issues, and contribute conformance tests and specification changes to the Khronos working group.
How you can help
While you are welcome to use OpenXR in your projects, please note that the OpenXR plug-in is in Preview and should be considered a work in progress until it’s verified. During the preview period, we are looking for feedback from a broader range of customers to ensure that the feature set, workflows, performance and stability meet your needs.
If you post OpenXR-related questions outside of this thread, please make sure to use the right tags so our team and platform partners have proper visibility. For example, if you’re using OpenXR for HoloLens 2, include the tags “OpenXR” and “HoloLens”.
Known issues
-
Deploying directly to Oculus Quest/Quest 2 will be released at a later date.
-
A black box appears in the upper-right quadrant when running in Oculus desktop. We will release an updated Oculus runtime to fix this, but in the meantime, you can turn off occlusion mesh for the built-in renderer.
-
Eye Tracking Interaction device layout does not appear in the Unity Input System menus.
-
Importing “Meshing Subsystem Feature Sample” will show an error message in the console. Please restart the editor after import to correct the issue.
-
See here for known issues specific to Windows Mixed Reality and HoloLens 2.
If you experience an issue, please file a bug report. When you do, please also check the log file, where it will indicate whether Unity supports the combination of OpenXR runtimes and features that you are using. Additional guidance will be provided in the log file.
We’re excited about the progress made so far, and development continues. Please send us feedback via this quick survey, or post a question in this thread.