###Developing with Oculus: Mastering the Oculus SDK
Volga Aksoy @ Oculus Michael Antonov @ Oculus
###Table of Contents
- New SDK Features
- Direct-to-Rift
- Latency Testing & Dynamic Prediction in DK2
- Pixel Luminance Overdrive
###Real-time Engine Integration Tips
- SDK rendering vs. App rendering
- Troubleshooting judder
- FOV, texture resolution
- Asymmetric / symmetric frustum issues
- Left / right separate eyes vs one buffer
- Multi-treading and timing
###Looking Into The Future
- Time Warp Improvements
- SDK Roadmap
###New SDK Features
- Direct To Rift
###Extended Mode
- Headset shows up as an OS Display
- Application must place a windows on Rift monitor
- Icon and Windows in a wrong place
- Windows compositor handles Present
- There is usually at least one extra frame of latency
- More latency if no CPU & GPU sync is done
###Direct To Rift
-
Outputs to Rift without Display being a part of the desktop
- Headset not seen by the OS
- Avoid jumping windows and icons
- Decouples Rift v-sync from OS compositor
- Avoids extra GUP buffering for minimum latency
- Use ovrHmd_AttachToWindow
- Windows swap chain output is directed to the Rift
-
Hope to see Direct Mode become the longer term solution
###Direct To Rift - Mirroring
- Direct to Rift Supports duplicating the image to a Window
- Minimum overhead
- Can be disabled by ovrHmdCap_NoMirrorToWindow
- Possible to display a diffrent image instead, such as message in this screen
###Direct To Rift - Implementation
- LibOVR shims Direct3D/GL Runtime
- Must call ovr_InitializeRenderingShim() before D3D use
- Windows Swap Chain has an associated Rift Primary Buffer
- On DK2, back buffer is copied and rotated to Primary for display
- For best quality, use reported resolution
- User/Kernel Mode Video Driver Shim
- Hides Rift from OS, allowing us to find and render to it
- Allows flipping with Rift's v-sync (no composition queue)
###Direct To Rift - Challenges so Far (1/2)
- symptom: "Rift doesn't on"
- Optimus (NVidia + Intel HD GPU Laptops)
- Discrete GPU not connected to HDMI port
- SW has to create a bridge and copy data
- Use NVidia driver bridge in Win 7/8; Win 8.1 cross adaptor support
- Work on Razer Blade laptops
- In some machines copy is slow (10ms + making it unusable)
- Multi-GPU (SLI/Crossfire)
- Rift plugged into the "wrong" adapter, need to copy
###Direct To Rift - Challenges so Far (1/2)
- DisplayLink
- Conflicting driver shim; working with Display Link to resolve.
- Too slow for Rift output
- Multi-Monitors
- May sync to wrong Display => V-sync tear or Judder
- Resolved with upcoming driver update
- Other Software Shims
- ASUS Splendid color, etc
- Plan: Adding debugging logic, fix incrementally
###Direct To Rift - Future
- Move Distortion/composition to a Separate Process
- Remove Shims from the Application
- Avoid state-related rendering issues
- Support Time warp layer composition
- Asynchronous Time Warp (TBD)
- Multi-GPU TW rendering
- Implementing Time warp on secondary GPU with Optimus
- Researching better GPU pipelining / preemption
###New SDK Features
- Latency Testing & Dynamic Prediction in DK2
- Pixel Luminance Overdrive