This page has been translated automatically.
Video Tutorials
Interface
Essentials
Advanced
How To
Basics
Rendering
Professional (SIM)
UnigineEditor
Interface Overview
Assets Workflow
Version Control
Settings and Preferences
Working With Projects
Adjusting Node Parameters
Setting Up Materials
Setting Up Properties
Lighting
Sandworm
Using Editor Tools for Specific Tasks
Extending Editor Functionality
Built-in Node Types
Nodes
Objects
Effects
Decals
Light Sources
Geodetics
World Nodes
Sound Objects
Pathfinding Objects
Players
Programming
Fundamentals
Setting Up Development Environment
Usage Examples
C++
C#
UnigineScript
UUSL (Unified UNIGINE Shader Language)
Plugins
File Formats
Materials and Shaders
Rebuilding the Engine Tools
GUI
Double Precision Coordinates
API
Animations-Related Classes
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
VR-Related Classes
Content Creation
Content Optimization
Materials
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Tutorials
Warning! This version of documentation is OUTDATED, as it describes an older SDK version! Please switch to the documentation for the latest SDK version.
Warning! This version of documentation describes an old SDK version which is no longer supported! Please upgrade to the latest SDK version.

VR & XR Development

XR (extended reality), is a general term for any enhanced technology combining the real and digital worlds to create new kinds of interactivity and perception. Essentially, this term is an umbrella under which the following types of applications:

  • Virtual Reality (VR): is an immersive self-contained environment that makes the user feel inside a virtual or digitally reproduced real 3D world.
  • Mixed Reality (MR): user's real-world environment combined with the application's virtual environment with an ability to interact with each other.
  • Augmented Reality (AR): application's virtual content is projected onto physical glass or a display over a view of the real world.
    Notice
    Development of AR applications for mobile platforms is not currently supported.

These technologies provide new ways to train, educate, entertain, and collaborate.

UNIGINE offers built-in functionality for development of Virtual Reality and Mixed Reality applications. It enables you to implement logic for various VR devices through a single API interface without using additional plugins.

Warning
VR plugins (OpenVR, Varjo, Oculus) that implement similar functionality are considered deprecated and will be removed in the next SDK release.

See Also#

VR System in UNIGINE#

The built-in VR system provides integration of OpenVR and Varjo.

OpenVR Integration#

OpenVR is a comprehensive VR SDK (API and runtime) that allows access to VR hardware from various vendors without requiring that applications have specific knowledge of the hardware they are targeting.

So, thanks to OpenVR integration, UNIGINE supports VR development for a wide range of VR devices, including the Oculus Rift, HTC Vive, and other OpenVR-compatible devices. The full list of supported devices is given below.

Varjo Integration and Supported Features#

Image Courtesy of Varjo.

Varjo's industrial-grade headsets with eye-tracking and mixed reality capabilities allow you to create VR and MR applications. With Mixed Reality, you can combine the real-world view from front-facing cameras mounted on the headset with the VR image.

Moreover, there is hand-tracking in VR available for Varjo VR and XR headsets through the Ultraleap integration plugin. It provides finger fidelity, two-hand performance, higher tracking robustness, and a lot of other improvements.

The following table lists Varjo native features that are supported by UNIGINE VR system:

Varjo Features VR System
Supported graphics APIs DX11, DX12, Vulkan
Human-eye resolution Supported
Eye tracking Supported
Eye tracking parameters Supported
Eye camera datastream Not supported
Mixed reality (MR) Supported
MR environment reflections Supported
MR post-process shaders Not supported
MR datastream Supported
Chroma keying Supported
Varjo Markers Supported
Depth buffer submission Supported
Velocity buffer submission Supported
Multi-app support Not supported
Support for multiple layers Supported
Occlusion mask Supported
Instanced rendering Not supported
Foveated rendering Supported
SLI-compatible Not supported

Supported Platforms#

UNIGINE enables development of VR applications for diffent VR platforms.

Oculus VR#

With UNIGINE VR system, you can implement projects for Oculus HMDs through the integration of OpenVR functionality.

For the correct work, you need to install Oculus Rift PC Runtime.

For performance profiling, you can use the Oculus PerfHud tool. It displays performance summary, including frame rate of the application and the unused hardware performance available, latency timing, application render timing, information about the HMD version, and other. To use Oculus PerfHud with UNIGINE, follow the instructions in Oculus documentation.

VR Template provides the models of the Oculus Touch and Oculus Quest controllers that are compatible with Oculus HMDs only.

SteamVR#

OpenVR integration allows you to develop projects for the SteamVR platform. It is not tied to a particular hardware: such projects can be used with any VR devices that support SteamVR.

When developing for SteamVR, first you should download and install Steam and then launch SteamVR.

Notice
If you install one of the HTC Vive HMDs, the SteamVR will be set automatically on the HMD's installation.

For performance profiling, you can use the SteamVR Frame Timing tool.

VR Template provides the models of the following SteamVR-compatible controllers: HTC Vive, HTC Vive Pro, and HTC Vive Cosmos.

Mixed Reality Development#

Thanks to Varjo integration, you can implement Mixed Reality applications to be run with Varjo HMDs.

UNIGINE supports Varjo SDK 3.10.0 with chroma keying, so you can change environments quickly, along with depth testing enabling you to composite and sort real and virtual worlds together by utilizing the depth-sensing capabilities of XR-3 and XR-1. Tracking of static or dynamic real-world objects using the video pass-through cameras via markers is also available now. With Alpha Blend capabilities you can blend your virtual environment with the real world enabling efficient collaboration in both.

You can also use object markers to track static or dynamic objects in the user environment in both XR and VR applications. VR apps without video pass-through rendering can use these markers to align virtual objects in the scene with physical objects in the real world.

Check out the C++ VR Sample showcasing Mixed Reality features.

To develop an application, you need to install Varjo Base and SteamVR.

Mixed Reality management is performed via the VRMixedReality and VRMarkerObject classes of UNIGINE API.

Supported Devices#

The following VR device models are supported:

  • Oculus Rift / Rift S / Quest / Quest 2 (with Oculus Link cable / Oculus Link wireless)
  • HTC Vive / Vive Pr / Focus / Cosmos
  • Varjo VR-1 / VR-2 / VR-3 / XR-3 (with extended mixed reality support)
  • Windows Mixed Reality (WMR)-compatible
  • OpenVR-compatible
Notice
The list above includes devices that we test on a regular basis, so the range of supported devices may be wider.

Supported Graphics APIs#

The following graphics APIs are supported out of the box:

  • DirectX 11
  • DirectX 12
  • Vulkan
Notice
For OpenGL API support, you will have to use the deprecated VR plugins.

Initialization#

By default, VR is not initialized. To run the engine with VR, you need to specify the -vr_app command-line option on the application start-up.

  • For OpenVR:
    Shell commands
    -vr_app openvr
  • For Varjo:
    Shell commands
    -vr_app varjo
Notice
You cannot launch the VR plugins (OpenVR, Varjo, Oculus) when the built-in VR is initialized, as it overrides the plugin's functionality. If you try to add a VR plugin after VR initialization, you will get an error message.

VR Input#

UNIGINE VR input system provides access to a wide range of VR devices: you can manage input from VR controllers, head-mounted displays (HMDs), base stations, and trackers.

For more details on types of VR devices and their examples, check the article on VR Input System.

VR Template#

UNIGINE provides a VR Template that is used to facilitate the creation of a custom application for VR. It contains a set of 3D models of popular VR controllers and the implementation of basic mechanics such as grabbing and throwing objects, pressing buttons, opening/closing drawers, and a lot more.

The template is created using the Component System, so you can easily extend its functionality.

Refer to the Getting Started with VR section to learn how to use the template for C++/C# VR project development.

Basic Workflow on Using VR#

Unlike other 3D applications, developing a VR application is more complex: you should set up a VR environment, add interactive elements, process user input from various VR devices, and so on.

The general workflow of the VR application development in UNIGINE is the following:

  1. Set up your UNIGINE project for VR development:

    1. Set up a VR device (check the instructions provided by the vendor, if necessary).
    2. Configure the project to use the appropriate VR mode. You can perform it via SDK Browser for C++/C# projects or in UnigineEditor for C# projects, depending on your preferred method of running your application.
    3. Initialize VR.
  2. Create the VR environment:

    • Create a 3D environment for your VR project by using 3rd-party 3D modeling and level design tools and UnigineEditor.
    • Extend the VR environment with animations, sounds, videos, and other interactive elements.
  3. Make the VR environment more interactive:

    • Implement components to extend the functionality of objects in the environment and process user input.
    • Use UNIGINE's VR Template (available for C++ and C# APIs) that offers a basic set of VR components and allows users to move around and interact with objects in the environment.
  4. Debug and profile your VR application. Use the VR platform-specific and UNIGINE built-in profiling tools to improve performance.
  5. Build and deploy your VR application.
Last update: 2024-04-19
Build: ()