Unity

VITURE Unity XR SDK Documentation

Overview

The VITURE Unity XR SDK enables developers to create immersive XR experiences for VITURE devices.

Key features include:

6DoF Tracking: Full 6 degrees of freedom head tracking for immersive experiences.
Hand Tracking: High precision 26-joint skeletal tracking with built-in gesture recognition.
Unity XR Integration: Seamlessly integrated with Unity's XR framework and compatible with XR Interaction Toolkit (XRI), XR Hands, and other Unity tools.

Build immersive XR apps, games, or enterprise solutions using existing assets and workflows you're already familiar with.

Requirements

Development Environment:

Unity 6000.0 or later
Android platform

Hardware:

VITURE Pro Neckband with compatible XR glasses (see supported models below)

Supported Glasses:

VITURE Luma Ultra: 6DoF tracking
VITURE Luma / Luma Pro: 3DoF tracking
VITURE Pro: 3DoF tracking
VITURE One / One Lite: 3DoF tracking

Getting Started

By following this quick start guide, you'll build an interactive demo scene showcasing different types of hand interactions on VITURE devices.

Unity's XR Interaction Toolkit (XRI) already provides a comprehensive hands interaction demo with three major interactors: near-field direct interactor and poke interactor for close-range objects, plus far-field ray interactor for distant targets. The original sample scene uses XRI's default input actions, we'll replace those with VITURE-specific inputs to make all interactors work seamlessly with VITURE hand tracking.

getting-started

Prerequisites

Before getting started, ensure you have downloaded the VITURE Unity XR SDK (com.viture.xr) and have the following tools installed:

Unity Hub - Latest version
Unity Editor 6000.0+ - Any version 6000.0 or higher
Android Build Support - Install this module through Unity Hub

Project Setup

Create a new Unity project using the Universal 3D template. While URP isn't mandatory, we highly recommend it for all VITURE XR projects.

create-project

After the project is created, navigate to File > Build Profiles and switch the platform to Android.

create-project

Extract the VITURE Unity XR SDK (com.viture.xr-x.x.x.zip) and copy the com.viture.xr folder into your project's Packages directory.

packages-directory

Go to Edit > Project Settings > XR Plug-in Management and enable VITURE.

plugin-management

Navigate to Edit > Project Settings -> Player -> Other Settings -> Rendering and set OpenGLES3 as the only Graphics API. Vulkan support is planned for future releases.

graphics-api

Next, go to Edit -> Project Settings -> Player -> Other Settings -> Identification and set Minimum API Level to Android 13.0 (API level 33).

minimum-api-level

Finally, navigate to Edit -> Project Settings -> Player -> Other Settings -> Configuration and set Active Input Handling to Input System Package (New). Unity will prompt to restart—click Apply to proceed.

active-input-handling

Your project is now configured to VITURE XR development. Next, we'll import the sample assets and build an interactive demo scene!

Import Required Samples

Navigate to Window > Package Manager > Unity Registry and install XR Interaction Toolkit and XR Hands.

install-packages

From the XR Interaction Toolkit package, import the Starter Assets and Hands Interaction Demo samples.

xri-samples

From the XR Hands package, import the HandVisualizer sample.

hand-sample

Finally, go to Window > Package Manager > In Project > VITURE XR Plugin and import the Starter Assets sample.

viture-sample

Configure Demo Scene for VITURE Input

Go to Edit > Project Settings > Input System Package and set Project-wide Actions to Viture Input Actions.

input-actions

Navigate to Assets > Samples > XR Interaction Toolkit > 3.0.8 > Hands Interaction Demo and open the demo scene. This scene uses default XRI input actions that we need to replace with VITURE-specific ones.

hands-demo-scene

Delete the existing XR Origin (XR Rig) from the scene hierarchy. Replace it by dragging XR Origin (Viture) from Assets > Samples > VITURE XR Plugin > 0.1.0 > Starter Assets > Prefabs into the scene.

viture-xr-origin

The hand materials need to be converted from Built-in Render Pipeline to URP for proper rendering. Navigate to Assets > Samples > XR Hands > 1.5.1 > HandVisualizer > Materials, select all materials, then go to Edit > Rendering > Materials > Convert Selected Built-in Materials to URP.

convert-materials

Drag the Viture Hand Menu prefab from Assets > Samples > VITURE XR Plugin > 0.1.0 > Starter Assets > Prefabs into your scene. When prompted, click Import TMP Essentials to add Unity's advanced text rendering system.

import-tmp

The Viture Hand Menu provides essential system functions—Recenter (resets XR coordinate origin) and Home (exits to launcher)—that we highly recommend including in all VITURE XR applications.

viture-hand-menu

The default table position is too high for comfortable interaction. Select both TableHandle and Table in the Scene Hierarchy and move them lower and forward for better accessibility.

move-table

The default Directional Light is a bit dim for the demo. Delete it and create a new Directional Light to brighten up the scene.

For optimal performance, we recommend disabling shadows in your URP settings. Navigate to Assets > Settings > Mobile_RPAsset and disable the Cast Shadows option.

disable-shadow

Build APK

Go to File > Build Profiles > Scene List and click Add Open Scenes to include only the HandsDemoScene in your build.

scene-list

Click Build, create a Build folder, name your APK, and click Save to start the build process.

build-apk

Congratulations! 🎉 You've built your first VITURE XR application.

Deploy to Device

First, ensure ADB (Android Debug Bridge) is installed on your computer.

Enable Developer Mode by opening Settings and navigating to About Neckband > Build number. Tap the Build number area 7 times to unlock Developer Mode.

tap-build-number

Navigate to System > Developer options and enable Wireless debugging. Click Allow when prompted.

wireless-debugging

Go to System > Developer options > Wireless debugging and tap Pair device with pairing code to display the pairing panel.

pair-device

Pair and connect using ADB commands in your terminal, and then install your APK:

# Pair with the device (one-time setup)
adb pair <IP_ADDRESS>:<PAIRING_PORT>
# Enter the pairing code when prompted
# Connect to the device
adb connect <IP_ADDRESS>:<PORT>
# Install your APK
adb install path/to/your/app.apk

Once installed successfully, launch SpaceWalker on your VITURE neckband and find your app to enter the demo scene!

VitureXR API

VitureXR is the SDK's central hub providing static access to VITURE XR functionality. All APIs are organized into logical categories for easy discovery and use.

Glasses

Provides information about connected VITURE glasses.

GetGlassesModel()

Gets the model of the currently connected VITURE glasses.

Returns: Connected model, or VitureGlassesModel.Unknown if no glasses are connected.

Supported Models:

VitureGlassesModel.One - Includes VITURE One and VITURE One Lite glasses.
VitureGlassesModel.Pro - VITURE Pro glasses.
VitureGlassesModel.Luma - Includes VITURE Luma and VITURE Luma Pro glasses.
VitureGlassesModel.LumaUltra - VITURE Luma Ultra glasses.

Head Tracking

Controls head tracking functionality and provides device capability information.

GetHeadTrackingCapability()

Gets the head tracking capability of the currently connected glasses.

Returns: Head tracking capability based on the connected glasses model:

VitureHeadTrackingCapability.ThreeDoF - 3 degrees of freedom (rotation only)
VitureHeadTrackingCapability.SixDoF - Full 6 degrees of freedom (position + rotation)

ResetOrigin()

Resets the head tracking origin to the current head position and orientation. This recalibrates the tracking reference origin.

Hand Tracking

Controls the hand tracking subsystem lifecycle. Unity XR Hands package must be installed to use this feature.

Start()

Starts the VITURE XR hand subsystem.

Stop()

Stops the VITURE XR hand subsystem.

Rendering

Advanced rendering controls for performance optimization.

SetHalfFrameRate(bool enabled)

Enables or disables half frame rate rendering for performance optimization. When enabled, reduces rendering frame rate by half (e.g., 90fps to 45fps). Animation will appear less smooth.

Parameters:

enabled - True to enable half frame rate, false to disable.

SetTimeWarpOnlyMode(bool enabled)

Enables or disables time warp only rendering mode. When enabled, stops Unity rendering and uses only time warp to display the last rendered frame with head tracking compensation. This is only for testing purposes.

Parameters:

enabled - True to enable time warp only mode, false to disable.

Samples

Starter Assets

This sample provides pre-configured assets to streamline VITURE XR project setup. We advise importing this sample to accelerate your development workflow. Make sure to install all required dependencies and samples for everything to work properly.

Assets included:

Viture Input Actions

Input Action Asset containing VITURE-specific hand tracking actions and gestures, ready to use with XR Interaction Toolkit (XRI).

viture-input-actions

XR Origin (Viture)

Pre-configured XR Origin prefab with main camera and hand tracking components. Includes Near-Far Interactor and Poke Interactor already wired up with VITURE input actions.

xr-origin-prefab

Viture Hand Menu

System menu prefab that activates when you face your palm toward yourself and perform a long pinch gesture. Provides essential functions:

Recenter - Resets XR coordinate origin
Home - Exits to launcher

Add this to let users invoke system-level controls in your application.

Recenter Indicator

Circular progress bar prefab that visualizes coordinate reset countdown. Automatically integrated with the Viture Hand Menu—no manual setup required.

Two Hand Transform Cube

Demonstration prefab showcasing the TwoHandTransform script for intuitive two-handed object manipulation. Pinch with both hands simultaneously to translate, rotate, and scale the target object using natural hand gestures.

Hand State Demo

hand-state-demo

Beyond standard hand tracking, the VITURE SDK provides additional data including built-in gestures and palm facing states. This sample demonstrates how to access this extra data through Input Actions using both direct reading and callback methods.

The demo features a real-time UI displaying both hands' tracking states, gestures, and palm orientations. Reference the included script to see how to retrieve hand state data in your own code.

Roadmap

Recording (Oct, 2025)

Image Tracking (Dec, 2025)

Multiplayer Boilerplate Sample (Mar, 2026)

FAQ

Does the SDK support OpenXR?

A: Our SDK is currently built on Unity's XR architecture. OpenXR compatibility is planned for future development.

Support

For questions and technical support, please email zhangyuchen@viture.com.