Motion cancellation

by SIMRIG

Motion cancellation can counteract the motion system's impact on the VR-headset. Essentially subtracting the rig's motion from your own. This is currently not officially supported by any of the major VR-headset manufacturers. But hacks are available. This guide explains how the setup and configure OpenVR-InputEmulator in motion cancellation mode.

Verified 2019-10-10 with SteamVR version 1.7.15 on both HTC Vive and Oculus Rift in iRacing, Assetto Corsa, and R3E.

TL;DR

Quick and dirty edition

Prerequisites

  • A working SteamVR installation
  • OpenVR compatible hardware: HTC Vive, Valve Index, Oculus Rift, Oculus Rift S etc.

Step 1

Attach a VR controller to your rig:

  • Mount it close to your head for Vive/Index and Oculus Rift
  • Mount it close to your wheelbase for Oculus Rift S
  • It should be clearly visible to the VR tracking system
  • Make sure its on

Do not connect the USB-cable for Vive/Index controllers. This will disable tracking.

Figure: Attach the VR controller to your rig.

Step 2

Download and install OpenVR-InputEmulator-v1.3.exe from https://github.com/matzman666/OpenVR-InputEmulator/releases

Step 3

Apply this patch to driver_00vrinputemulator.dll:

  1. Go to C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\00vrinputemulator\bin\win64

  2. Make a backup of driver_00vrinputemulator.dll

  3. Overwrite driver_00vrinputemulator.dll with the patched DLL from https://github.com/sharkyh20/OpenVR-InputEmulator/releases/tag/SteamVR-Fix

Step 4

Restart your computer. This is important. Don't skip this step.

Step 5

You need to configure OpenVR-InputEmulator now and every-time you need motion cancellation:

  1. Go to C:\Program Files\OpenVR-InputEmulator
  2. Double-click startdesktopmode.bat
  3. SteamVR (and Oculus) will start together with OpenVR-InputEmulator
  4. From Device select the controller attached to your rig
  5. From Device Mode select Motion Compensation
  6. From Motion Compensation Settings select Reference Tracker or Set Zero
  7. Click Apply and leave it running

Figure: A screen shot of OpenVR-InputEmulator. The right Oculus Touch Controller is attached to the rig.

Figure: Select Set Zero as motion compensation mode.

Consider creating a shortcut to startdesktopmode.bat on your desktop or somewhere accessible. You will need to start it and input the configuration every-time to enable motion cancellation.

Step 6

You are now ready to test the system:

  1. Make sure your rig mounted controller is awake (poke it)
  2. Leave SteamVR and OpenVR-InputEmulator running in the background
  3. Start a game while SteamVR is running
  4. Select SteamVR when prompted by game

The next time

On your next gaming session you will need to perform the following steps to enable motion cancellation:

  1. Make sure your rig mounted controller is awake (poke it)
  2. Start and configure OpenVR-InputEmulator as described in Step 5
  3. Leave SteamVR and OpenVR-InputEmulator running in the background
  4. Select SteamVR when prompted by game

Common errors

What follows is a list of common errors and how to deal with them.

Could not set device mode

The VR-headset must be visible to the VR tracking system while configuring OpenVR-InputEmulator. Otherwise you might encounter this error message:

Figure: Your VR-headset is not visible to VR tracking system. Something is obstructing the system's line of sight. Move your trackers or lift the VR-headset into their line of sight while configuring the system.

Motion compensation inverted

Sometimes the motion compensation algorithm gets confused and compensates in the wrong direction. It can for instance move the camera upwards instead of forwards. This is easily fixed by restarting everything and repositioning the VR tracking system.

Nothing happens

  1. Make sure the game is configured to use SteamVR
  2. Make sure OpenVR-InputEmulator is running and configured as described in Step 5
  3. You must reconfigure OpenVR-InputEmulator for motion cancellation every time
  4. Make sure the correct controller is selected in OpenVR-InputEmulator
  5. The controller may fall into sleep mode while following this guide; wake it