OpenHMD
More actions
| OpenHMD | |
|---|---|
| Information | |
| Type | Driver library |
| Industry | Virtual reality |
| Developer | OpenHMD contributors |
| Written In | C |
| Operating System | Linux, Windows, macOS, Android, FreeBSD |
| License | Boost Software License 1.0 |
| Supported Devices | Oculus Rift DK1, DK2, CV1 and Rift S; HTC Vive and Vive Pro; PlayStation VR; Windows Mixed Reality headsets; NOLO; others |
| Release Date | 2013 |
| Website | https://openhmd.net |
OpenHMD is a free and open-source API and set of device drivers for head-mounted displays and other VR hardware with built-in head tracking. It works on Linux, and also builds for Windows, macOS, Android and FreeBSD.[1] It is compatible with the original Oculus Rift DK1, the DK2, and other devices, including the Oculus Rift CV1, HTC Vive, PlayStation VR and Windows Mixed Reality headsets.[2]
The library is written in C and released under the Boost Software License, which the project chose so that OpenHMD "can be linked and distributed with both free and non-free software".[1] Its drivers were developed largely by reverse engineering commercial hardware, and the project's 0.3.0 announcement thanked the 125 to 150 people who had contributed over the previous three and a half years.[3] For most devices OpenHMD provides rotational (3DoF) tracking only; the NOLO system was its first device with positional tracking and controllers in a release.[4][3]
OpenHMD is no longer actively maintained. Since January 2024 its README has carried an "UNMAINTAINED" notice that says open-source XR driver development "has largely moved to the Monado project", the Monado OpenXR runtime that itself reuses OpenHMD's drivers.[1][5]
History
Origins and 0.1.0
The first commit to the OpenHMD repository was made by Fredrik Hultin on 28 May 2013.[6] The core library source carries 2013 copyright notices for Hultin and Jakob Bornecrantz.[7] The first release, version 0.1.0, added support for the Oculus Rift DK1, which the project's support list marks as having rotational tracking and distortion correction.[2]
0.2.0 "Stroopwafel"
Version 0.2.0, codenamed "Stroopwafel", was published on GitHub on 29 September 2016. It added Android support, rotational tracking for the Oculus Rift DK2, an external sensor driver, position and orientation reset, status codes, CMake builds, the option to run device updates in a background thread, and build options for enabling or disabling individual drivers.[8] The project names its releases after foods and sweets.[9]
Community work, 2017-2018
OpenHMD held its first birds-of-a-feather session at FOSDEM in Brussels in February 2017 and launched a new website in May 2017. In June 2017 it released an experimental Unity plugin built on the community OpenHMD.NET bindings; it used Unity's split stereo display hooks, supported only 64-bit Windows and Linux, targeted Unity 5.6, and lacked the project's universal distortion shader.[3]
The first dedicated OpenHMD hackathon took place in Heerlen, the Netherlands, in July 2017, organized by Joey Ferwerda and hosted at the ACKspace hackerspace. According to the project's report, contributors achieved camera-LED synchronization and blob tracking for the Rift DK2 and CV1 there, the groundwork for camera-based positional tracking, and developers of the Godot engine joined remotely to help with bug fixing, testing with multiple devices and HIDAPI setup. Later meetings included a shared booth with Godot at the Kieler Open Source und Linux Tage in September 2017 (showing a demo that used a DK2 with a NOLO for room-scale tracking and controllers), hackathons at CCC-FFM in Frankfurt in November 2017 and Shackspace in Stuttgart in May 2018, and an XR hackfest at Collabora's offices in Cambridge in October 2018.[3]
In May 2018 GamingOnLinux reported that a reader had run a PlayStation VR headset on Linux with SteamVR, demonstrating it with Dota 2, by combining OpenHMD with the OpenHMD-SteamVR plugin. The setup gave rotational head tracking from the headset's gyroscopes, but positional tracking did not work; an OpenHMD developer commenting on the article noted that OpenHMD then supported positional tracking and controllers only for NOLO.[10]
0.3.0 "Djungelvral"
After two release candidates (October 2018 and 4 July 2019), OpenHMD 0.3.0 "Djungelvral" was released on 12 July 2019.[4][11] GamingOnLinux noted that it came almost three years after the previous version.[12] The release notes list:[4]
- support for the 3Glasses D3, contributed first-party by 3Glasses
- rotational support for the Oculus Rift CV1, HTC Vive, HTC Vive Pro and Windows Mixed Reality headsets
- positional and rotational tracking plus controllers for NOLO
- support for the Deepoon E2, and PC access to the IMU of the first-generation Samsung Gear VR
- a controller API, device class flags, a Meson build system and an improved SDL2-based OpenGL example
- a universal lens-correction shader based on the PanoTools distortion model
PlayStation VR support, although merged in the code, was disabled for the release. The announcement attributed this to problems on Windows and on macOS versions later than 10.13, partly caused by incomplete HID headers. It also said 0.3 would be the last version to support Autotools and that a new, faster release schedule would follow.[3] No later release has been published; as of September 2026, 0.3.0 is still the newest release on GitHub.[11]
Oculus Rift work and maintenance status
Developer Jan Schmidt added a preliminary 3DoF driver for the Oculus Rift S headset and its controllers in June 2020. His pull request described it as supporting rotational IMU tracking and controller input, with distortion parameters "taken from the CV1" that still needed improving.[13] Schmidt also worked on full positional tracking for the Rift CV1 in his own fork, using computer vision to find the headset's and controllers' LEDs in the Rift sensor cameras and fusing the result with IMU data.[14][15] By October 2021 he wrote that controller tracking in that branch was "really good most of the time", while some intermittent tracking problems remained hard to find.[16]
On 18 January 2024 Christoph Haag added the "UNMAINTAINED" notice to the README, which asks anyone interested in maintaining the project to open an issue and points Rift CV1 positional tracking users to Schmidt's fork.[5][1] The repository has not been archived; in January 2025 Schmidt merged a contributor's fix for building OpenHMD with only the Rift drivers.[17]
Architecture and features
OpenHMD exposes a single C API, documented with Doxygen, that applications use to enumerate, open and read from devices.[3] It can be built with Meson, CMake or GNU Autotools and depends on HIDAPI for USB HID access. On Linux, users need udev rules to access headsets without root privileges. Drivers can be enabled or disabled at build time; the README lists rift, deepon, psvr, vive, nolo, wmr, xgvr, vrtek, external and android.[1] Besides hardware drivers, OpenHMD includes a generic Android driver for phone-based viewers and an external sensor driver that lets an application feed in its own sensor data while using OpenHMD's sensor fusion.[3][4]
The universal distortion shader, originally written in GLSL 1.20 by James Sarrett, corrects lens distortion and chromatic aberration from a few parameters that each driver supplies, such as lens size and position. Godot developer Bastiaan Olij contributed a GLSL 3.30 version, and a contributor known as magestik added an OpenGL ES version.[3][4] The controller API added in 0.3.0 supports an arbitrary number of buttons, joysticks and trackpads with the same rotational and positional tracking as headsets. The project said it would only merge support for controllers that are part of a VR ecosystem, such as the DualShock 4 used with PlayStation VR, not general game controllers.[3]
Community bindings exist for Go, Java, .NET, Perl, Python and Rust.[1] Pre-built packages have been offered through the Arch User Repository, Debian, Ubuntu and Homebrew.[3]
Supported devices
The project wiki lists the following hardware. "Supported" shows the release that first included the driver; "master" means the main branch after 0.3.0, and "branch" means a separate development branch.[2]
| Device | Supported | Rotation | Position | Distortion correction |
|---|---|---|---|---|
| Oculus Rift DK1 | 0.1.0 | Yes | - | Yes |
| Oculus Rift DK2 | 0.2.0 | Yes | Experimental branch | Yes |
| Oculus Rift CV1 | 0.3.0 | Yes | Experimental branch | Yes |
| Oculus Rift S | master | Yes | No | Preliminary |
| HTC Vive | 0.3.0 | Yes | No | Preliminary |
| HTC Vive Pro | 0.3.0 | Yes | No | No |
| PlayStation VR | master | Yes | No | No |
| Deepoon E2 | 0.3.0 | Yes | - | Warpless lenses |
| Samsung Gear VR (first generation) | 0.3.0 | Yes | - | - |
| Windows Mixed Reality headsets | 0.3.0 | Yes | No | No |
| 3Glasses D3 | 0.3.0 | Yes | - | Yes |
| LG 360 VR (LG R100) | branch | Yes | - | No |
| WVR1, WVR2 and WVR3 | master | Yes | - | No (WVR1), Yes (WVR2, WVR3) |
| DreamWorld DreamGlass (AR) | branch | Yes | No | No |
| NOLO | 0.3.0 | Yes | Yes | - |
| Oculus Touch (first and second generation) | master | Yes | No | - |
| Windows Mixed Reality controllers | branch | Yes | No | - |
| PlayStation Move | branch | Yes | No | - |
| DualShock 4 | branch | Yes | No | - |
The wiki notes that Oculus Touch controllers must first be paired to a headset, and that the Windows Mixed Reality, PlayStation Move and DualShock 4 drivers work only through the Linux hidraw backend.[2]
Use in other software
- Monado: Collabora announced the open-source OpenXR runtime in March 2019, saying it "integrates hardware support from existing community development efforts such as OpenHMD and libsurvive".[18] Monado's build instructions list OpenHMD 0.3.0 or newer as an optional but recommended dependency, and its website names the Rift CV1 and NOLO CV1 as the most notable devices it reaches through OpenHMD.[19][20]
- SteamVR: Christoph Haag's SteamVR-OpenHMD plugin exposes OpenHMD's drivers to SteamVR.[21][10]
- Godot: the godot_openhmd GDNative module, maintained under the GodotVR organization, adds OpenHMD support to Godot 3.x.[22]
- Blender: in August 2016 Blender developer Julian Eisel opened a patch for "Viewport HMD integration using OpenHMD". In February 2017 Blender's developer meeting notes said OpenHMD was preparing a stable release for a Blender merge.[23][24] Eisel abandoned the patch in January 2020, writing that future VR support in Blender would come through OpenXR instead.[23]
- Psychtoolbox: the Psychtoolbox-3 toolkit includes a PsychOpenHMDVR driver. It needs libopenhmd 0.3 or later, runs only on Linux with a native X server, and is marked as beta quality.[25]
See also
References
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 "OpenHMD: Free and Open Source API and drivers for immersive technology". GitHub. OpenHMD. https://github.com/OpenHMD/OpenHMD. Retrieved 2026-09-27.
- ↑ 2.0 2.1 2.2 2.3 "Support List". OpenHMD Wiki (GitHub). OpenHMD. https://github.com/OpenHMD/OpenHMD/wiki/Support-List. Retrieved 2026-09-27.
- ↑ 3.00 3.01 3.02 3.03 3.04 3.05 3.06 3.07 3.08 3.09 "OpenHMD - Free and Open Source HMD Drivers". OpenHMD. https://openhmd.net/. Retrieved 2026-09-27.
- ↑ 4.0 4.1 4.2 4.3 4.4 "OpenHMD 0.3.0 - Djungelvral". GitHub. OpenHMD. 2019-07-12. https://github.com/OpenHMD/OpenHMD/releases/tag/0.3.0. Retrieved 2026-09-27.
- ↑ 5.0 5.1 Christoph Haag (2024-01-18). "Add UNMAINTAINED notice to readme". GitHub. OpenHMD. https://github.com/OpenHMD/OpenHMD/commit/bb8bb0a8924351cb4e3e4dc44344268ab29a4581. Retrieved 2026-09-27.
- ↑ Fredrik Hultin (2013-05-28). "Initial Commit". GitHub. OpenHMD. https://github.com/OpenHMD/OpenHMD/commit/a1662d7816171e7903e3facfbc4edf5698f0bead. Retrieved 2026-09-27.
- ↑ "openhmd.c". GitHub. OpenHMD. https://github.com/OpenHMD/OpenHMD/blob/master/src/openhmd.c. Retrieved 2026-09-27.
- ↑ "OpenHMD 0.2.0 - Stroopwafel". GitHub. OpenHMD. 2016-09-29. https://github.com/OpenHMD/OpenHMD/releases/tag/0.2.0. Retrieved 2026-09-27.
- ↑ "Release versions". OpenHMD Wiki (GitHub). OpenHMD. https://github.com/OpenHMD/OpenHMD/wiki/Release-versions. Retrieved 2026-09-27.
- ↑ 10.0 10.1 Liam Squires-Hand (2018-05-24). "PSVR is running on Linux with OpenHMD and OpenHMD-SteamVR". GamingOnLinux. https://www.gamingonlinux.com/2018/05/psvr-is-running-on-linux-with-openhmd-and-openhmd-steamvr/. Retrieved 2026-09-27.
- ↑ 11.0 11.1 "Releases - OpenHMD/OpenHMD". GitHub. OpenHMD. https://github.com/OpenHMD/OpenHMD/releases. Retrieved 2026-09-27.
- ↑ Liam Squires-Hand (2019-07-13). "OpenHMD version 0.3.0 is out, almost three years after the last version". GamingOnLinux. https://www.gamingonlinux.com/2019/07/openhmd-version-030-is-out-almost-three-years-after-the-last-version/. Retrieved 2026-09-27.
- ↑ Jan Schmidt (2020-06-22). "Initial 3DOF Oculus Rift S driver". GitHub. OpenHMD. https://github.com/OpenHMD/OpenHMD/pull/299. Retrieved 2026-09-27.
- ↑ Jan Schmidt. "thaytan/OpenHMD". GitHub. https://github.com/thaytan/OpenHMD. Retrieved 2026-09-27.
- ↑ Jan Schmidt (2020-10-06). "Rift CV1 update". Jan Schmidt (noraisin.net). https://noraisin.net/diary/?p=993. Retrieved 2026-09-27.
- ↑ Jan Schmidt (2021-10-26). "2.5 years of Oculus Rift". Jan Schmidt (noraisin.net). https://noraisin.net/diary/?p=1055. Retrieved 2026-09-27.
- ↑ "Fixed build for building with just the Rift drivers". GitHub. OpenHMD. 2025-01-11. https://github.com/OpenHMD/OpenHMD/pull/365. Retrieved 2026-09-27.
- ↑ Jakob Bornecrantz (2019-03-18). "Introducing: Monado". Collabora. https://www.collabora.com/news-and-blog/news-and-events/introducing-monado.html. Retrieved 2026-09-27.
- ↑ "Monado README". freedesktop.org GitLab. Monado. https://gitlab.freedesktop.org/monado/monado/-/blob/main/README.md. Retrieved 2026-09-27.
- ↑ "Monado - Developer Site". Monado. https://monado.freedesktop.org/. Retrieved 2026-09-27.
- ↑ Christoph Haag. "SteamVR-OpenHMD: SteamVR plugin for using OpenHMD drivers in SteamVR". GitHub. https://github.com/ChristophHaag/SteamVR-OpenHMD. Retrieved 2026-09-27.
- ↑ "godot_openhmd: OpenHMD GDNative driver for Godot". GitHub. GodotVR. https://github.com/GodotVR/godot_openhmd. Retrieved 2026-09-27.
- ↑ 23.0 23.1 Julian Eisel (2016-08-02). "D2133 Viewport HMD integration using OpenHMD". Blender Developer (archive). https://archive.blender.org/developer/differential/0002/0002133/index.html. Retrieved 2026-09-27.
- ↑ "Blender developers meeting notes - February 19, 2017". BlenderNation. 2017-02-19. https://www.blendernation.com/2017/02/19/blender-developers-meeting-notes-february-19-2017/. Retrieved 2026-09-27.
- ↑ "PsychOpenHMDVR". Psychtoolbox-3. http://psychtoolbox.org/docs/PsychOpenHMDVR. Retrieved 2026-09-27.