openvr-customhmd
DIY attempt for building OpenVR compatible HMD and controllers, and drivers (Windows only).
I started my VR experience with a custom built HMD by using parts of a disassembled Sony HMZ-T2, an Arduino based Head Tracker, and OpenTrack software. But only few games were supporting FreeTrack-like protocols. So I decided to write a complete OpenVR driver which hopefully will support newer games, and I hope I will be able to play some VR games with friends who cannot afford ridiculously expensive hardware.
Some features:
- Tracking and controller hardware is based on STM32F103.
- Supporting fake framepacked 3D signal for HMD's with two monitors or 3D TV's. (double horizontal resolution
๐ ) - IVRVirtualDisplay supporting driver for Android phone based orientation tracking and display. (in progress...)
- Working IVRDirectModeComponent implementation, just for reference.
- Lighthouse-like positional tracking, (or ultrasound TimeOfFlight based, still experimenting, also in progress...)
- Expose any USB WebCam (YUY, YUV or RGB) to OpenVR (for Room-View or other camera functions).
- Autodetect monitor position and size in Extended mode for placing the HeadSet Window.
- Minimal electronics in trackers/controllers. (eg. no button debouncing filters, all done in code. 72Mhz can handle it.)
- Controllers communicate wireless with the HeadSet, which is connected via USB cable to the computer.
- PSVR support
- ...
Dependencies:
ffmpeg from NuGet, for compiling the driverAMD AMF libraries.- dotNet 4.6.2, for the HMD monitor program.
- LibUsbDotNet
- http://zadig.akeo.ie/ Zadig to install usb driver for handling PSVR
- VC2015 Runtime, for using the driver
ToDo:
- Positional tracking. (Already done some experiments with 2 DIY laser lighthouses, servo and stepper. Servo is too noisy and slow, stepper needs extra controllers. cheapest solution may be tracking by ultrasound...)
Fix/flip quaternion from RotationVector sensor for Android tracking.Using GoogleVRHardware encoding instead of ffmpeg?- Use OpenGL mesh for distortion correction on Android display?
Remove magnetic sensor input from trackers.- Find a friendlier way to calibrate tracker sensors.
- Lower latency in encoding -> network -> decoding -> display pipeline. (1920x1080@60 FPS encoding already less than 10 ms, no framedrops on network, MediaCodec decoding @60 FPS, but seems a bit delayed)
- ...
After long resisting to buy one of the expensive but ready VR solutions, I finally bought a Vive (for twice of the actual price