Community:SteamVR Bindings

From VRChat Wiki
Revision as of 09:35, 29 August 2024 by ZenithVal (talk | contribs) (Some more table edits & Added controller info)
IconOnly CL Portal.png
V · ECommunity-written content
The following was created by the community. It may contain material not directly endorsed by the VRChat team. To learn more, consider reading Contributing to the VRChat Wiki.
Tools.png
V · EThis page is a work in progress
This page is actively being worked on, information may be incomplete or out of date. You can help the VRChat Wiki by editing it.
[Reason: No reason provided.]

SteamVR input is a universal keybind system for all controllers usable in SteamVR. Instead of binding keys like "space" to jump, VR game developers provide actions we can directly bind to inputs on SteamVR controllers. The UI also provides a way for users to find or share community bindings. [1]

Official VRChat SteamVR Input 2.0 documentation[2]

Official VRChat SteamVR input 2.0 FAQ[3]

Where

Standard method

  1. Open SteamVR
  2. Find Settings
  3. Select Controllers
  4. Set Advanced Setting to Show
  5. Select Show Binding UI
  6. Select VRChat from the list of applications

Accessing VRChat Bindings.png

Via web browser

  1. Go to http://localhost:27062/dashboard/controllerbinding.html while SteamVR is running
  2. Select VRChat from the list of applications

Via VRChat

  1. Open the main menu
  2. Navigate to Settings
  3. Go to Controls
  4. Select Open SteamVR Input Bindings Panel

Glossary

Terms Explanation
Bindings A complete set of bindings between inputs and actions that can be saved and shared in the Steam Workshop.
Action Behavior that can be bound to inputs or chords, like movement, selection, or bringing up the camera or personal mirror.
Action set A group of actions that corresponds to a specific context, like using the menu or action menu, or global actions that are available in any context.
Control source A specific physical actuator on a controller, like a joystick, trigger, button, or trackpad.
Control source mode

(Use control as)

A mapping that defines how a control source's movements or sensors are interpreted as inputs.

For example, a trackpad can be mapped as dpad or a button, and a joystick can be mapped as joystick or scroll wheel.

Input A specific movement or sensor reading from a control, interpreted through a control source mode.

For example, a button's control source mode might provide touch, press, hold, or double-press inputs.

Mostly from the official docs but with some edits for clarity.

Control Source Modes

Control Source Mode Provided Inputs
Button Touches, Clicks, Holds, Double clicks, and Long presses
Trigger Touch (or any press), Click if there is a physical click at the end of the trigger, and the ammount (0-1) the trigger is depressed)
Joystick XY Positioning, touches, and presses
Trackpad XY Positioning, touches, and presses
DPAD Splits the the XY control source into North, East, South, and West quadrants. Can be used in touch or click mode.
Grab Combines capacitive sensors and force sensors to report a more reliable grab
Force Sensor Gives analog actions a 0-1 value indicating how much force the user is applying to the control
Set analog Action Allows you to use a digital (on/off) control to a set an analog (0-1) value
Toggle Button One press for on, one press for off
Radial Menu (?)

Inputs

Input Usage Types Control Source
Click Pressing the control boolean Any
Touch Touching the assigned control (If it has a touch sensor) boolean Any
Single Pressing the control once boolean Button
Double A quick double press of the control boolean Button
Long Hold the control for 0.5 seconds (?) boolean Button
Held Sets the action to true while the button is held after the long duration. boolean Button
Pull Value 0-1 representing what percentage the trigger is depressed vector1 Trigger
Position The position you are touching on a touchpad or the position you've pushed a joystick to. vector2 Trackpad / Joystick

Actions

Every bindable Action for SteamVR controllers in VRChat. Found in VRChat\VRChat_Data\StreamingAssets\SteamVR\actions.json (Descriptions are community created)

Action Action Set Description Type Requirement
Menu Global, 1H Dual purpose. One activation opens quick menu. Holding it opens the action menu. Double press opens the main menu (If enabled) boolean suggested
Main Menu Global Opens the Main Menu boolean optional
Quick Menu Global Opens the Quick Menu boolean optional
Action Menu Global Opens the Action Menu boolean optional
Interact Global, 1H Interact with world objects and poses physbones boolean
Grab Global, 1H Picks up grabbable world objects boolean
Drop Global, 1H Drops held item. If bound this will enable auto hold functionality. (Items will not be dropped until this is used) boolean optional
Move Global, 1H Player movement vector2
Jump Global, 1H Jump! boolean
Rotate Global Player rotation vector2
Advanced Controls
Start Move (Advanced) Global When this is clicked, begin moving. boolean optional
Start Rotate (Advanced) Global When this is clicked, begin rotating boolean optional
Continue Move (Advanced) Global After Start Move is released, as long as this is still active (usually via touch) movement will continue. boolean optional
Continue Rotate (Advanced) Global After Start Rotate is released, as long as this is still active (usually via touch) rotation will continue. boolean optional
No_Gesture_After_Move Global Prevents gesture wheel touches after Start move click is released boolean optional
No_Gesture_After_Rotate Global Prevents gestures wheel touches after Start rotate click is released boolean optional
Other
Toggle Microphone Global, 1H Toggles the microphone boolean
Gesture Toggle Global, 1H Toggles Gestures boolean optional
Cycle Nameplate Mode Global Cycles through the nameplates modes boolean optional
Toggle HUD Global Toggles the hud boolean optional
Open Chatbox Global Opens the Chatbox boolean optional
Toggle Personal Mirror Global Toggles the Personal Mirror boolean optional
Toggle Earmuffs Global Toggles Earmuffs boolean optional
Open Camera Global Toggles the camera boolean optional
Activate Safe Mode Global Activates Safe mode boolean suggested
Proximity Sensor Global When active, trigger AFK in VRChat boolean optional
One Handed
Move & Rotate (One Handed) One_Hand Combined movement & rotation vector2 suggested
Start Move & Rotate (Advanced) One_Hand When clicked begin Move & Rotate boolean optional
Continue Move & Rotate (Advanced) One_Hand When Start Move & Rotate released, continue as long as this is active. boolean optional
No_Gesture_After_Move_Rotate One_Hand Prevents gestures afterMove & Rotate is released boolean optional
Udon
Udon Menu Global, 1H Registerable by VRChat worlds with Udon. boolean optional
Udon Trigger Axis Global, 1H Registerable by VRChat worlds with Udon. vector1 optional
Udon Grip Axis Global, 1H Registerable by VRChat worlds with Udon. vector1 optional
Udon Stick Click Global, 1H Registerable by VRChat worlds with Udon. boolean optional
Menu
Confirm Menu Clicks on menu items boolean suggested
Back Menu Returns to the previous page (or closes the menu?) boolean optional
Tab Menu (?) boolean optional
Scroll Menu Scrolls in the menu vector2
Close Quick Menu Menu Closes the Quick Menu boolean optional
Drag Menu (?) boolean optional
Action Menu
Axis Action Menu Directional control in the action menu vector2 suggested
Select Action Menu Select hovering item in the action menu boolean
(?)
Pose Data Global The 6-DOF position and orientation of a device tracked device. pose
SkeletonLeftHand Global Used to retrieve bone transform data from the related controllers skeleton suggested
SkeletonRightHand Global skeleton
Haptics Global, 1H Used to apply various haptics to the device. (Such as when hovering over menu elements or the personal mirror) vibration
Gesture Activators
Gesture_Activator_Thumb Global boolean optional
Gesture_Activator_Thumb_Inner_Upper Global boolean optional
Gesture_Activator_Thumb_Inner_Lower Global boolean optional
Gesture_Activator_Thumb_Outer Global boolean optional
Gesture_Activator_Index Global boolean optional
Gesture_Activator_Grip Global boolean optional
Gesture_Trigger_Axis Global vector1 optional
Gesture_Grip_Axis Global vector1 optional
Gesture_Activator_Stick_Deflection Global vector2 optional
Gesture Direct
Gesture_Direct_Neutral_Left Global boolean optional
Gesture_Direct_Fist_Left Global boolean optional
Gesture_Direct_Open_Left Global boolean optional
Gesture_Direct_Peace_Left Global boolean optional
Gesture_Direct_Horns_Left Global boolean optional
Gesture_Direct_Finger_Gun_Left Global boolean optional
Gesture_Direct_Thumbs_Up_Left Global boolean optional
Gesture_Direct_Point_Left Global boolean optional
Gesture_Direct_Neutral_Right Global boolean optional
Gesture_Direct_Fist_Right Global boolean optional
Gesture_Direct_Open_Right Global boolean optional
Gesture_Direct_Peace_Right Global boolean optional
Gesture_Direct_Horns_Right Global boolean optional
Gesture_Direct_Finger_Gun_Right Global boolean optional
Gesture_Direct_Thumbs_Up_Right Global boolean optional
Gesture_Direct_Point_Right Global boolean optional
Gesture Wheel
Gesture_Wheel_Left Global vector2 optional
Gesture_Wheel_Select_Left Global boolean optional
Gesture_Wheel_Soft_Select_Left Global vector1 optional
Gesture_Wheel_Weight_Left Global vector1 optional
Gesture_Wheel_Direct_Left Global boolean optional
Gesture_Wheel_Direct_Stay_Left Global boolean optional
Gesture_Wheel_Cancel_Left Global boolean optional
Gesture_Wheel_Cancel_Open_Left Global boolean optional
Gesture_Wheel_Held_Left Global boolean optional
Gesture_Wheel_Right Global vector2 optional
Gesture_Wheel_Select_Right Global boolean optional
Gesture_Wheel_Soft_Select_Right Global vector1 optional
Gesture_Wheel_Weight_Right Global vector1 optional
Gesture_Wheel_Direct_Right Global boolean optional
Gesture_Wheel_Direct_Stay_Right Global boolean optional
Gesture_Wheel_Cancel_Right Global boolean optional
Gesture_Wheel_Cancel_Open_Right Global boolean optional
Gesture_Wheel_Held_Right Global boolean optional
Disable_Gesture_Wheel_Move_Left Global boolean optional
Disable_Gesture_Wheel_Rotate_Left Global boolean optional
Disable_Gesture_Wheel_Move_Right Global boolean optional
Disable_Gesture_Wheel_Rotate_Right Global boolean optional
Disable_Gesture_Tracked Global (?) boolean optional

Walkthroughs

Adding new inputs

TODO

Double tap menu

TODO

Creating Chords

TODO

Dead zones

TODO

Trigger thresholds

TODO

Changing haptics

TODO

DPAD overlap percentage

TODO

Don'ts

There's certain things you can do to bindings that can cause issues. Try to avoid them when possible

Multiple actions per control source

When you bind multiple actions like this, it stops them from functioning instantaneously and can make them unpredictable. [1]

Bad vs Good method for multiple actions via one control source

A functional use case would be setting action menu to Single and quick menu to Double; this will introduces a small delay after the single press input which can be interrupted by a double click to open the quick menu without accidentally opening the action menu.


Controller info & fixes

Can't do gestures at all

By default coming into the Input 2.0 update, gestures were set to disabled. You can enable them in them in the Action Menu.

Path: Action MenuOptionsAvatar ➜ Gestures

TODO: GIF navigating to toggle

Double tap is opening the Main Menu

This feature was introduced with Input 2.0. You can disable it in the Controls section of the Main Menu

TODO: Location of toggle in context

Disabling finger tracking

Skeletal based finger tracking is enabled by default for all controller types. You can disable it in the Controls section of the Main Menu

TODO: Location of toggle in context

Reverting to old finger tracking

If you prefer the old finger tracking method, navigate to the Quick Actions section of the Action Menu and enabling Legacy fingers. (this will need to be done on a per-avatar basis)

Path: Action MenuExpressionsQuick Actions ➜ Legacy Fingers

TODO: GIF navigating to toggle

Default & Community bindings

TODO: guide to the binding select page with an image.

TODO: Link to SteamVR beta for a fix on community bindings (remove later when fixed)

Hard bindings reset

In rare cases, a full hard reset of your bindings may be needed due to issues with SteamVR.

TODO

Vive

Vive is a little special, two default binding modes are available with different feature sets. (TODO: write about them)

No touch to move / Emotes are "sticky"

It's likely that you previously used Vive Advanced controls before Input 2.0. You can restore Advanced behavior you're used to by switching from Default Bindings over to the Default Advanced Bindings which can be found on the bindings select page.

Difficulty moving

The default thresholds for movement on Vive controllers require you to hit the very edges of the touchpad. This can be changed by adjusting Dead zones.

TODO: Recommended values for Simple & Advanced

Accidental jumping

With a mix of adjustments to Overlap percentage & Dead zone on the Trackpad DPADs, you can restore pre-Input 2.0 behavior.

TODO: Recommended values for both

Grip isn't doing hand open / Isn't clearing gestures

This seems to be an oversight with Vive Advanced Bindings, you'll need to add the Gesture_wheel_cancel_open_left & right actions to your grips as a Button press inputs.

TODO: image showing what the newly added button should look like

Index

Easier Object holding

HP Reverb G2

TODO: More controller types, need users with more experience on other types.

References