Mastering Oculus Rift Development

Mastering Oculus Rift Development (2017) .. by Jack Donovan

Table of Contents


Chapter 1: Exploring a New Reality with the Oculus Rift

The concept of VR

Depth perception

Common limitations of VR games

Locomotion sickness
Lack of real-world vision
Unnatural head movements
Vergence-accommodation conflict

Constellation tracking
Input with controllers, remotes, and more
The importance of frame rate
Asynchronous Timewarp
Installing the Oculus runtime

Chapter 2: Stepping into Virtual Reality

Getting started with Unity

Installing the Unity3D engine

Incorporating the Oculus Utilities package
Taking your first steps in VR

Scripting basic player movement

Enabling interaction with gaze-based mechanics

Implementing gaze-based teleporting

Building and running your first VR app

Configuring Unity Build Settings for VR
Configuring Unity Quality settings for VR


Chapter 3: Improving Performance and Avoiding Discomfort

Using the Unity profiler

Analyzing CPU usage

Using coroutines to split up complex work
Mesh optimization

Optimizing a mesh using Simplygon

Displaying dynamic detail with LODs
Keeping a handle on memory allocation

Stack and heap memory

Value types and reference types
Boxing and unboxing

Unity specifics

foreach loops versus for loops
Material references
Comparing tags efficiently

Object pooling

Creating an object pool for strings
Pooling Unity GameObjects


Chapter 4: Interacting with Virtual Worlds

Designing basic player input

Using Unity input axes
Using the OVRPlayerController script
Adding projectiles

Implementing a firing mechanic

Implementing gameplay around input

Creating a target dummy

Creating custom Unity input axes

Chapter 5: Establishing Presence

Setting up the game environment

Configuring lighting properties
Adding some color to the scene
Adding colliders to imported mesh objects

Accentuating depth with particle effects
Customizing the skybox
Enabling player interaction with the world

Creating the dynamic wall prefab
Scripting our prefab

Populating the game world with resources

Making the practice dummies drop resources

Using resources to interact with the environment

Chapter 6: Adding Depth and Intuition to a User Interface

Adding a VR input module
Constructing a simple menu

Setting up a canvas
Adding buttons to a canvas
Adding functionality to UI elements
Creating a GameManager script

Adding UI elements to the game world

Adding complexity to the dynamic walls
Adding teams to the game
Adding a health bar to the dynamic wall


Chapter 7: Hearing and Believing with 3D Audio

The science of how we hear

Lateral localization of audio
Vertical localization of audio

Learning the basics of Unity audio

Spatial blending between 2D and 3D

Implementing 2D stereo audio

Playing a sound when a button is clicked on
Playing a sound when a button is hovered

Adding basic 3D spatialization

Making an audio source 3D

Immersing your player with HRTFs

Sampling Unity’s first-party HRTF
Importing the ONSP
Using the ONSP
Adding sound reflections to the scene

Filling the game world with sound

Adding footstep sounds
Adding projectile sounds
Adding ambient looping to energy orbs


Chapter 8: Adding Tone and Realism with Graphics

A simple breakdown of the rendering pipeline

Defining the geometry
Transforming the model into world space
Transforming the world into camera space
Lighting the objects in the scene
Deriving a projection from the camera
Clipping geometry outside the camera’s frustum
Rasterization and texturing

Forward and deferred rendering

Forward rendering
Deferred rendering
Demonstrating the value of deferred rendering

Adding tone with color grading

The basics of color grading
Adding a color grading script to the camera
Sampling a lookup texture
Creating dramatic effects with vibrant LUTs

Changing the appearance of objects with shaders

A quick overview of ShaderLab shaders
Importing a textured model
An overview of ShaderLab’s fundamental syntax
Writing your first shader

Defining a diffuse texture property

Adding a normal map property to a shader

Generating a normal map


Chapter 9: Bringing Players Together in VR

Creating a lobby space for joining matches

Setting up the lobby scene
Creating the Create menu
Adding event triggers to the Lobby menu

Creating a networked game
Defining player spawn points

Assigning players to teams

Using Unity’s matchmaker system

Creating a matchmaker game
Joining a matchmaker game

Tying together the multiplayer lobby

Linking the menus together

Synchronizing data in multiplayer matches

Syncing player movement
Handling object spawning on the network
Detecting bullet collisions on the network
Ending a match after a set time


Chapter 10: Publishing on the Oculus Store

Packaging a final Unity build

Adding a game icon
Configuring final player settings
Configuring final quality settings
Getting to know the output log

Meeting the Oculus submission guidelines

Meeting the Oculus content policy
Meeting the Oculus minimum technical requirements

What about Asynchronous Timewarp and Spacewarp?

Uploading your first build to Oculus

Managing release channels
Uploading submission information
Other sections of the dashboard