How does OpenVR, SteamVR and Unity3D work together?

Monku picture Monku · Jun 4, 2017 · Viewed 8.8k times · Source

I am trying to understand the VR platform stack of Vive, and how it's games are developed. I am struggling to understand where exactly does openVR, steamVR and Unity fit into picture.

My understanding so far has been that:

openVR - Hardware independent layer providing APIs for peripheral access. 
         That is it can provide access to either Oculus or Vive hardware via 
         a defined interface.

SteamVR - Provides access to hardware to games developed either in unity or
          unreal.
Unity3D - A game engine to develop games.

If anyone can correct me, I will be much grateful. Or if my understanding is correct, then why can't games being developed in unity 3D access hardware directly via openVR.

Answer

Muhammad Faizan Khan picture Muhammad Faizan Khan · Jun 5, 2017

OpenVR is an API and runtime that allows access to VR hardware from multiple vendors without requiring that applications have specific knowledge of the hardware they are targeting (ref1), SteamVR is the customer facing name that we use for what users actually use and install (for details check this video: Using Unity at Valve)

Also Check to see that can you use the Vive with OpenVR without Steam ??.

Lets finally look all these terms, thanks to Reddit post:

How a Game Appears on your Head Mounted Display(HMD):

A game renders an image, sends it to it's corresponding runtime. The runtime then renders it to the HMD:

Rendered Image using the :

[OVR/OpenVR] SDK -> [Oculus/SteamVR] Runtime -> [Rift/Vive]

SDKs:

SDKs are used to build the games. A game can either implement OVR or OpenVR or both. This means that the game has access to native functionality in it's corresponding runtime. SDKs do not handle async timewarp or reprojection, those are handled by the runtime!

OVR: Made by Oculus for the Oculus Rift. Current version (14th May 2016) is 1.3.1 and can access all features of the Oculus runtime.

OpenVR made by Valve and supports Vive and Rift via the SteamVR runtime

Sidenote to SDK's and Unity games: Unity 5.3 currently has optimizations for VR in their native mode. The native mode supports Rift, Gear and PSVR, but not SteamVR. A game compiled with Unity 5.3 can use those optimzations with the Oculus SDK but not the OpenVR SDK. The OpenVR SDK has it's own optimizations, which may or may not result in similar performance. However, the upcoming Unity 5.4 will support SteamVR natively and performance should be more or less identical. Please note: this is Unity specific and other engines might have similar or different optimizations for some or all headsets.

Runtimes Oculus Runtime responsible for async timewarp and handles device detection, display, etc. It (the runtime service) needs to be running for Oculus Home to launch

SteamVR Runtime responsible for reprojection and supports Rift and Vive

Software Distribution Platforms

Oculus Home needs to be running for the Rift to work. By default only supports apps from the store (checkbox in the settings of the 2d desktop client to enable other sources). It downloads games and runs them. It also handles the Universal Menu on the Xbox button

Steam/SteamVR technically does not need to run when launching OpenVR games, but highly recommended (room setup and config is pulled from there). Also handles overlay menu on the Xbox button, or when running on the Rift, it launches by pressing the select/start button in the Oculus Universal Menu

Finally worth reading.