Open-source RenderManager, enhanced positional tracking and more

Here is a brief update on new features and major enhancements of of the OSVR software

Major additions

Open-source RenderManager plugin for Unity and Unreal

The RenderManager layer (available for download including example programs and source code for these programs from here: http://osvr.github.io/using/ ) provides a set of high-performance low-latency rendering utilities for game engines, OpenGL and Direct3D applications. These services include:
  • Support for NVIDIA GameWorks VR
  • Timewarp, updating the rendered image with the freshest predicted tracking data just before providing this image to the graphics card
  • Enable/disable direct render to switch between extended desktop and direct mode
  • Front-buffer rendering
  • Distortion correction using multiple methods including distortion mesh, parametric distortion and more.

RenderManager does this in a generalized way to support multiple HMD configurations including single- and dual-port models, HMDs that prefer portrait or landscape mode, HMDs with required distortion correction and more.

 

The RenderManager plugin for Unity (https://github.com/OSVR/OSVR-Unity-Rendering) provides an open-source Unity 5.2 and Unity 5.3 plugin that uses RenderManager. This not only provides the RenderManager functionality for Unity applications but also provides a template for integrating RenderManager into other game engines.

Support for Unreal 4.9 is also available at https://github.com/OSVR/OSVR-Unreal

Auto-calibrating positional tracking with sensor fusion

A major update to the OSVR positional tracking now includes the following:
  • Sensor fusion to combine information from IR camera and IMU into more accurate, smoother tracking information
  • Take into account distortion in IR camera
  • Auto-calibrating position. Overcomes inaccuracies in the expected position of the IR LEDs (such as those due to manufacturing tolerances, opening and closing of OSVR HDK front panel). This is implemented in the OSVR-Core VideoBasedTracker plugin. It uses the following logic:

 

Auto-calibration

Improvements to OSVR-Core

User-facing:
  • Improved parsing of the HDK angular velocity data, resulting in much improved predictive tracking.
  • Adjusted HDK predictive tracking interval for a better experience based on improved data.
  • Improved install directories on Linux and Mac

 

Developer-facing:
  • Added ClientKit API methods for “re-center” functionality. This allows maintaining a “room-to-world” transform and setting its yaw (rotation about y axis) based on the current head orientation, primarily as an aid for porting from the Oculus SDK. https://github.com/OSVR/OSVR-Core/commit/c378ce6ecbdf6d8be10ed2eb80b5f3b67f58cf6e
  • The SDK now ships with a general-purpose, high performance header-only Kalman filter/extended Kalman filter framework, using the Eigen matrix math library
  • Fixes to support the “Ninja” build tool (via CMake) on all platforms for very fast parallel compilation.
  • Optional PluginKit and ClientKit APIs added to the “Tracker” device interface class, exposing linear and angular velocity and acceleration.
  • Removed hard OpenCV dependency from Core
    • Note that if you have an imaging plugin that isn’t using the C++ wrappers, there may be some small changes you’ll want to make in order to ensure stability.
  • The device descriptor is now consulted to determine which callbacks (position, orientation, etc.) for a tracker to trigger.
  • Improved header providing math type interoperation with the Eigen linear algebra library.
  • Fixed reference counting for imaging clients.
  • Improved configure performance by refactoring the header-dependency tests.
  • Switched some internal implementation details from Boost.Fusion to the internal “TypePack” library: should improve compile time and reduce fragility.
  • Updated version of UIforETW Event Tracing code.

Improvements to OSVR-Unity

  • Added support for Unity 5.2 and Unity 5.3
  • Added FPS controller
  • Improved support for HMDs with two video inputs such as Sensics dSight
  • Log an error if no OSVR server was detected.
  • Merged support for Locomotion interface, to support omnidirectional treadmills such as Virtuix Omni
  • Added RenderManager support, but DLLs not yet added to unitypackage

Improvements to OSVR-Unreal

  • Added support for Unreal 4.9
    Added support for RenderManager
  • Use of the DisplayConfig API for improved display configuration reliability and flexibility.
  • Fixed stereo viewport issue.

Improvements to OSVR-HDK-Windows-Drivers

  • Fixed install in non-US locales.

Improvements to OSVR-Tracker-Viewer

  • Reduced size of binaries by not redistributing unused DLLs.

RenderManager

Features:
  • Adds predictive tracking to reduce perceived latency
  • Added CMakeLists.txt and instructions for compiling.
  • Added support for dSight dual-display mode in DirectMode and non
  • Adding mutex to make RenderManager more thread-safe
  • Alpha support for dual DirectMode displays (1-buffer rendering only)
  • Applications can now register the same buffer for multiple eyes
  • Client application sets the type of rendering to use, not config file
  • Added Visual Studio merge modules for CRT and MFC to installer
  • Added ability to update distortion mesh while running
  • Added configuration file to run in a non-directmode mono window
  • Added initial distortion correction for the OSVR HDK 1.3
  • Adds configuration file and white list for alpha support of Vuzix display
  • Adds support for two-window, two-display HMDs
  • Applications can now specify near and far clipping planes
  • Enabling the application to double-buffer to avoid copies in Time Warp
  • Making a separate client context for RenderManager (thread safety)
  • Per-eye timing information
  • Powers off DirectMode displays when we close them
  • Removed depth buffer clearing (and existence) from internal rendering pass
  • Removed frame delay when specifying both sync and app-block sync
  • Turns on vsync by default for the direct-mode examples to avoid tearing.
  • Using release 1.0 version of nVidia DirectMode API
Bug fixes:
  • Busy-waits rather than sleeps in demos to avoid O/S delays
  • Checks for zero-sized buffers to enable error report rather than crash
  • Failure to obtain high-priority rendering now returns PARTIAL rather than FAILURE
  • Handles window quit events from SDL
  • Includes the Visual Studio redistributable runtime and Direct3D compiler DLL.
  • Render routines check to see if the display has been opened to avoid crashing.
  • Render() callbacks not called for spaces that do not exist
  • Check for extra vsync to reduce incidence of screen tearing
  • Made the distortion mesh much finer to reduce artifacts
  • The code now reads and responds to the swap_eyes entry in display config
  • The code now responds to time warp enable in config (was not being used)

SteamVR-OSVR

  • Updates for new releases of SteamVR OpenVR API

New and Updated Interfaces

New Repositories

OSVR-Nod

 

OSVR-Compatibility-Aggregator

 

Blender-OSVR (experimental)

 

Python-binding (experimental):

 

OSVR-Unity-Rendering

 

OSVR-HDK-Windows-Drivers

 

sensics/OSVR-Emulated-Devices

 

sensics/LED_Encoding
  • Utility to calculate LED bright/dark patterns for the OSVR HDK and other devices that use the OSVR IR tracking. Shows how much instantaneous overlap there is among bright LEDs in the different patterns. Allows selecting the number of LEDs, the number of bits to encode them in, and the stride to pick for time offsets among the LEDs. Shows maximum instantaneous power draw for different strides and bit depths. https://github.com/sensics/LED_encoding

Check the diagram on http://osvr.github.io/contributing/ for frequent updates on the projects. Current diagram is:

github-overview.jpg

New utilities

Documentation improvements

Special thanks

Thank to all the outside contributors, but a special shout-out to @Armada651 and @d235j

 

Leave a Reply

Your email address will not be published. Required fields are marked *