DorsalVR is a Windows VR app that can pass motion data from your HMD and XR controllers to other software running on Windows, and mirror your monitor to a virtual screen inside the VR headset.
It currently supports outputting motion data via DSU (DualShock over UDP, also known as cemuhook protocol), which makes it compatible with Dolphin Emulator. Future versions will support output via other means.
DorsalVR uses OpenXR and is written in Unity; currently it will only run on Windows (64-bit).
It supports any VR equipment that supports OpenXR (that is, any equipment that can use SteamVR, Oculus, or WMD), and so it can be used with the Oculus Quest or Quest 2, but only via Oculus Link, Air Link, or Virtual Desktop (Windows version) - it cannot run natively on the headset, even via sideloading.
If using Virtual Desktop, you may wish to disable "Increase video nominal range" in the Streaming settings; otherwise, the colours feel more washed out.
First, download the latest release's zip file from the releases page, and unzip it to a folder on your hard drive.
- If using SteamVR: add
DorsalVR.exe
to Steam as a non-Steam game. Right-click it in your library, select Properties..., and tick Include in VR library. - If using the Oculus app: add
DorsalVR.exe
to your Library. (Click the Plus button, click App not listed? Add it here, then findDorsalVR.exe
.)
Load DorsalVR as you would any VR app or game using SteamVR or Oculus. The first time you load it, it will do some setup in the background, immediately quit, and open a folder in Explorer, ready for you to set up your desired config.
Currently, the only app actively supported is Dolphin Emulator, ideally 5.0-14382 or higher; see this page in the Wiki for instructions on setting that up.
One command line parameter is supported:
--yaml=path/to/config.yaml
: chooses a YAML config file to load. If this is not specified,default.yaml
will be used.
You can set these command line parameters via the app's Properties in Steam or via Menu > Edit in Oculus - in either case, put the parameters in the Launch Options box.
Different OpenXR runtimes (SteamVR, Oculus, etc) can report the controllers' rotations in different ways; the specifics of this can change between one version of the runtime and the next.
If your virtual controller does not seem to match the angle or position of your real controller, please report it as an issue, and supply the details of the controllers and runtime you are using.
The following features are planned:
- An actual UI for choosing config files.
- A more aesthetic environment.
- Better controller models.
- Different forms of controller data output other than DSU.
- Built-in support for other apps (to begin with: Citra, Cemu, Yuzu, and Ryujinx).
- More tweaks to the controllers, to allow mapping, say, a virtual steering wheel.
Take a look at the open enhancements to see how progress is going, and feel free to suggest your own ideas.
Big thanks to the Dolphin team for a tremendously well-written and well-documented emulator. The excellent Dolphin blog post Mastering Motion got me interested in this in the first place - read it, it's superb.
In particular, thanks to iwubcode, jordan-woyak, and Filoppi for their work on Free Look, motion input, and DSU, which I have learnt so much from.
Thanks also to:
- ruccho for UnityGraphicsCapture, which does the work of mirroring the desktop to a virtual screen using Windows.Graphics.Capture.
- Davidobot for BetterJoy, which has been very useful for debugging actual movement data.
- Rajkosto and v1993 for the DSU/Cemuhook protocol and its documentation.
- NullFX for this Crc32 implementation which is used here to compute the checksum required by the DSU protocol.
- Antoine Aubry for YamlDotNet, which I use (albeit clumsily) to parse the config files.
- Jaitsu for help with testing DorsalVR and for figuring out issues on Valve Index in particular.