Oculus Rift Development Guide

Skyrim VR Mods

New member
Jan 1, 2019
Basic Oculus Development Guide
Choose an Engine
To develop Oculus content, you need to use a game engine (even non-gaming VR apps are made with game engines). The vast majority of VR apps & games are made using either Unity or Unreal Engine.

Unity is easier to use for beginners and has more resources and support available, however Unreal Engine is considered more powerful- if you're able to take advantage of its power.

Once you've decided, download and install your engine of choice.

It is then highly recommended that you run through the engine's non-VR basic tutorial to make a basic non-VR game with the engine, so that you become familiar with the UI and operation of the engine.

Headset Integration: Hello World
This section will show you how to get the VR headset working in your scene and the best settings for use.

  1. Create or open your Project & Scene
  2. Delete the 'Main Camera' object in the Scene Hierarchy
  3. Create a terrain or floor if there is not already one
  4. Import Oculus Integration into your project (this is very important)
  5. Go to Edit -> Project Settings -> Player -> XR Settings
    • tick 'Virtual Reality Supported'
    • make sure 'Oculus' is the only SDK selected
    • expand 'Oculus' with the little triangle beside it and tick 'Shared Depth Buffer'
    • change 'Stereo Rendering Method' to 'Single Pass'
  6. In the Project tab, open OVR -> Prefabs and drag OVRCameraRig into the Scene
  7. Click on the OVRCameraRig in the Scene. In the Inspector tab, do the following:
    • change the Position Y value to 0 (this is very important - no matter where you move the camera in your scene, you must keep the position Y value at 0!)
    • tick 'Use Recommended MSAA Level'
    • tick 'Enable Adaptive Resolution'
    • change 'Max Adaptive Resolution' to 1.4
    • change 'Tracking Origin Type' to Floor Level
    • tick 'Reset Tracker On Load'
That's it! If you click the Run/Preview button and put the Rift on, you'll be in your Unity scene in VR!

Unreal Engine
  1. Create or open your Project & Map
  2. Add a Camera Actor to the map
  3. Click on the added Camera Actor's properties, and tick 'Lock to HMD'
  4. Add a 'Set Tracking Origin' blueprint from the 'Head Mounted Display' function library, and set Origin to 'Floor'
  5. Open Edit -> Editor Preferences -> Engine -> Rendering:
    • tick 'Forward Shading'
    • change 'Anti-Aliasing Method' to TAA
    • tick 'Mobile Multi-View' then tick 'Direct Multi-View'
  6. In your project folder, open Engine/Config/BaseEngine.ini, and set the following values

  7. Save and close BaseEngine.ini
  8. In your project folder, open Engine/Config/DefaultEngine.ini, and set the following values [OnlineSubsystemOculus] bEnabled=true

  9. Save and close BaseEngine.ini
That's it! If you click the arrow beside the Launch button and then VR Preview and put the Rift on, you'll be in your Unreal Engine map in VR!

Controllers / Hands
Now that you have the headset working, the next part is to get the VR controller(s) or some VR hands into the scene.

In the Project tab, open Oculus -> Avatar -> Content -> Prefabs and drag LocalAvatar onto OVRCameraRig on the Hierarchy tab.

On the LocalAvatar you added to your scene, if you want the controllers to be shown, tick 'Start with controllers'. If you want just hands shown, keep it unticked.

Congratulations, you've now added hands to your app!

Unreal Engine
  1. Download Oculus Avatar SDK for Unreal
  2. Drag the 'Content' and 'Plugins' folder into the root folder of your Project
  3. Drag Config/DefaultInput.ini into your Project's 'Config' folder
  4. Update the Modules and Plugins sections of your .uproject file with the following:
    "Modules": [
    "AdditionalDependencies": [
    "Plugins": [
    "Name": "OnlineSubsystemOculus",
    "Enabled": true
    "Name": "OvrAvatar",
    "Enabled": true
Buttons, Triggers, Trackpads, and Thumbsticks
You can handle all of the control elements of Oculus Touch, mobile rotational controllers, and the Gear VR side controls in a generic way using the OVRInput class.

VR Audio
VR Audio is just as important as VR visuals- sound needs to sound like it truly came from the direction and distance of the object it was emitted from.

Oculus provides the Oculus Spatialiser for this purpose, which goes far beyond the quality of traditional game sounds. It models 3D direction, distance and reflection.


Best Practices
  • Your app should have either no camera motion (other than the user's real life head tracking movement), or should only have movement via a vehicle with a full 3D cockpit (a rigid helmet can count, like an EVA spacesuit). This means that your game will not cause motion sickness, and will be playable by everyone.
  • On Rift, your app/game should be made for the Touch controllers. For mobile VR, you should support the rotational controller, but also users with no controller (using the touchpad on the headset).
  • Never artificially control head pitch or roll, and rarely ever artificially control head yaw- don't even allow the player to do these things through controllers (allow the player to do this naturally with their head!). This only applies to the player head- you are free to move the vehicle itself in any way in a cockpit-based game.
  • Menus and UI should be objects in world space, never locked to the player's face. Even in loading screens and pause screens.
  • Do not use traditional cutscenes or lock the player's head, simply have the scene occur in-engine (and lock the player's vehicle stationary in a cockpit game if you need).
  • Unless your game is abstract, in the clouds, or a cockpit game, use floor level tracking, not eye level. This is critical for presence!
Performance in VR is incredibly important to a degree that it never was in non-VR content.

These requirements are not optional. Without meeting them, you will not be able to get on the store, and give your users a poor experience that could even make them sick. Nearly all of your customers will be using PCs with the recommended or minimum specifications.

Your app should run smoothly at:

  • 45 FPS absolute minimum (and that means minimum- not average!) on the Rift minimum specs
  • 90 FPS 1% minimum on the Rift recommended specs
Recommended & Minimum PC Specs

Mobile VR
Your app should:

  • Run smoothly at 60 FPS almost all of the time
  • Run for at least 45 minutes without triggering the overheat warning on Gear VR
Getting on the Store
So you've finished your app (or got it to a stage where you feel it's ready for "Early Access"), and now want to get it out to Oculus users. The best way to do this by far is to get it onto the Oculus Store- this is where users find, purchase, install, and launch their VR content.

You can submit your app files for review (or manage your current store apps) at dashboard.oculus.com

There are 2 fundamental sections of the Oculus Store:

  • Main Store - this is for complete, polished apps/games with a decent production value that meets modern consumer expectations
  • Early Access - this is for apps/games which are currently in active constant development, and will one day be suitable for the Main Store, but are not yet
In the Main Store, there are then 3 categories of apps: Games, Entertainment, and Apps. Entertainment encompasses VR experiences and stories that are not games, and Apps is for apps with a functional purpose, rather than simply entertainment.

Comfort Rating

Do I need a "development kit" to create content?
The Rift has everything you need as a developer to make content for Rift, and both the Go or Gear VR have everything you need to make content for mobile VR (other than the PC of course). No development kits are needed.

How do I decide whether to develop for Rift or mobile?
Oculus Mobile will give you access to the largest audience (5 million vs 500 thousand), however Rift will give you access to create a totally new kind of experience unlike anything else.

The best solution is to develop for both- create your app in a way that it can run on mobile, but also take advantage of the power & feature set of Rift+Touch. However, if your app takes heavy advantage of hand prescence in its fundamental mechanics, this may simply not be possible.

I developed an app/game for HTC Vive, what should I know about porting to Oculus Touch?
Porting your already existing HTC Vive app/game to Oculus Touch is a great idea, as you could potentially double your sales/userbase (or even more than that), for a relatively small amount of effort compared to creating a whole new app.

Following this page as a guide to the Oculus development stack is all you should need to get started, but it is highly recommended that you actually purchase the Oculus hardware to be able to test, instead of developing blindly.

  • Don't Just Use SteamVR - while SteamVR supports Oculus Rift+Touch through a shim, compared to direct Oculus support it provides Rift users a buggier, less stable experience with lower performance- and also means you cannot get your app onto the Oculus Store (where most Rift users buy their content). Using the proper Oculus API is highly recommended.
  • Gripping Differences - you probably aren't using the HTC Vive button's grip buttons to pick up virtual objects, and you may even be using the trigger for this instead. The Oculus Touch controllers have 2 separate triggers, one of which is a grip trigger and is very comfortable to use. The grip trigger should be used for picking up objects instead of the index trigger- which should be used for using/firing (this is themost important difference in developing for the two different controllers)
  • Oculus Store - whereas your app is probably currently on Steam, most Oculus users get their content from the Oculus Store (for example, 90% of Oculus users that purchased the game Grav|Lab chose to get it from Oculus Store). It is absolutely vital that you launch on the Oculus Store if you want to reach Oculus users.
  • SteamWorks - if you currently use SteamWorks to handle your multiplayer components, this cannot be used on Oculus Store. The Oculus Store equivalent is called Oculus Platform, and guides for it are listed above.
Example Projects
Unity Samples

Development Blog

Development Forums