back

joystick controller in SteamVR

Five kinds of controllers

  • DirectInput (non-gamepad) e.g. HOTAS (joysticks), button boxes.
  • gamepad (PlayStation, XBox 360 (XInput), etc)
  • hand tracking and gestures (e.g. UltraLeap)
  • MIDI
  • motion (6 DoF VR):  sense position and angle for virtual laser pointing

SteamVR used to support DirectInput

  • Specifically, this HOTAS HOW-TO described
    "7. On the popup, give the controller an easy label like "My NMS Joystick";
      select "Xbox One Controller" for the type"
    ... but neither popup nor option to select type now exists.
  • Microsoft dropped WMR support in Windows 11;

Other than motion controllers, SteamVR now supports only XInput

Hand-On Throttle-And-Stick (HOTAS) as VR controller

  • HOTAS IMO beats emulating motion controllers by hand gestures.
    Assetto Corsa unavoidably involves SteamVR,
      but VR motion controllers are hateful, IMO particularly in driving sims.
    2D apps such as Content Manager are seemingly unusable in VR,
    without some controller, except perhaps in a virtual desktop.
    - Simulate key presses to Windows desktop from SteamVR input
    For more than a few buttons, a flight joystick (HOTAS) is wanted.

    Microsoft SideWinder Precision 2 USB Controller Joystick works as a HOTAS.

    Also VKB NXT EVO SCE, with more controls than an XBox 360 gamepad

    ...or WINWING URSA MINOR Fighter - manual
    29 buttons and mini joystick (34) on the grip

    XInput emulation

    Several XInput emulators employ nefarius' ViGEm kernel-mode driver,
      which obsoleted SCP Virtual Bus Driver.
    Windows->Settings->Gaming->Game Bar->Allow your controller to open Game Bar

    XOutput converts and maps DirectInput into XInput
    Very straight-forward to configure, works well for VKB EVO NXT
    archived Dec 3, 2024, now read-only;  deprecated with ViGEm
    configuration In my case, ViGEm had already been installed
    (by X360CE, which has a Guide button bug and confusing interface).
    On opening, upper window pane enumerates detected DirectInput devices;
    bottom half will be empty.

    Click Add controller, then Edit for Controller window:

    For each XInput control to emulate,
    • click corresponding Configure,
    • then DirectInput device control to be mapped.

    After mapping all controls,
    • close the Controller window, and
    • click Start to enable emulation and
    • Save configuration to write settings.json.

    File->Game Controllers will launch Windows' control panel:

    to verify control emulations:
    • select Controller (XBOX 360 for Windows),
    • then Properties
    alternatives

    DsHidMini supports Sony DualShock 3 Controllers to SteamVR as XInput
    Fumbling around for a game controller during VR sim driving is not ideal...
    X360CE bundles ViGEm X360CE has tons of underdocumented configuration options...


    Except for Guide button, this works for VKB EVO NXT:


    Option overkill;  Guide button mapping is broken
    Universal Control Remapper AKA UCR
    uses ViGEm, allows remapping inputs from devices
    such as second mice (using interception) and joysticks to virtual HID game controllers.
    World of Joysticks (WoJ)
    Last updated in 2022;  employs SCPVirtualBus, Microsoft Xbox360Controller drivers
    Listed in Steam, but no matches for using it with SteamVR;
    - supports more than one DirectInput device in a single emulated XBox 360
    - haptic feedback can be redirected to bass shakers
    Joystick Gremlin reportedly emulates XInput
    - merges multiple devices to a single virtual device
    - depends on vJoy

    Xbox360 Controller Binding in SteamVR

      SteamVR recognizes XInput gamepads;  binding controls is another hassle.



    Legacinator removes known outdated controller emulator device drivers.

    XInput app enables using keyboard instead of XBox buttons.

    vigem-example-dotnet
    Basic use of ViGem .NET SDK to send emulated XBox controller values

    XInputDotNet handle XInput controls in C#
    Unity tutorial

    XInputium is another .NET library for XInput integration
  • maintained by blekenbleu