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
España
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
España
Suisse
Suomi
Sverige

Latest

Unity 2.5.0 ( December 6, 2024 ):

How to Install VIVE OpenXR Plugin in Unity

Release Notes:

Plugin package name in Unity is VIVE OpenXR Plugin.

Unity6

Section

Release Information

Version: 2.5.0
Unity Engine Version: 2021.3.3f1 or newer
Unity Input System: 1.4.3 is recommended.
Unity OpenXR Plugin: 1.3.1 or 1.6.0 are recommended.
Target Platform: PC Win64, Android arm64
Target Device: VIVE Focus Vision, VIVE XR Elite, VIVE Focus 3, VIVE Pro Series, VIVE Cosmos
Graphics API: DX11, DX12, OpenGLES3, Vulkan
OpenXR Android Loader Version: Khronos openxr_loader_for_android-1.0.34Version: 2.5.0
Unity Engine Version: 2021.3.3f1 or newer
Unity Input System: 1.4.3 is recommended.
Unity OpenXR Plugin: 1.3.1 or 1.6.0 are recommended.
Target Platform: PC Win64, Android arm64
Target Device: VIVE Focus Vision, VIVE XR Elite, VIVE Focus 3, VIVE Pro Series, VIVE Cosmos
Graphics API: DX11, DX12, OpenGLES3, Vulkan
OpenXR Android Loader Version: Khronos openxr_loader_for_android-1.0.34

Changes

AIO

Extension
Engine
  • Adds Direct Preview configurations. The Direct Preview help you to preview an Android application on Focus3/XR Elite/Focus Vision.
  • Supports OpenXR 1.9.1.
  • Provides the Controller and Hand models.

PC

Extension
Engine
  • Adds Direct Preview configurations. The Direct Preview help you to preview an Android application on Focus3/XR Elite/Focus Vision.
  • Supports OpenXR 1.9.1.
  • Provides the Controller and Hand models.

Recommended AIO ROM

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

Focus3 : X

XR Elite/Focus Vision : V

Scene Understanding
XR_MSFT_scene_understanding

V

V

Hand Interaction
XR_HTC_hand_interaction

V

V

V

V

Hand Interaction Ext
XR_EXT_hand_interaction

Focus3 : X

XR Elite/Focus Vision : 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.
  • We provides the VIVE XR Hand Interaction Ext ( XR_EXT_hand_interaction ) AIO version.

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_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

  • XR_HTC_eye_tracker : The EyeGaze.isValid and PupilData.isValid are always true. The Wide value is always zero.
  • Materials are unavailable when using an Universal Render Pipeline (URP) project.
    => VIVE OpenXR Plugin provides materials specifically for Scriptable Render Pipeline (SRP) . To use SRP materials, you can create an SRP project in Unity Hub by selecting the 3D (Built-In Render Pipeline) template.
    Please note that Unity 6 uses URP as the default project template.

Unity 6 Development (Beta)

The VIVE OpenXR Unity Plugin 2.5.0 is experimental for Unity 6 development (version 6000.0.25f1 is verified). Please refer to the feature support table below for details.

Supported Features

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

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

-

Hand Interaction
XR_HTC_hand_interaction

V

V

V

V

Hand Interaction Ext
XR_EXT_hand_interaction

Passthrough
XR_HTC_passthrough

V

V

V

V

Facial Tracking
XR_HTC_facial_tracking

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

-

-

V

Anchor (beta)
XR_HTC_anchor

-

-

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

-

-

V

User Presence
XR_EXT_user_presence

V

Spectator Camera (beta)
XR_MSFT_first_person_observer
XR_MSFT_secondary_view_configuration

Frame Synchronization (beta)
XR_HTC_frame_synchronization

V

Vive Tracker
XR_HTCX_vive_tracker_interaction

V

-

V

-

Known Issues & Solutions

  1. The PoseState isTracked is always false.
  2. When lost tracking, the PoseState trackingState is Position + Rotation.
  3. XR_HTC_hand_interaction : The pose is abnormal when the tracking origin is Floor in PC mode.
  4. XR_HTC_passthrough : The HDR feature is default enabled in PC mode and causes Planar and Projected Passthrough unavailable.
    => Workaround: Disable the HDR.
  5. Vision is limited.
    => 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 displaySubsystems = new List();
            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;
        }
    }