Community:SteamVR Bindings: Difference between revisions

From VRChat Wiki
m (Typo*)
m (Removed side by side notice boxes)
 
Line 1: Line 1:
{{Noticebox/Community}}
{{Noticebox/Community}}
{|
{{Stub|Need input from more popular controller types}}
!{{Noticebox/wip|Still creating sections & tutorials}}
{{Noticebox/wip|Still creating sections & tutorials}}
!{{Stub|Need input from more popular controller types}}
 
|}
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. <ref name=":0">https://github.com/OpenVR-Advanced-Settings/OpenVR-AdvancedSettings/blob/master/docs/SteamVRInputGuide.md</ref>  
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. <ref name=":0">https://github.com/OpenVR-Advanced-Settings/OpenVR-AdvancedSettings/blob/master/docs/SteamVRInputGuide.md</ref>  


Line 23: Line 22:
[[File:SteamVR Input - Accessing VRChat Bindings.png]]
[[File:SteamVR Input - Accessing VRChat Bindings.png]]


===Via web browser===
===Via web browser ===


#Go to http://localhost:27062/dashboard/controllerbinding.html while S'''teamVR is running'''
#Go to http://localhost:27062/dashboard/controllerbinding.html while S'''teamVR is running'''
Line 31: Line 30:


#Open the main menu
#Open the main menu
#Navigate to [[Settings]]
# Navigate to [[Settings]]
#Go to [[Settings#Controls|Controls]]
#Go to [[Settings#Controls|Controls]]
#Select '''<code>Open SteamVR Input Bindings Panel</code>'''
#Select '''<code>Open SteamVR Input Bindings Panel</code>'''
Line 37: Line 36:
==Glossary==
==Glossary==
{| class="wikitable"
{| class="wikitable"
! Terms
!Terms
!Explanation  
!Explanation
|-
|-
|Bindings  
|Bindings
|A complete set of bindings between inputs and actions that can be saved and shared in the Steam Workshop.
|A complete set of bindings between inputs and actions that can be saved and shared in the Steam Workshop.
|-
|-
|Action
|Action
|Behavior that can be bound to inputs or chords, like movement, selection, or bringing up the camera or personal mirror.
|Behavior that can be bound to inputs or chords, like movement, selection, or bringing up the camera or personal mirror.  
|-
|-
|Action set
|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.  
|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
|Control source
|A specific '''physical''' actuator on a controller, like a joystick, trigger, button, or trackpad.
|A specific '''physical''' actuator on a controller, like a joystick, trigger, button, or trackpad.
|-
|-
| Control source mode
|Control source mode
''(Use control as)''
''(Use control as)''
|A mapping that defines how a control source's movements or sensors are interpreted as inputs.  
|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.  
For example, a trackpad can be mapped as dpad or a button, and a joystick can be mapped as joystick or scroll wheel.  
|-
|-
|Input  
|Input
 
|A specific movement or sensor reading from a control, interpreted through a control source mode.  
|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.
For example, a button's control source mode might provide touch, press, hold, or double-press inputs.  
|-
|-
|Chords
|Chords
Line 72: Line 72:
|-
|-
|Button
|Button
|Touches, Clicks, Holds, Double clicks, and Long presses  
|Touches, Clicks, Holds, Double clicks, and Long presses
|-
|-
|Trigger
|Trigger
Line 78: Line 78:
|-
|-
|Joystick
|Joystick
|XY Positioning, touches, and presses
|XY Positioning, touches, and presses  
|-
|-
|Trackpad
|Trackpad
|XY Positioning, touches, and presses
|XY Positioning, touches, and presses  
|-
|-
|DPAD
|DPAD
Line 90: Line 90:
|-
|-
|Force Sensor
|Force Sensor
|Gives analog actions a 0-1 value indicating how much force the user is applying to the control  
|Gives analog actions a 0-1 value indicating how much force the user is applying to the control


|-
|-
|Set analog Action
| Set analog Action
|Allows you to use a digital (on/off) control to a set an analog (0-1) value
|Allows you to use a digital (on/off) control to a set an analog (0-1) value
|-
|-
|Toggle Button
|Toggle Button
|One press for on, one press for off  
|One press for on, one press for off
|-
|-
|Radial Menu
|Radial Menu
Line 103: Line 103:
|}
|}


===Input Methods ===
===Input Methods===
{| class="wikitable mw-collapsible mw-collapsed"
{| class="wikitable mw-collapsible mw-collapsed"
!Input
!Input
Line 111: Line 111:
|-
|-
|Click
|Click
|Pressing the control  
|Pressing the control
|boolean
|boolean
|Any
|Any
|-
|-
|Touch
|Touch
|Touching the assigned control (If it has a touch sensor)  
|Touching the assigned control (If it has a touch sensor)
|boolean
|boolean
|Any
|Any
Line 126: Line 126:
|-
|-
|Double
|Double
|A quick double press of the control
|A quick double press of the control  
|boolean
|boolean
|Button
|Button
Line 141: Line 141:
|-
|-
|Pull
|Pull
| Value 0-1 representing what percentage the trigger is depressed
|Value 0-1 representing what percentage the trigger is depressed
|vector1
|vector1
|Trigger
|Trigger
Line 192: Line 192:
|Grab
|Grab
|Global, 1H
|Global, 1H
|Picks up grabbable world objects  
|Picks up grabbable world objects
|boolean
|boolean
|suggested
|suggested
Line 226: Line 226:
|Start Move (Advanced)
|Start Move (Advanced)
|Global
|Global
|When this is clicked, begin moving.  
|When this is clicked, begin moving.
|boolean
|boolean
|optional
|optional
Line 283: Line 283:
|Toggle HUD
|Toggle HUD
|Global, 1H
|Global, 1H
|Toggles [[HUD]]
|Toggles [[HUD]]  
|boolean
|boolean
|optional
|optional
|-
|-
|Cycle Nameplate Mode  
|Cycle Nameplate Mode
|Global, 1H
|Global, 1H
|Cycles through [[Nameplates#Nameplate element visibility|Nameplates Modes]]
|Cycles through [[Nameplates#Nameplate element visibility|Nameplates Modes]]  
|boolean
|boolean
|optional
|optional
|-
|-
|Open Chatbox
|Open Chatbox  
|Global, 1H
|Global, 1H
|Opens [[Chatbox]]
|Opens [[Chatbox]]
Line 341: Line 341:
|optional
|optional
|-
|-
|Confirm FBT Calibration  
|Confirm FBT Calibration
|Global, 1H
|Global, 1H
|If bound, replaces the default trigger press to lock FBT binding.
|If bound, replaces the default trigger press to lock FBT binding.
Line 353: Line 353:
|optional
|optional
|-
|-
|Toggle OSC Debug Screen"
|Toggle OSC Debug Screen"  
|Global, 1H
|Global, 1H
|Toggles [[Debug Menu|OSC Debug Console]]
|Toggles [[Debug Menu|OSC Debug Console]]
Line 359: Line 359:
|optional
|optional
|-
|-
|Disable Gesture Tracked
|Disable Gesture Tracked  
|Global, Action
|Global, Action
|Stops gestures via pose from running if bound.
|Stops gestures via pose from running if bound.
Line 382: Line 382:
|Continue Move & Rotate
|Continue Move & Rotate
|One_Hand
|One_Hand
|When Start Move & Rotate released, continue as long as this is active.  
|When Start Move & Rotate released, continue as long as this is active.
|boolean
|boolean
|optional
|optional
Line 443: Line 443:
|Menu
|Menu
|Scrolls in the menu
|Scrolls in the menu
|vector2
| vector2
|
|
|-
|-
|Close Quick Menu
|Close Quick Menu
| Menu
| Menu
|[[Quick Menu|Closes the Quick Menu]]
| [[Quick Menu|Closes the Quick Menu]]
|boolean
|boolean
|optional
|optional
Line 477: Line 477:
|-
|-
|Pose Data
|Pose Data
|Global
| Global
|The 6-DOF position and orientation of a device tracked device.  
|The 6-DOF position and orientation of a device tracked device.
|pose
|pose
|
|
Line 495: Line 495:
|Haptics
|Haptics
|Global, 1H
|Global, 1H
|Used to apply various haptics to the device. (Such as when hovering over menu elements or the personal mirror)  
|Used to apply various haptics to the device. (Such as when hovering over menu elements or the personal mirror)
|vibration
|vibration
|
|
|-
|-
! colspan="2" |Gesture Activator (GA)
! colspan="2" |Gesture Activator (GA)
! colspan="3" |Activators for (?)  
! colspan="3" |Activators for (?)
|-
|-
|GA (Thumb)  
|GA (Thumb)
|Global
|Global
|
|
Line 526: Line 526:
|optional
|optional
|-
|-
|GA (Index Finger)  
|GA (Index Finger)
|Global
|Global
|
|
Line 605: Line 605:
|-
|-
|UG - Thumbs Up (Left/Right)
|UG - Thumbs Up (Left/Right)
|Global  
|Global
|Sets Gesture(Left/Right) to <code>7 (Thumbsup)</code>
|Sets Gesture(Left/Right) to <code>7 (Thumbsup)</code>
|boolean
|boolean
Line 611: Line 611:
|-
|-
! colspan="2" |Gesture Wheel (GW)
! colspan="2" |Gesture Wheel (GW)
! colspan="3" |Gesture wheel of emotes based on pre-input 2.0 Vive touchpad Gesture control  
! colspan="3" |Gesture wheel of emotes based on pre-input 2.0 Vive touchpad Gesture control
|-
|-
|GW (Left/Right)
|GW (Left/Right)
|Global, Act, 1H  
|Global, Act, 1H
|The XY position of the gesture wheel
|The XY position of the gesture wheel
|vector2
|vector2
Line 620: Line 620:
|-
|-
|GW Select (Left/Right)
|GW Select (Left/Right)
|Global, Act, 1H  
|Global, Act, 1H
|Selects a gesture that will be released after activation stops
|Selects a gesture that will be released after activation stops
|boolean
|boolean
Line 626: Line 626:
|-
|-
|GW Held (Left/Right)
|GW Held (Left/Right)
|Global, Act, 1H
|Global, Act, 1H  
|Selects a gesture that will remain after activation stops
|Selects a gesture that will remain after activation stops
|boolean
|boolean
Line 632: Line 632:
|-
|-
|GW Direct (Left/Right)
|GW Direct (Left/Right)
|Global, Act, 1H  
|Global, Act, 1H
|(?)  
|(?)
|boolean
|boolean
|optional
|optional
|-
|-
|GW Direct Stay (Left/Right)
|GW Direct Stay (Left/Right)
|Global, Act, 1H  
|Global, Act, 1H
|(?)  
|(?)
|boolean
|boolean
|optional
|optional
|-
|-
|GW Soft Select (Left/Right)
|GW Soft Select (Left/Right)
|Global, Act, 1H
|Global, Act, 1H  
|Selects a gesture which can be used with Gesture wheel Weight
|Selects a gesture which can be used with Gesture wheel Weight
|vector1
|vector1
Line 650: Line 650:
|-
|-
|GW Weight (Left/Right)
|GW Weight (Left/Right)
|Global, Act, 1H  
|Global, Act, 1H
|Analog driving value of the current gesture  
|Analog driving value of the current gesture
|vector1
|vector1
|optional
|optional
|-
|-
|GW Cancel (Left/Right)
|GW Cancel (Left/Right)
|Global, Act, 1H  
|Global, Act, 1H
|Sets the current gesture to <code>1 (Fist)</code> and <code>0 (neutral)</code> after release  
|Sets the current gesture to <code>1 (Fist)</code> and <code>0 (neutral)</code> after release
|boolean
|boolean
|optional
|optional
|-
|-
|GW Cancel Open (Left/Right)
|GW Cancel Open (Left/Right)
|Global, Act, 1H  
|Global, Act, 1H
|Sets the current gesture to <code>2 (HandOpen)</code> and <code>0 (neutral)</code> after release  
|Sets the current gesture to <code>2 (HandOpen)</code> and <code>0 (neutral)</code> after release
|boolean
|boolean
|optional
|optional
|-
|-
|GW Disable Move (Left/Right)
|GW Disable Move (Left/Right)
|Global, Act, 1H
|Global, Act, 1H  
|Disables gesture wheel while clicked (prevents emotes while walking)
|Disables gesture wheel while clicked (prevents emotes while walking)
|boolean
|boolean
Line 674: Line 674:
|-
|-
|GW Disable Rotate (Left/Right)
|GW Disable Rotate (Left/Right)
|Global, Act, 1H
|Global, Act, 1H  
|Disables gesture wheel while clicked (prevents emotes while rotating)
|Disables gesture wheel while clicked (prevents emotes while rotating)
|boolean
|boolean
Line 689: Line 689:
These walkthroughs require you to navigate to the [[Community:SteamVR_Bindings#Where|VRChat SteamVR Bindings page]].
These walkthroughs require you to navigate to the [[Community:SteamVR_Bindings#Where|VRChat SteamVR Bindings page]].


=== Default Bindings===
===Default Bindings===
To reset your bindings to default, navigate to the [[Community:SteamVR_Bindings#Where|VRChat SteamVR Bindings page]] and select <code>Activate</code> on the official Default Bindings available for your controller.  
To reset your bindings to default, navigate to the [[Community:SteamVR_Bindings#Where|VRChat SteamVR Bindings page]] and select <code>Activate</code> on the official Default Bindings available for your controller.  


[[File:SteamVR Input - Default Bindings.png|1100x1100px]]
[[File:SteamVR Input - Default Bindings.png|1100x1100px]]


===Binding editing page ===
===Binding editing page===
Navigate to the [[Community:SteamVR_Bindings#Where|VRChat SteamVR Bindings page]] and select <code>Edit</code> on the current Binding.
Navigate to the [[Community:SteamVR_Bindings#Where|VRChat SteamVR Bindings page]] and select <code>Edit</code> on the current Binding.


Line 704: Line 704:
[[File:SteamVR Input - Accessing Input Settings.png|border|800x800px]]
[[File:SteamVR Input - Accessing Input Settings.png|border|800x800px]]


===Additional input methods ===
===Additional input methods===
To use additional [[Community:SteamVR Bindings|input methods]] such as double click, find the input you'd like to configure and hover over it to click the pencil icon for editing. Next click <code>More Options</code> and then you'll have access to additional input methods besides click.  
To use additional [[Community:SteamVR Bindings|input methods]] such as double click, find the input you'd like to configure and hover over it to click the pencil icon for editing. Next click <code>More Options</code> and then you'll have access to additional input methods besides click.  


[[File:SteamVR Input - Additional Input Methods.png|1180x1180px]]
[[File:SteamVR Input - Additional Input Methods.png|1180x1180px]]


===Creating new inputs / Control sources===
===Creating new inputs / Control sources ===
On any of a controller's existing control sources, you can create new inputs with a specific [[Community:SteamVR Bindings|control source modes]]. To do this, click the plus button to the right of any of the control sources and select a control source mode from the available list.  
On any of a controller's existing control sources, you can create new inputs with a specific [[Community:SteamVR Bindings|control source modes]]. To do this, click the plus button to the right of any of the control sources and select a control source mode from the available list.  


Line 732: Line 732:
TODO
TODO


===Changing haptics===
===Changing haptics ===
Most control sources on the default bindings have an [[Community:SteamVR Bindings#Changing Input Settings|input setting]] for <code>Haptic Amplitude</code>. To turn haptics off, you'll need to go through '''every''' control source [[Community:SteamVR Bindings#Changing Input Settings|input setting]] on the controller and set <code>Haptic Amplitude</code> to '''0'''. Make sure to also check the control sources in other action sets besides global. If you want to remove the haptics upon hovering over menu items in VRChat, select the <code>Haptics</code> button in the center of the Global action set & change <code>Left/Right Hand Haptics</code> to '''Unused.'''
Most control sources on the default bindings have an [[Community:SteamVR Bindings#Changing Input Settings|input setting]] for <code>Haptic Amplitude</code>. To turn haptics off, you'll need to go through '''every''' control source [[Community:SteamVR Bindings#Changing Input Settings|input setting]] on the controller and set <code>Haptic Amplitude</code> to '''0'''. Make sure to also check the control sources in other action sets besides global. If you want to remove the haptics upon hovering over menu items in VRChat, select the <code>Haptics</code> button in the center of the Global action set & change <code>Left/Right Hand Haptics</code> to '''Unused.'''


Line 742: Line 742:
<blockquote>
<blockquote>
====Export====
====Export====
# Navigate to [[Community:SteamVR Bindings|bindings Editing page]] select <code>Export Binding File</code>
#Navigate to [[Community:SteamVR Bindings|bindings Editing page]] select <code>Export Binding File</code>
# Navigate to <code>(Your Documents)\steamvr\input\exports</code> to find the .json file.
#Navigate to <code>(Your Documents)\steamvr\input\exports</code> to find the .json file.
# Share as needed!
#Share as needed!


====Import====
====Import====
# Place the binding .json file in <code>(Your Documents)\steamvr\input\imports</code> <small>(create folder if it doesn't exist)</small>
#Place the binding .json file in <code>(Your Documents)\steamvr\input\imports</code> <small>(create folder if it doesn't exist)</small>
# Navigate to the [[Community:SteamVR Bindings|Bindings config]] for the app the Binding is for. <small>(VRChat likely in this case)</small>
#Navigate to the [[Community:SteamVR Bindings|Bindings config]] for the app the Binding is for. <small>(VRChat likely in this case)</small>
# Select the binding from the list of <code>"Bindings in the documents directory"</code> <small>(You do not need to close SteamVR)</small>  
#Select the binding from the list of <code>"Bindings in the documents directory"</code> <small>(You do not need to close SteamVR)</small>
<blockquote>[[File:SteamVR Input - Importing Bindings.png|800x800px]]<br /></blockquote>
<blockquote>[[File:SteamVR Input - Importing Bindings.png|800x800px]]<br /></blockquote>
</blockquote>
</blockquote>
Line 757: Line 757:
There's certain things you can do to bindings that can cause issues. Try to avoid them when possible
There's certain things you can do to bindings that can cause issues. Try to avoid them when possible


=== Multiple actions per control source===
===Multiple actions per control source===
When you bind multiple actions like this, it stops them from functioning instantaneously and can make them unpredictable. <ref name=":0" />
When you bind multiple actions like this, it stops them from functioning instantaneously and can make them unpredictable. <ref name=":0" />


Line 765: Line 765:




==Controller info & fixes==
==Controller info & fixes ==


===All controllers===
===All controllers===
Line 771: Line 771:
<blockquote>
<blockquote>


==== Can't do gestures at all====
====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]].
By default coming into the Input 2.0 update, gestures were set to disabled. You can enable them in them in the [[Action Menu]].
<code>Path: [[Action Menu]] ➜ [[Action Menu|Options]] ➜ [[Action Menu|Avatar]] ➜ Gestures</code>
<code>Path: [[Action Menu]] ➜ [[Action Menu|Options]] ➜ [[Action Menu|Avatar]] ➜ Gestures</code>
Line 799: Line 799:




===Vive Wands===
=== Vive Wands===
<blockquote>
<blockquote>


Line 811: Line 811:
====Difficulty moving ====
====Difficulty moving ====
The default thresholds for movement on Vive controllers require you to hit the edges of the touchpad. You can adjust the trackpad [[Community:SteamVR Bindings#Deadzones|Deadzones]] to change this.
The default thresholds for movement on Vive controllers require you to hit the edges of the touchpad. You can adjust the trackpad [[Community:SteamVR Bindings#Deadzones|Deadzones]] to change this.
====Accidental jumping====
====Accidental jumping ====
With a mix of adjustments to [[Community:SteamVR Bindings|Overlap percentage]] & [[Community:SteamVR Bindings#Deadzones|Deadzones]] on the Trackpad DPADs, you can restore the pre-Input 2.0 zone for jumping.
With a mix of adjustments to [[Community:SteamVR Bindings|Overlap percentage]] & [[Community:SteamVR Bindings#Deadzones|Deadzones]] on the Trackpad DPADs, you can restore the pre-Input 2.0 zone for jumping.
====Physbone posing with grip ====
====Physbone posing with grip====
At time of writing (8/30/24) Physbone posing is part to the <code>interact</code> action and there's is no way to restore pre-input 2.0 functionality of pose via Grip without sacrificing other functionalities.  
At time of writing (8/30/24) Physbone posing is part to the <code>interact</code> action and there's is no way to restore pre-input 2.0 functionality of pose via Grip without sacrificing other functionalities.  
<blockquote>[https://feedback.vrchat.com/open-beta/p/1501-vive-controllers-unwanted-gesture-behavior-in-action-menu Related Canny]</blockquote>
<blockquote>[https://feedback.vrchat.com/open-beta/p/1501-vive-controllers-unwanted-gesture-behavior-in-action-menu Related Canny]</blockquote>


====Unwanted Action Menu gestures ====
====Unwanted Action Menu gestures====
This is because the Action Menu action set is a copy of the Global action set. If you wish to keep Fist/Open hand functional but prevent the trackpad from firing emotes, you can migrate the actions of <code>Gesture Wheel - Disable Move</code> And <code>Gesture Wheel - Disable Rotate</code> to Touch on their respective Buttons instead of Click. If you want to disable ALL gestures (including fist/open hand) while the action menu is open, you can delete all Gesture Wheel actions from the Action menu action set all together.  
This is because the Action Menu action set is a copy of the Global action set. If you wish to keep Fist/Open hand functional but prevent the trackpad from firing emotes, you can migrate the actions of <code>Gesture Wheel - Disable Move</code> And <code>Gesture Wheel - Disable Rotate</code> to Touch on their respective Buttons instead of Click. If you want to disable ALL gestures (including fist/open hand) while the action menu is open, you can delete all Gesture Wheel actions from the Action menu action set all together.  
<blockquote>[https://feedback.vrchat.com/open-beta/p/1501-vive-controllers-unwanted-gesture-behavior-in-action-menu Related Canny]</blockquote>
<blockquote>[https://feedback.vrchat.com/open-beta/p/1501-vive-controllers-unwanted-gesture-behavior-in-action-menu Related Canny]</blockquote>
Line 828: Line 828:
===Index===
===Index===
<blockquote>
<blockquote>
====Easier object holding====
====Easier object holding ====
To make it easier to grab and or harder to drop, find the `Grip` Control Source then look for `Grab` & [[Community:SteamVR Bindings|adjust the input settings]]. Increasing the Grab Threshold will increase the amount of force you must apply to initially pick up the object and the Release Threshold will change the amount of force it must be less than to drop.
To make it easier to grab and or harder to drop, find the `Grip` Control Source then look for `Grab` & [[Community:SteamVR Bindings|adjust the input settings]]. Increasing the Grab Threshold will increase the amount of force you must apply to initially pick up the object and the Release Threshold will change the amount of force it must be less than to drop.


Line 837: Line 837:
Add the <code>Disable Gesture Tracked</code> action anywhere controller to disable all skeletal hand pose gestures.   
Add the <code>Disable Gesture Tracked</code> action anywhere controller to disable all skeletal hand pose gestures.   


====Viveified gestures====
==== Viveified gestures====
Using the Touchpad of Index Controllers for gestures like Vive is possible with SteamVR bindings.  
Using the Touchpad of Index Controllers for gestures like Vive is possible with SteamVR bindings.  



Latest revision as of 03:42, 1 December 2024

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.
Vrrat posed-right.png
V · EThis page is a stub.
You can help the VRChat Wiki by improving it.
[Reason: Need input from more popular controller types]
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: Still creating sections & tutorials]

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

SteamVR Input - 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.

Chords Bindings that combine two or more inputs to execute one action

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 (?)

Input Methods

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 suggested
Grab Global, 1H Picks up grabbable world objects boolean suggested
Drop Global, 1H Drops held item. Enables Auto Hold. (Prevents item drop unless triggered) boolean optional
Move Global, 1H Player movement vector2
Jump Global, 1H Jump! boolean
Rotate Global Player rotation vector2
Advanced Controls Alternative movement for touchpads that share the Gesture Wheel
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 If Start move is released, as long as this is active, movement will continue. boolean optional
Continue Rotate (Advanced) Global If Start rotate is released, as long as this is active, 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
Miscellaneous Other optional functionalities
Toggle Microphone Global, 1H Toggles Microphone boolean optional
Gesture Toggle Global, 1H Toggles Gestures boolean optional
Activate Safe Mode Global Activates Safe mode boolean suggested
Toggle HUD Global, 1H Toggles HUD boolean optional
Cycle Nameplate Mode Global, 1H Cycles through Nameplates Modes boolean optional
Open Chatbox Global, 1H Opens Chatbox boolean optional
Open Camera Global, 1H Toggles Camera boolean optional
Open Stream Camera Global, 1H Toggles Stream Camera
Toggle Earmuffs Global, 1H Toggles Earmuffs boolean optional
Proximity Sensor Global When active, trigger AFK in VRChat boolean optional
Toggle Personal Mirror Global Toggles Personal Mirror boolean optional
Toggle Personal Mirror Grabbing Global Toggles grabbing on Personal Mirror boolean optional
Toggle Face Mirror Global, 1H Toggles Face Mirror boolean optional
Confirm FBT Calibration Global, 1H If bound, replaces the default trigger press to lock FBT binding. boolean optional
Toggle Avatar Debug Screen Global, 1H Toggles Avatar Debug Screen boolean optional
Toggle OSC Debug Screen" Global, 1H Toggles OSC Debug Console boolean optional
Disable Gesture Tracked Global, Action Stops gestures via pose from running if bound. boolean optional
One Handed (1H) Specifically for the one handed action set
Move & Rotate One_Hand Combined movement & rotation vector2 suggested
Start Move & Rotate One_Hand When clicked begin Move & Rotate boolean optional
Continue Move & Rotate 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 Inputs used by Udon worlds
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 Specifically for the menu action set
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 Specifically for the action menu action set
Axis Action Directional control in the action menu vector2 suggested
Select Action 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 Activator (GA) Activators for (?)
GA (Thumb) Global boolean optional
GA (Thumb Inner-Upper) Global boolean optional
GA (Thumb, Inner-Lower) Global boolean optional
GA (Thumb, Outer) Global boolean optional
GA (Index Finger) Global boolean optional
GA (Grip) Global boolean optional
GA (Stick Deflection) Global vector2 optional
Gesture (?)
Gesture - Trigger Axis Global vector1 optional
Gesture - Grip Axis Global vector1 optional
Gesture Direct | Use Gesture (UG) Used to directly set the integer values of GestureLeft/GestureRight
UG - Neutral (Left/Right) Global Sets Gesture(Left/Right) to 0 (Neutral) boolean optional
UG - Fist (Left/Right) Global Sets Gesture(Left/Right) to 1 (Fist) boolean optional
UG - Open (Left/Right) Global Sets Gesture(Left/Right) to 2 (HandOpen) boolean optional
UG - Point (Left/Right) Global Sets Gesture(Left/Right) to 3 (FingerPoint) boolean optional
UG - Peace (Left/Right) Global Sets Gesture(Left/Right) to 4 (Victory) boolean optional
UG - Horns (Left/Right) Global Sets Gesture(Left/Right) to 5 (RockNRoll) boolean optional
UG - Finger Gun (Left/Right) Global Sets Gesture(Left/Right) to 6 (HandGun) boolean optional
UG - Thumbs Up (Left/Right) Global Sets Gesture(Left/Right) to 7 (Thumbsup) boolean optional
Gesture Wheel (GW) Gesture wheel of emotes based on pre-input 2.0 Vive touchpad Gesture control
GW (Left/Right) Global, Act, 1H The XY position of the gesture wheel vector2 optional
GW Select (Left/Right) Global, Act, 1H Selects a gesture that will be released after activation stops boolean optional
GW Held (Left/Right) Global, Act, 1H Selects a gesture that will remain after activation stops boolean optional
GW Direct (Left/Right) Global, Act, 1H (?) boolean optional
GW Direct Stay (Left/Right) Global, Act, 1H (?) boolean optional
GW Soft Select (Left/Right) Global, Act, 1H Selects a gesture which can be used with Gesture wheel Weight vector1 optional
GW Weight (Left/Right) Global, Act, 1H Analog driving value of the current gesture vector1 optional
GW Cancel (Left/Right) Global, Act, 1H Sets the current gesture to 1 (Fist) and 0 (neutral) after release boolean optional
GW Cancel Open (Left/Right) Global, Act, 1H Sets the current gesture to 2 (HandOpen) and 0 (neutral) after release boolean optional
GW Disable Move (Left/Right) Global, Act, 1H Disables gesture wheel while clicked (prevents emotes while walking) boolean optional
GW Disable Rotate (Left/Right) Global, Act, 1H Disables gesture wheel while clicked (prevents emotes while rotating) boolean optional
________________________________ ________________

Walkthroughs

These walkthroughs require you to navigate to the VRChat SteamVR Bindings page.

Default Bindings

To reset your bindings to default, navigate to the VRChat SteamVR Bindings page and select Activate on the official Default Bindings available for your controller.

SteamVR Input - Default Bindings.png

Binding editing page

Navigate to the VRChat SteamVR Bindings page and select Edit on the current Binding.

SteamVR Input - Editing Bindings.png

Changing input settings

Almost all inputs can be configured. Find the input you'd like to configure and hover over it, you'll see a pencil icon you can click. After clicking the pencil you'll find a cogwheel on the right side of the input which will bring up dialogue box with input settings.

SteamVR Input - Accessing Input Settings.png

Additional input methods

To use additional input methods such as double click, find the input you'd like to configure and hover over it to click the pencil icon for editing. Next click More Options and then you'll have access to additional input methods besides click.

SteamVR Input - Additional Input Methods.png

Creating new inputs / Control sources

On any of a controller's existing control sources, you can create new inputs with a specific control source modes. To do this, click the plus button to the right of any of the control sources and select a control source mode from the available list.

SteamVR Input - New Control Sources.png

Creating Chords

TODO

Deadzones

To change the deadzones on control sources like Trackpads & Joysticks, open their input settings and adjust the values to your liking. DeadZone is what you'd expect and Max Zone Percentage determines how far from the center of the control source is 100% value.

SteamVR Input - Deadzones.png

Curve Exponent

This exponent value is applied to change how speed scales on the final relative position between the Deadzone and Max Zone. Speed = Value^Exponent

SteamVR Input - Curve Exponent.png

Trigger thresholds

TODO

Changing haptics

Most control sources on the default bindings have an input setting for Haptic Amplitude. To turn haptics off, you'll need to go through every control source input setting on the controller and set Haptic Amplitude to 0. Make sure to also check the control sources in other action sets besides global. If you want to remove the haptics upon hovering over menu items in VRChat, select the Haptics button in the center of the Global action set & change Left/Right Hand Haptics to Unused.

DPAD overlap percentage

TODO

Manual Binding export/import

Due to how Community Bindings sort by usage time, it can be difficult to share a newly created binding with others. Manual methods use a .json file for sharing.

Export

  1. Navigate to bindings Editing page select Export Binding File
  2. Navigate to (Your Documents)\steamvr\input\exports to find the .json file.
  3. Share as needed!

Import

  1. Place the binding .json file in (Your Documents)\steamvr\input\imports (create folder if it doesn't exist)
  2. Navigate to the Bindings config for the app the Binding is for. (VRChat likely in this case)
  3. Select the binding from the list of "Bindings in the documents directory" (You do not need to close SteamVR)

SteamVR Input - Importing Bindings.png


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

All controllers

Various fixes that are potentially globally applicable.

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 in action menu

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

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

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. (per-avatar basis)

Path: Action MenuExpressionsQuick Actions ➜ Legacy Fingers

TODO: GIF navigating to toggle in action menu

Explicit input Gestures only

On controllers with Gesture Activators, such as Index, Open hand is triggered by a lack of input. If you want to only do Explicit gesture inputs on these controllers, you'll need to add the Disable Gesture Tracked Action anywhere to your binds. It doesn't matter where.

Tracking breaking in SteamVR Dashboard

This is due to SteamVR Keyboard privacy introduced in version 2.7 which stops applications from seeing device positions while the Steam keyboard is visible. In SteamVR settings, navigate to Dashboard and set Keyboard Privacy to Disabled.

Hard Bindings reset

In rare cases, a full hard reset of your Bindings for VRChat may help solve unknown issues. Navigating to (username)/Documents/steamvr/input and delete the steam.app.438100_controlType.json of the affected controller type. Restart VRChat to generate new files.


Vive Wands

Advanced Controls

Under the Official Bindings for Vive Controllers you can choose between Default Bindings & Default Advanced Bindings.

Default Vive & Default Advanced Vive vary in gesture control & movement. In Advanced mode, you can click the trackpad to move then release click but continue touching the trackpad to continue moving. Advanced Vive also has a different way of handling gestures with support for soft gesture select behavior.

No touch to move / Emotes are "sticky"

It's likely that you previously used Vive Advanced controls before Input 2.0. Try switching.

Difficulty moving

The default thresholds for movement on Vive controllers require you to hit the edges of the touchpad. You can adjust the trackpad Deadzones to change this.

Accidental jumping

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

Physbone posing with grip

At time of writing (8/30/24) Physbone posing is part to the interact action and there's is no way to restore pre-input 2.0 functionality of pose via Grip without sacrificing other functionalities.

Related Canny

Unwanted Action Menu gestures

This is because the Action Menu action set is a copy of the Global action set. If you wish to keep Fist/Open hand functional but prevent the trackpad from firing emotes, you can migrate the actions of Gesture Wheel - Disable Move And Gesture Wheel - Disable Rotate to Touch on their respective Buttons instead of Click. If you want to disable ALL gestures (including fist/open hand) while the action menu is open, you can delete all Gesture Wheel actions from the Action menu action set all together.

Related Canny

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

You're likely missing the Gesture Wheel Cancel Open (Left/Right) actions on your grips as a Button clicks.


Index

Easier object holding

To make it easier to grab and or harder to drop, find the `Grip` Control Source then look for `Grab` & adjust the input settings. Increasing the Grab Threshold will increase the amount of force you must apply to initially pick up the object and the Release Threshold will change the amount of force it must be less than to drop.

Explicit object dropping

To only drop objects with a specific button add the `Drop` action as an input.

Disabling pose gestures

Add the Disable Gesture Tracked action anywhere controller to disable all skeletal hand pose gestures.

Viveified gestures

Using the Touchpad of Index Controllers for gestures like Vive is possible with SteamVR bindings.

You'll need to migrate over all of the actions and buttons from Vive's setup to Index and add the Disable Gesture Tracked function. Binding File via Github. (See install guide)


HP Reverb G2

TODO

TODO: More controller types.

References