OpenHMD
GitHub ↗

FOSS · IMMERSIVE TECHNOLOGY · HEAD-MOUNTED DISPLAYS

Free & Open
Source HMD
Drivers

OpenHMD aims to provide a Free and Open Source API and drivers for immersive technology, such as head mounted displays with built-in head tracking. Our aim is to implement support for as many devices as possible in a portable, cross-platform package.

21
Devices supported
6
Platforms
6
Language bindings
125+
Contributors

Supported hardware

Devices

OpenHMD supports a wide range of devices such as Oculus Rift, HTC Vive, Sony PSVR, Deepoon E2 and others. We also support a Generic Android driver and an External Sensor data driver, to allow the use of our sensor fusion and features while providing your own data.

VR15 devices

DeviceSupportedRotationPositionDistortionNotes
Oculus Rift DK1Yes · 0.1.0YesYes
Oculus Rift DK2Yes · 0.2.0YesExperimental ↗YesExperimental (working) branch on contributor’s repository
Oculus Rift CV1Yes · 0.3.0YesExperimental ↗YesExperimental (working) branch on contributor’s repository
Oculus Rift SYes · masterYesNoPreliminaryDistortion taken from CV1 — not perfect, but works
HTC ViveYes · 0.3.0YesNoPreliminary ↗
HTC Vive ProYes · 0.3.0YesNoNo
PlayStation VR (PSVR)Yes · masterYesNoNo
Deepoon E2Yes · 0.3.0YesWarpless lenses
Samsung GearVR (Gen1)Yes · 0.3.0YesHooked up to a PC with a microUSB–USB adapter
Microsoft Mixed RealityYes · 0.3.0YesNoNo
3Glasses D3Yes · 0.3.0YesYes
LG R100 (LG 360 VR)Yes · branchYesNo
WVR1 (SpearI FHD)Yes · masterYesNo
WVR2 (SpearI 2K)Yes · masterYesYes
WVR3 (SpearII)Yes · masterYesYes

AR1 device

DeviceSupportedRotationPositionDistortionNotes
DreamWorld DreamGlassYes · branchYesNoNo

Peripherals5 devices

DeviceSupportedRotationPositionNotes
NOLOYes · 0.3.0YesYes
WMR ControllersYes · branchYesNohidapi-hidraw only for now (Linux only)
PlayStation MoveYes · branchYesNohidapi-hidraw only for now (Linux only)
PlayStation DualShock 4Yes · branchYesNohidapi-hidraw only for now (Linux only)
Oculus Touch + RemoteYes · masterYesNoRequires being pre-paired to an HMD

Missing a device? For the full, continuously updated support list, check the project wiki on GitHub — or help reverse-engineer it.

Portable by design — one C API, everywhere

  • Android
  • FreeBSD
  • Linux
  • OpenBSD
  • OS X
  • Windows

The public API is documented with Doxygen — everything an application needs to enumerate, open and read from devices.

Read the API docs →

Source & packages

Get OpenHMD

The project is hosted on GitHub, where the source code, downloads and usage examples are available. OpenHMDDemo is available as an integration example in a somewhat bigger framework using Ogre.

Latest release

v0.3.0 “Djungelvral”

Released 2019-07-12 · release announcement

All releases ↗

Source code

The library is written in portable C and built with CMake, Meson or Autotools. Examples, device listings and contribution guides live alongside the code.

Framework — Monado

OpenHMD is used in the open source framework Monado, developed by Collabora, containing an OpenXR binding and a compositor that supports both OpenGL and Vulkan clients. OpenHMD aims to support Monado as a full open source VR stack for Linux, and in the future more open source operating systems.

Language bindings

OpenHMD has been ported to a lot of different languages — links to the respective community projects:

Plugins & demos

OpenHMD Unity plugin running in the Unity editor

Unity Plugin Alpha 1.1a · experimental

Multi-platform plugin based on the OpenHMD.NET bindings, using Unity’s Split Stereo Display hooks. Implements projection and view matrices, with automatic detection of dependencies and upgrade-by-replacing OpenHMD.dll/so. Tested on Unity 5.6 — Windows 64-bit and Linux 64-bit only, no lens-correction shader yet.

Download .unitypackage ↓

In the wild

Showcase

Engines, applications and experiments built on top of OpenHMD — from DCC tools to game engines to molecular dynamics.

Blender with a realtime VR viewport
BlenderRealtime VR viewport — shipped in Blender 2.79
Godot engine with OpenHMD support
GodotGodot 3.0 support through the Godot-OpenHMD plugin, available in the asset store
MassiveEngine showing the Reverie Realms Arena demo
MassiveEngineEngine by Thorworks, showing the Reverie Realms: Arena demo
VR Zero running on a Raspberry Pi
VR ZeroVR framework for the Raspberry Pi
Safespaces virtual desktop
SafespacesArcan-based virtual desktop for Linux
Jedi Academy running with OpenHMD
Jedi AcademyOpen source implementation with optional OpenHMD support
Visual Molecular Dynamics VR visualisation
VMDVisual Molecular Dynamics — academic program using OpenHMD for VR visualisation
Neverball running with OpenHMD
NeverballNeverball and Neverputt
CaraVR plugin
CaraVRSupports Mac OSX and Linux by using OpenHMD as its implementation

From the blog · 2017–2019

News

Dispatches from the old site, archived here in full — release announcements, event reports and project updates.

2019-07-12 OpenHMD 0.3.0 'Djungelvral' Released!

We are very happy to announce that after years of reverse engineering devices, hacking, testing and pushing, we are releasing OpenHMD version 0.3.0 (codename ‘Djungelvral’).

We want to thank each and every one of the 125-150 people who have contributed over the last 3.5 years. Helping out with reverse engineering, writing drivers, testing, donating/lending hardware, building applications and games, showing up at (or hosting) Hack-athons.. we are incredibly lucky to have your support. Thank you!

The list of features bringing us from v0.2.0 to v0.3.0 is insane and that is despite not all the features and experimental drivers making the cut for this release. Since we have a really long list of changes, lets look at a couple of highlights in this release!

New Devices!

We got a huge list of new devices supported, including a first-party supported headset (added by the vendor themselves) and a positional tracked device including controllers, both exciting “firsts” for OpenHMD.

  • 3Glasses D3
    First ever support provided first-party, by 3Glasses themselves!
  • Oculus Rift CV1 (rotational)
  • HTC Vive and HTC Vive Pro (rotational)
  • NOLO VR (Positional including Controller support)
    Our first “full function” supported device, with positional tracking and controllers.
  • Windows Mixed Reality HMD support (rotational)
    Including reading different types of resolution from the configuration.
  • Deepoon E2
  • GearVR Gen1 support for PC access to IMU

Controller API!

▶ Watch: Controller API demo on YouTube

We have finalised our Controller API, making it possible to support controllers directly available in VR ecosystems. This enables support for an arbitrary amount of buttons, joysticks and track-pads along with rotational and positional tracking identical to HMDs.
Buttons that are part of HMDs will also now be exposed through this API.

We do want to make it clear it is not our goal to support any controller or joystick out there, there are plenty of libraries already focusing on that. Only controllers that are directly part of VR ecosystems will be merged into master.
This means Sony DualShock 4 (DS4) will be added due to being part of the PSVR ecosystem, while a regular game controller or DS3 will not.

Universal Distortion Shader!

Oculus DK2 correction shader with a simple Godot scene

The universal distortion shader, originally contributed by James Sarrett has made all our lives a lot easier! He implemented an OpenGL (GLSL 120) shader capable of distortion and chromatic aberration based on the PanoTools lens correction model.
The GLSL 330 version was contributed by the Godot developer Bastiaan Olij, while an additional GLES ES 100 shader was contributed by magestik.

This makes it possible to simply set some variables in the drivers that gives information to the shader regarding lens size, chromatic aberration, position and quirks.
More information can be found at the Universal Distortion Shader page on our wiki.

Build Systems! (Deprecation Warning!)

Every developer’s favorite discussion topic (ok, maybe just after tabs vs spaces and favorite Editor/IDE).
Meson was added as a build system due to a huge interest from developers, which makes the current build system count for OpenHMD a bit high at three.

!! WARNING! v0.3 will be the last version of OpenHMD supporting Autotools! !!

Over the last year we have found that most people were using our CMake or Meson build tools, with Autotools falling out of fashion. While v0.3 will still support Autotools, with bugfix releases when needed, it will be removed in v0.4.

Upgraded examples!

Our OpenGL example has been rewritten in SDL2 to bring it into this decade, including more debug functions, controller support, and convenience.
Both examples now also use the new device classes to check the support of a particular device.

The (Temporary) Bad News

OpenHMD has a ‘usable for everyone‘ policy on releases, and sometimes this means that due to operating system changes/issues, development takes longer for devices to be available. This means we had to disable some features (even though they are merged in the codebase) to make sure the release is stable and usable on all platforms.

  • PSVR has been disabled due to issues on Windows and some modern Mac OSX (>10.13) bugs being hard to fix. This is part due to incomplete HID headers, requiring patching of our HIDAPI library to combine HID calls with raw USB calls when needed. This is still under construction and might be pushed as a patch release later.
  • NOLO Has quite some firmware versions with small changes. Unfortunately we have not been able to test all Firmware versions, so not all firmware builds might work as expected. For the best result please update your firmware to the latest version, which is reproducible and maintainable for us.
  • We have branches for way more devices, but due to them being not fully usable (or still experimental), we have chosen to not include them in this release.

The Future!

We will release a new (FASTER!) release schedule soon, which will make it possible for us to get new features and device support to everyone faster. We will also work on doing more regular community updates, both on the website and on the Youtube Channel.

Getting currently disabled devices in master ready for a patch release will be priority as well, among getting the elusive positional tracking functional for supported HMD’s.

If you want to help out, please share the word, help out reverse engineering or implement drivers, include OpenHMD into your games or applications, showcase and let us know! Monetary donations through our Paypal are always welcome as well, link can be found on the home page.

Thanks everyone, and enjoy your FLOSS HMD Drivers!

2019-02-09 FOSDEM 2019 Report

Another year, another FOSDEM.
This annual Free Open Source Developer European Meeting is a hub for close to ten thousand hackers, open source enthusiasts and programmers discussing, hacking and showcasing everything Open Source related!

In 2017 we were lucky to be able to get together on FOSDEM during our first BoF (“Birds of a feather”) session and really get the OpenHMD community moving.
This year, we were lucky to try again and succeeded!

A lot of new people joined our session and had various backgrounds and interest in the project. Discussing the current state of the project and having a open discussion about Open Source VR in general and how to proceed in general, there are a couple key points that were apparent.

Thanks to everyone dropping by or saying hi on the conference!
Here is a generic overview of some things discussed.

2017-09-18 Kieler Open Source und Linux Tage 2017 Report

So it all started with a conversation in #godotengine, the guys were planning to go to the Kieler Open Source und Linux Tage and since Bastiaan recently implemented OpenHMD support in Godot, we thought it would be the best opportunity to tag along and do a shared booth!
We arranged our travel, got a place to stay at one of the locals (Thanks Stefan! it was much fun!) and started packing.

We wanted to show off recent work, so we build a demo using the Oculus DK2 and the NOLO for room scale and controllers with the dev branch of Godot 3.0.
After a week of on and off scene building, I went on with my brother Yngwie towards Kiel by plane (over Hamburg). Of course after some delays and some confusing German train-rides we arrived and found a great location which accurately depicts the German Linux community as I know them (with course on the Friday evening the Grill and beers were setup and a good time was had).

With pH5 already waiting for us, together with the Godot guys we setup a nice presentation and hacking area to show off what we have been up to.

2017-07-13 H(A)ckathon 2017 Report!

We are proud to report back from the first dedicated international OpenHMD H(A)ckathon, which took place last week end in Heerlen, The Netherlands.

The H(A)ckathon was arranged by Joey (@JoeyFerwerda) and hosted in the Ackspace Hackerspace. Thanks for having us!

It was a perfect opportunity for the OpenHMD community to meet-up IRL, drink mate, beer and whiskey, eat stroopwafels and make plans for world domination, not necessarily in that order.

Apart from enjoying the dutch high summer with over 30°C and having Greek food at Nisos, we also had amazing conversations about libre VR and Kalman filters.

We were also able to get work done, had remarkable breakthroughs in our R&D and took care of maintenance tasks.

OpenHMD support in Godot

The Godot game engine got in touch with us to mention they had an initial implementation for OpenHMD integration! By attending the H(A)ckathon virtually they were able to collaborate with us on bug fixing, testing with multiple devices, and setting up hidapi correctly.

HTC Vive

ph5 (@pOH9) showed his recent Vive progress where he implemented lens distortion using the Vive’s config values in Vulkan and visualizes his positional calculations.

Lubosz (@spulaniraba) dug up his OSVR-Vive-Libre code and tested it with multiple Vive firmware versions and base station setups. It was really beneficial to have 3 Vive HMDs around for that. He implemented a real time plot of the Lighthouse base station view by adding Python bindings and plotting the data with matplotlib. 

The plot shows the horizontal and vertical angles in ticks tracked by the HMD’s sensors, emitted by Lighthouse. He also toyed with OpenCV’s solvePnP implementation to receive 3D position by combining the light samples with the HMD sensor positions from the config.

Oculus Rift

DK2 and CV1 positional tracking made huge leaps forward.

Camera-LED sync was achieved and blob tracking has been implemented, which is the groundwork for positional tracking. We were very excited to see blob tracking working on a fairly large distance, as you can see in this video. We are very close to get functional positional tracking working. You can find the current draft implementation in noname’s OpenHMD-RiftPlayground repository.

The blob tracking will also be reusable for the Oculus Rift CV1 Touch controller, where pH5 was able to set up sync by improving his implementation, which can be found in ouvrt.

Special thanks to Refresher for letting us use his controllers!

PSVR

Our PSVR code also received a couple of updates. The method of getting the identifiers was rewritten and setting the modes is more stable now. There is still a bug on Windows, since it seems that writing the modes to the controller returns error states, which requires more investigation.

Wireshark dissectors

Work on Wireshark dissectors has been done, currently focused on the Oculus Rift. We will extend this for other devices, so it will be way easier reading packet dumps and reverse engineer new and existing devices. The dissectors can be found in bleijdfist’s branch of the OpenHMD-Tools repo.

OpenHMD Unity plugin

Additional testing was done on the Unity plugin, a new version will be released this week on the plugin’s download page.

2017-06-11 Experimental Unity Plugin Released!

Today we have uploaded our experimental Unity Plugin!

It is basic, and it lacks things like our Universal Shader system, but its a good step!
Based on the .NET bindings by https://github.com/jurrien-fakkeldij/OpenHMD.NET and a bit of tinkering, we made a good base for implementing Multi Platform VR support in Unity.
While technically able to support every platform OpenHMD supports, the first implementation is implemented for Windows 64-Bit and Linux 64-Bit, this due OpenHMD.NET not supporting Mac yet.
If you want to give Mac support a whirl, feel free to help out on the OpenHMD.NET bindings and extend the current system.

We chose to implement using their existing stereo pipeline using their Split Stereo Display hooks in their VR pipeline.
This method is used by Unity developers themselves to debug external HMD libraries and should be relatively optimized.

After some cleanup and testing , the Unity project will be uploaded as well to a Github repository.
Contributions are of course welcome, for now feel free to shout at me through my emailOr join us at our IRC.

2017-05-14 New Website

It took a bit of planning, but we finally have a new website!

This allows us to centralize our information, write blog posts, and show off projects easier!
We will slowly add project members to the website, allowing others to write up blog posts.

Our Device page is hooked up to the Github wiki to allow for the fastest up to date information regarding device support.

Over the next couple of weeks we will make small tweaks to the website, if you encounter any errors, please contact us through the contact page, or drop by on irc.freenode.net #openhmd.

Thanks

Community · past events

Events

BoFs, hackathons and conferences where the OpenHMD community has gathered — reverse engineering, driver development and integration hacking in person.

26Oct
2019

FOSS XR Conference · Amsterdam, NL

Open source conference organized for everything VR, AR and XR in the FOSS space. OpenHMD was there with presentations, hacking and sharing knowledge.

Sat 09:00–20:30 · Amsterdam — De Balie ↗ · Event page ↗

20Oct
2018

XR Hackfest at Collabora · Cambridge, UK

Hackathon for the greater XR open source community — not just OpenHMD people. Hosted at the Collabora offices; a short confidentiality agreement covering the office had to be signed.

Sat 12:00 → Sun 23:45 · Cambridge, UK ↗

19May
2018

OpenHMD Hackathon at Shackspace · Stuttgart, DE

A lot that was “almost” done, some design decisions and some releases to prepare — Vive (Pro), Microsoft Mixed Reality and PSVR work. Teaming up with Shackspace in Stuttgart.

Sat 09:00 → Sun 23:00 · Ulmer Straße 255, 70327 Stuttgart-Wangen ↗ · Event page ↗

04Nov
2017

OpenHMD Hackathon at CCC-FFM · Frankfurt am Main, DE

What started as a quick meetup ended up as a full-blown hackathon at the headquarters of the legendary Chaos Computer Club — hacking on HMDs, positional tracking and the Acer Mixed Reality headset.

Sat 09:00 → Sun 23:00 · CCC-FFM, Häuser Gasse 2, 60487 Frankfurt am Main ↗

08Jul
2017

OpenHMD (H)Ackathon · Heerlen, NL

The first dedicated international OpenHMD hackathon, organized together with Ackspace — a place for reverse engineering, programming and expanding the library. Read the report ↓

Sat 09:00 → Sun 23:00 · Ackspace, Heerlen ↗ · Event page ↗

Say hello

Contact

If you would like to get in touch with the developers of OpenHMD, you’ll find us on the channels below — drop by, ask questions, or just say hello.