Rendering Roadmap

With the HTC-Vive using osvr, simulavr can see and get reports on the location information for the two controllers and the headset. The main renderer is a wayland server and provides a full compositor. OSVR is also providing all the distortion information needed to render static images to the headset display.

Headset Rendering Status

Missing Puzzle Pieces in Rendering
Feature to Implement Implementation Status Priority
Respond to Controllers Partially implemented Blocker
Respond to Buttons Possible to implement Low
Render Controllers Needs Haskell Normal
Viewport Responds to HMD Needs Haskell Blocker
Render Left Eye to Texture Needs Haskell Low
Render Right Eye to Texture Needs Haskell Low
Render to HMD Screen library missing High

HMD Rendering Notes

There are several libraries available for use in different aspects of VR. The two main libraries in use by Simula are OSVR and OpenVR. Both of these libraries are meant to be high level and provide a unified interface for dealing with inputs and headset rendering. OpenVR <openvr-link> depends on the SteamVR runtime library to work, but seems to be the most robust library for interfacing with the headset.

The OSVR library does a wonderful job of working with the HTC lighthouse devices and gives a callback registration interface for handling input devices. This works really well. It has the potential to scale to multiple headsets connected over a network. With all that said the headset portion of the library is still binary only and Linux support is non-existent at the moment. We have tried using OSVR-RenderManager and can’t seem to get direct or extended mode to render to the headset.

The current plan is to move ahead trying to work with OpenVR and explore additional library options. OpenHMD is a potential library to integrate and test. There is the possibility of going more low-level and using another OpenGL context to just render textures. Another would be to simply get a dumb XOrg window and render the eye distortion textures there.

Evaluating Libraries

When evaluating a library for inclusion, there are a couple of criteria to keep in mind.

  1. Does it work?
  2. Can you write a small example Haskell program using it?