Mastering Oculus Rift Development (2017) .. by Jack Donovan
Table of Contents
Preface
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
Summary
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
Summary
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
Summary
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
Summary
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
Summary
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
Summary
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
Summary
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
Summary
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
Summary
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
Summary
Index