Difference between revisions of "Developer Resource"

From Virtual Reality, Augmented Reality Wiki
Jump to: navigation, search
(App Stores)
Line 31: Line 31:
  
 
*'''[[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.
 
*'''[[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.
 +
 +
===Example===
 +
[[Project Cars]] on Steam supports both [[OpenVR]] and [[OVR]]. The Oculus Home version supports only OVR as of today.
 +
 +
#Project Cars on Home + Rift -> will run natively
 +
#Project Cars on Steam + Vive -> will run natively
 +
#Project Cars on Steam + Rift + launched as Rift app -> will run natively
 +
#Project Cars on Home + Vive -> won't run
 +
#Project Cars on Steam + Rift + launched as SteamVR app -> will run via SteamVR
  
 
==Wrappers and Injectors==
 
==Wrappers and Injectors==

Revision as of 03:40, 19 May 2016

Information icon1.png This page is a stub, please expand it if you have more information.

SDKs

SDKs or Software Development Kits are used to build VR apps. An app can either implement OVR or OpenVR or both. This means that the app has access to native functionality in it's corresponding runtime. SDKs do not handle asynchronous timewarp or reprojection, those are handled by the 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 VR and PSVR, but not SteamVR. A game compiled with Unity 5.3 can use those optimizations 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

Runtimes are

If you launch a game on Steam that supports Rift natively (meaning, it has been compiled against the OVR SDK), you will get asynchronous timewarp and it will run exactly like the game from Oculus Home. It won't use the the SteamVR Runtime, it will use the Oculus Runtime. Only downside is that launching the game is more difficult.

If you buy a game that is compiled against the OpenVR SDK, then it can run on Vive and Rift. However, running on Rift uses both runtimes:

Rendered Image using the OpenVR SDK -> SteamVR Runtime -> Oculus Runtime -> Rift

The Oculus Runtime effectively thinks you are playing a game called "SteamVR", but the content of the "game" is actually the image that the SteamVR runtime got from the OpenVR compiled game. This seems to work rather well and personally I have not noticed any additional latency. In theory you would even get Asynchronous Timewarp, but that would only happen if SteamVR itself isn't responding in time. If an OpenVR game stalls completely, the SteamVR runtime will throw you back into the loading construct and continues to render at 90fps. Since the SteamVR runtime has this fail safe mechanism and all the Oculus Runtime sees is "SteamVR", it will most likely never trigger Asynchronous Timewarp.

App Stores

App Stores are distribution platforms for software.

  • Oculus Home needs to be running for the Rift to work. By default only supports apps from the Oculus 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.

Example

Project Cars on Steam supports both OpenVR and OVR. The Oculus Home version supports only OVR as of today.

  1. Project Cars on Home + Rift -> will run natively
  2. Project Cars on Steam + Vive -> will run natively
  3. Project Cars on Steam + Rift + launched as Rift app -> will run natively
  4. Project Cars on Home + Vive -> won't run
  5. Project Cars on Steam + Rift + launched as SteamVR app -> will run via SteamVR

Wrappers and Injectors

Oculus Rift apps, or better said apps compiled with the OVR dlls do not render to the HMD directly. They render their images and send them to the runtime. The interface for that are the dlls. Wrappers replace the content of the dlls with functions that are named identically, but redirect the games rendered image to a different runtime. Equally, they provide the game with the rotation and position data of the headset.

All Oculus games distributed through Oculus Home implement an entitlement check. This means the game is asking Oculus Home if the user is allowed to play it. ReVive does not hack this entitlement check and games need to be downloaded/purchased via Oculus Home. Games need to be started through Home once or the Oculus Service needs to be restarted. Example of the entitlement check failing in Lucky's Tale: Instead of the main menu, ReVive users see a worm on a log showing you it's tongue.

Sidenote: technically one could even write a wrapper that routes OpenVR calls to the Oculus runtime directly, bypassing SteamVR altogether. But since SteamVR can do it already, there is little need for that

  • LibOVRWrapper installs dlls into Windows that old Rift games need in order to communicate with the new runtime. It effectively translates old games to the new runtime. [unsure: Do these old games now also use timewarp or do they need to specifically request it via an sdk call?]
  • LibOVRWrapper + ReVive allows you to run old Rift games on Vive.

Resources

Oculus Sample Framework and Oculus Sample Framework for Unity 5[1] - Experimental sandbox for VR developers and designers.

3D models

References

  1. https://developer.oculus.com/blog/introducing-the-oculus-sample-framework-for-unity-5/