Please Select Your Location
Australia
Österreich
België
Canada
Canada - Français
中国
Česká republika
Denmark
Deutschland
France
HongKong
Iceland
Ireland
Italia
日本
Korea
Latvija
Lietuva
Lëtzebuerg
Malta
المملكة العربية السعودية (Arabic)
Nederland
New Zealand
Norge
Polska
Portugal
Russia
Saudi Arabia
Southeast Asia
Suisse
Suomi
Sverige
台灣
Ukraine
United Kingdom
United States
Please Select Your Location
België
Česká republika
Denmark
Iceland
Ireland
Italia
Latvija
Lietuva
Lëtzebuerg
Malta
Nederland
Norge
Polska
Portugal
Suisse
Suomi
Sverige

Latest

Unity 2.5.1 ( January 8, 2025 ):

How to Install VIVE OpenXR Plugin in Unity

Release Notes:

Plugin package name in Unity is VIVE OpenXR Plugin.

Section

Release Information

Version: 2.5.1
Unity Engine Version: 2021.3.9f1 or newer
Unity Input System: 1.7.0 is recommended.
Unity OpenXR Plugin: 1.12.1 is recommended.
XR Interaction Toolkit: 2.5.4 is recommended.
Target Platform: PC Win64, Android arm64
Target Device: VIVE Focus Vision, VIVE XR Elite, VIVE Focus3, VIVE Pro Series, VIVE Cosmos
Graphics API: DX11, DX12, OpenGLES3, Vulkan
OpenXR Android Loader Version: Khronos openxr_loader_for_android-1.0.34

Changes

ROM

  • Fixed: The AP developed in Unity 2022 with URP crashed.
  • Fixed: The Android application’s vision becomes limited after upgrading com.unity.xr.openxr to version 1.12.1 or later.
  • Changed: The valid states of Eye Tracking
  • When the eyes are closed or not detected, the "Openness" value will be set to 0.
  • When the eyes are opened, the "Squeeze" value will be set to 0.
  • When the eyes are closed or not detected, the "Gaze" data will be invalid.
  • When the eyes are closed or not detected, the "Pupil" data will be invalid.
  • When the eyes are not detected, the "Geometric" data will be invalid.

Plugin

Recommended AIO ROM and streaming software version

Supported Extensions

Extensions

PC Streaming
(Focus3/XR Elite/Focus Vision)

PC Vive Cosmos

PC Vive Pro series

AIO
Focus3/XR Elite/Focus Vision

Hand Tracking
XR_EXT_hand_tracking

V

V

V

V

VIVE Focus3 / XR Elite Controller
XR_HTC_vive_focus3_controller_interaction

V

-

-

V

VIVE Cosmos Controller
XR_HTC_vive_cosmos_controller_interaction

V※

V

-

-

Eye Gaze
XR_EXT_eye_gaze_interaction

V

V

V

V

Composition Layer
XR_KHR_composition_layer_cylinder
XR_KHR_composition_layer_color_scale_bias

V

Composition Layer Extra Settings (beta)
XR_HTC_composition_layer_extra_settings

V

Scene Understanding
XR_MSFT_scene_understanding

V

V

HTC Hand Interaction
XR_HTC_hand_interaction

V

V

V

V

EXT Hand Interaction
XR_EXT_hand_interaction

V

V

Passthrough
XR_HTC_passthrough

V

V

V

V

Facial Tracking
XR_HTC_facial_tracking

V

V

V

V

Foveation
XR_HTC_foveation

V

Display Refresh Rate
XR_FB_display_refresh_rate

V

VIVE Wrist Tracker
XR_HTC_vive_wrist_tracker_interaction

V※

V

VIVE XR Tracker (beta)
XR_HTC_vive_xr_tracker_interaction
XR_HTC_path_enumeration

V

V

V

V

Plane Detection (beta)
XR_EXT_plane_detection

Focus3 : X

XR Elite/Focus Vision : V

Anchor (beta)
XR_HTC_anchor

Focus3 : X

XR Elite/Focus Vision : V

Advanced Eye Tracking (beta)
XR_HTC_eye_tracker

V

V

V

Passthrough Configuration (beta)
XR_HTC_passthrough_configuration

V

Persisted Anchor
XR_EXT_future
XR_HTC_anchor_persistant

Focus3 : X

XR Elite/Focus Vision : V

User Presence
XR_EXT_user_presence

V

Spectator Camera (beta)
XR_MSFT_first_person_observer
XR_MSFT_secondary_view_configuration

Focus3 : X

XR Elite/Focus Vision : V

Frame Synchronization (beta)
XR_HTC_frame_synchronization

V

Vive Tracker
XR_HTCX_vive_tracker_interaction

V

V

V

※Correspondent VIVE Streaming settings required.

Feature Dependency

ROM Dependency

Others

  • The "Spectator Camera" depends on Unity 2022 or newer.

Profile Dependency

The VIVE OpenXR Plugin provides Profiles that adhere to the OpenXR Specification , located at VIVE OpenXR Plugin > Runtime > Profiles .
These Profiles rely on the OpenXR extensions configured in Project Settings > XR Plug-in Management > OpenXR . To utilize these Profiles , you must enable the corresponding relative extensions as listed in the table below.

Profile

Extension

XR_EXT_hand_tracking VIVE XR Hand Tracking
XR_EXT_user_presence VIVE XR User Presence
XR_HTC_composition_layer_extra_settings VIVE XR Composition Layer (Extra Settings)
XR_HTC_eye_tracker VIVE XR Eye Tracker
XR_HTC_facial_tracking VIVE XR Facial Tracking
XR_HTC_passthrough VIVE XR Composition Layer
VIVE XR Passthrough
XR_HTC_passthrough_configuration VIVE XR Passthrough
XR_HTC_path_enumeration VIVE XR Path Enumeration

Toolkits

Toolkits

PC Streaming
(Focus3/XR Elite/Focus Vision)

PC
Vive Cosmos
Vive Pro series

AIO
Focus3/XR Elite/Focus Vision

Custom Gesture

V

V

Realistic Hand Interaction

V

V

Known Issues & Solutions

  • XR_HTC_eye_tracker : The Wide value is always zero.
  • VIVE OpenXR Plugin provides materials specifically for Scriptable Render Pipeline (SRP) . You can convert the material to URP from menu Edit > Rendering > Materials > Convert Selected Built-in Materials to URP . Please note that Unity 6 uses URP as the default project template.
  • The PoseState isTracked is always false.
  • XR_HTC_hand_interaction : The pose is abnormal when the tracking origin is Floor in PC mode.
  • The Spectator cannot work on Unity OpenXR Plugin 1.13.x .
  • When using the Unity OpenXR Plugin version 1.12.1 with the Vulkan Graphics API, UGUI elements may occasionally flicker after switching between applications.
    => Workaround: Upgrade to OpenXR Plugin 1.13.0 or newer version.
  • XR_HTC_passthrough : The HDR feature is default enabled in PC mode and causes Planar and Projected Passthrough unavailable.
    => Workaround: Disable the HDR.
  • The Android application’s vision becomes limited after upgrading com.unity.xr.openxr to version 1.12.1 or later.
    => Workaround: Set XRSettings.occlusionMaskScale to 0.
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.XR;  
    public class RemoveRenderMask : MonoBehaviour
    {
        private void OnEnable()
        {
            StartCoroutine(RemoveOcclusionMask());
        }  
        IEnumerator RemoveOcclusionMask()
        {
            // Find DisplaySubsystem
            XRDisplaySubsystem display = null;
            List<XRDisplaySubsystem> displaySubsystems = new List<XRDisplaySubsystem>();
            do {
                SubsystemManager.GetSubsystems(displaySubsystems);
                foreach (var d in displaySubsystems)
                {
                    if (d.running)
                    {
                        display = d;
                        break;
                    }
                }
                yield return null;
            } while (display == null);  
            Debug.Log("RemoveOcclusionMask XRSettings.occlusionMaskScale = 0");
            XRSettings.occlusionMaskScale = 0;
            XRSettings.useOcclusionMesh = false;
        }
    }