Guides:SteamVR Bindings: Difference between revisions
(Additional Input methods & Creating new Control sources) |
(Notes about Vive Physbone posing adjusted. (& Canny corrected)) |
||
(13 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{Noticebox/Community}} | {{Noticebox/Community}} | ||
{{Stub| | {{Stub|Need input from more popular controller types}} | ||
{{Noticebox/wip|}} | {{Noticebox/wip|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. <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 22: | 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 30: | 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 36: | 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 71: | Line 72: | ||
|- | |- | ||
|Button | |Button | ||
|Touches, Clicks, Holds, Double clicks, and Long presses | |Touches, Clicks, Holds, Double clicks, and Long presses | ||
|- | |- | ||
|Trigger | |Trigger | ||
Line 77: | 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 89: | 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 102: | Line 103: | ||
|} | |} | ||
===Input Methods === | ===Input Methods=== | ||
{| class="wikitable mw-collapsible mw-collapsed" | {| class="wikitable mw-collapsible mw-collapsed" | ||
!Input | !Input | ||
Line 110: | 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 125: | Line 126: | ||
|- | |- | ||
|Double | |Double | ||
|A quick double press of the control | |A quick double press of the control | ||
|boolean | |boolean | ||
|Button | |Button | ||
Line 140: | 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 191: | Line 192: | ||
|Grab | |Grab | ||
|Global, 1H | |Global, 1H | ||
|Picks up grabbable world objects | |Picks up grabbable world objects | ||
|boolean | |boolean | ||
|suggested | |suggested | ||
Line 197: | Line 198: | ||
|Drop | |Drop | ||
|Global, 1H | |Global, 1H | ||
|Drops held item. Enables Auto Hold. (Prevents item drop unless | |Drops held item. Enables Auto Hold. (Prevents item drop unless triggered) | ||
|boolean | |boolean | ||
|optional | |optional | ||
Line 225: | 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 282: | 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 340: | 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 352: | 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]] | ||
|boolean | |||
|optional | |||
|- | |||
|Disable Gesture Tracked | |||
|Global, Action | |||
|Stops gestures via pose from running if bound. | |||
|boolean | |boolean | ||
|optional | |optional | ||
Line 375: | 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 436: | 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 470: | 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 488: | 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 519: | Line 526: | ||
|optional | |optional | ||
|- | |- | ||
|GA (Index Finger) | |GA (Index Finger) | ||
|Global | |Global | ||
| | | | ||
Line 598: | 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 604: | 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 613: | 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 619: | 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 625: | 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 643: | 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 667: | 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 | ||
|optional | |optional | ||
Line 686: | Line 687: | ||
==Walkthroughs== | ==Walkthroughs== | ||
These walkthroughs require you to navigate to the [[ | These walkthroughs require you to navigate to the [[Guides:SteamVR_Bindings#Where|VRChat SteamVR Bindings page]]. | ||
=== Default Bindings=== | ===Default Bindings=== | ||
To reset your bindings to default, navigate to the [[ | To reset your bindings to default, navigate to the [[Guides: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 [[ | Navigate to the [[Guides:SteamVR_Bindings#Where|VRChat SteamVR Bindings page]] and select <code>Edit</code> on the current Binding. | ||
[[File:SteamVR Input - Editing Bindings.png|950x950px]] | [[File:SteamVR Input - Editing Bindings.png|950x950px]] | ||
Line 703: | 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 [[ | To use additional [[Guides: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]] | |||
===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 [[ | On any of a controller's existing control sources, you can create new inputs with a specific [[Guides: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. | ||
[[File:SteamVR Input - New Control Sources.png|1000x1000px]] | |||
===Creating Chords=== | ===Creating Chords=== | ||
Line 717: | Line 718: | ||
===Deadzones=== | ===Deadzones=== | ||
To change the deadzones on control sources like Trackpads & Joysticks, open their [[ | To change the deadzones on control sources like Trackpads & Joysticks, open their [[Guides:SteamVR Bindings#Changing Input Settings|input settings]] and adjust the values to your liking. <code>DeadZone</code> is what you'd expect and <code>Max Zone Percentage</code> determines how far from the center of the control source is 100% value. | ||
[[File:SteamVR Input - Deadzones.png|900x900px]] | [[File:SteamVR Input - Deadzones.png|900x900px]] | ||
Line 725: | Line 726: | ||
This exponent value is applied to change how speed scales on the final relative position between the Deadzone and Max Zone. <code>Speed = Value^<sup>Exponent</sup></code> | This exponent value is applied to change how speed scales on the final relative position between the Deadzone and Max Zone. <code>Speed = Value^<sup>Exponent</sup></code> | ||
[[File:SteamVR Input - Curve Exponent.png|400x400px]]</blockquote> | [[File:SteamVR Input - Curve Exponent.png|400x400px]] | ||
</blockquote> | |||
===Trigger thresholds=== | ===Trigger thresholds=== | ||
TODO | TODO | ||
===Changing haptics=== | ===Changing haptics === | ||
Most control sources on the default bindings have an [[ | Most control sources on the default bindings have an [[Guides: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 [[Guides: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.''' | ||
===DPAD overlap percentage=== | ===DPAD overlap percentage=== | ||
TODO | 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. | |||
<blockquote> | |||
====Export==== | |||
#Navigate to [[Guides: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. | |||
#Share as needed! | |||
====Import==== | |||
#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 [[Guides: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> | |||
<blockquote>[[File:SteamVR Input - Importing Bindings.png|800x800px]]<br /></blockquote> | |||
</blockquote> | |||
==Don'ts== | ==Don'ts== | ||
Line 747: | Line 765: | ||
==Controller info & fixes== | ==Controller info & fixes == | ||
=== All controllers=== | ===All controllers=== | ||
Various fixes that are potentially globally applicable. | Various fixes that are potentially globally applicable. | ||
<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> | ||
<blockquote>TODO: GIF navigating to toggle in action menu</blockquote> | <blockquote>TODO: GIF navigating to toggle in action menu</blockquote> | ||
Line 761: | Line 778: | ||
====Double tap is opening the Main Menu==== | ====Double tap is opening the Main Menu==== | ||
This feature was introduced with Input 2.0. You can disable it in the [[Settings#Controls|Controls]] section of the [[Main Menu]] | This feature was introduced with Input 2.0. You can disable it in the [[Settings#Controls|Controls]] section of the [[Main Menu]] | ||
====Disabling finger tracking==== | ====Disabling finger tracking==== | ||
Skeletal based finger tracking is enabled by default for all controller types. You can disable it in the [[Settings#Controls|Controls]] section of the [[Main Menu]] | Skeletal based finger tracking is enabled by default for all controller types. You can disable it in the [[Settings#Controls|Controls]] section of the [[Main Menu]] | ||
====Reverting to old finger tracking==== | ====Reverting to old finger tracking==== | ||
If you prefer the old finger tracking method, navigate to the [[Action Menu#Quick Actions|Quick Actions]] section of the [[Action Menu]] and enabling Legacy fingers. <sup>(per-avatar basis)</sup> | If you prefer the old finger tracking method, navigate to the [[Action Menu#Quick Actions|Quick Actions]] section of the [[Action Menu]] and enabling Legacy fingers. <sup>(per-avatar basis)</sup> | ||
Line 768: | Line 787: | ||
<code>Path: [[Action Menu]] ➜ [[Expressions]] ➜ [[Action Menu|Quick Actions]] ➜ Legacy Fingers</code> | <code>Path: [[Action Menu]] ➜ [[Expressions]] ➜ [[Action Menu|Quick Actions]] ➜ Legacy Fingers</code> | ||
<blockquote>TODO: GIF navigating to toggle in action menu</blockquote> | <blockquote>TODO: GIF navigating to toggle in action menu</blockquote> | ||
====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 <code>Disable Gesture Tracked</code> Action anywhere to your binds. It doesn't matter where. | |||
</blockquote> | |||
====Tracking breaking in SteamVR Dashboard==== | ====Tracking breaking in SteamVR Dashboard==== | ||
This is due to | This is due to SteamVR Keyboard privacy introduced in [https://store.steampowered.com/news/app/250820/view/4371390626087848465 version 2.7] which stops applications from seeing device positions while the Steam keyboard is visible. In SteamVR settings, navigate to <code>Dashboard</code> and set <code>Keyboard Privacy</code> to '''Disabled.''' | ||
====Hard Bindings reset==== | ====Hard Bindings reset==== | ||
In rare cases, a full hard reset of your Bindings for VRChat may help solve unknown issues. Navigating to <code>(username)/Documents/steamvr/input</code> and delete the <code>steam.app.438100_controlType.json</code> of the affected controller type. Restart VRChat to generate new files. | In rare cases, a full hard reset of your Bindings for VRChat may help solve unknown issues. Navigating to <code>(username)/Documents/steamvr/input</code> and delete the <code>steam.app.438100_controlType.json</code> of the affected controller type. Restart VRChat to generate new files. | ||
===Vive Wands=== | |||
=== Vive Wands=== | |||
<blockquote> | <blockquote> | ||
Line 785: | Line 807: | ||
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. | 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"==== | ====No touch to move / Emotes are "sticky"==== | ||
It's likely that you previously used Vive [[ | It's likely that you previously used Vive [[Guides:SteamVR Bindings|Advanced controls]] before Input 2.0. Try switching. | ||
====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 [[ | The default thresholds for movement on Vive controllers require you to hit the edges of the touchpad. You can adjust the trackpad [[Guides:SteamVR Bindings#Deadzones|Deadzones]] to change this. | ||
====Accidental jumping==== | ====Accidental jumping ==== | ||
With a mix of adjustments to [[ | With a mix of adjustments to [[Guides:SteamVR Bindings|Overlap percentage]] & [[Guides:SteamVR Bindings#Deadzones|Deadzones]] on the Trackpad DPADs, you can restore the pre-Input 2.0 zone for jumping. | ||
==== | ====Restore posing with grip / Can't pickup Physbones==== | ||
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. You may be dropping Physbones at the moment because fully pulling the trigger activates the <code>interact</code> action, posing the physbone (or dropping it if posing is disabled) | ||
<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 802: | Line 824: | ||
You're likely missing the <code>Gesture Wheel Cancel Open (Left/Right)</code> actions on your grips as a Button clicks. | You're likely missing the <code>Gesture Wheel Cancel Open (Left/Right)</code> actions on your grips as a Button clicks. | ||
</blockquote> | </blockquote> | ||
===Index=== | ===Index=== | ||
<blockquote> | <blockquote> | ||
====Easier | ====Easier object holding ==== | ||
To make it easier to grab and or harder to drop, find the `Grip` Control Source then look for `Grab` & [[Guides: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. | |||
====Explicit object dropping==== | |||
To only drop objects with a specific button add the `Drop` action as an input. | |||
====Disabling pose gestures==== | |||
Add the <code>Disable Gesture Tracked</code> 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 <code>Disable Gesture Tracked</code> function. [https://github.com/ZenithVal/SteamVR-Bindings/blob/main/VRChat/VRChat_Index%20-%20Viveified.json Binding File via Github]. (See install guide) | |||
</blockquote> | |||
===HP Reverb G2=== | ===HP Reverb G2=== |
Latest revision as of 15:03, 10 December 2024
[Reason: Need input from more popular controller types]
[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
- Open SteamVR
- Find Settings
- Select Controllers
- Set Advanced Setting to Show
- Select Show Binding UI
- Select VRChat from the list of applications
Via web browser
- Go to http://localhost:27062/dashboard/controllerbinding.html while SteamVR is running
- Select
VRChat
from the list of applications
Via VRChat
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.
Binding editing page
Navigate to the VRChat SteamVR Bindings page and select Edit
on the current Binding.
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.
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.
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.
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.
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
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
- Navigate to bindings Editing page select
Export Binding File
- Navigate to
(Your Documents)\steamvr\input\exports
to find the .json file.- Share as needed!
Import
- Place the binding .json file in
(Your Documents)\steamvr\input\imports
(create folder if it doesn't exist)- Navigate to the Bindings config for the app the Binding is for. (VRChat likely in this case)
- Select the binding from the list of
"Bindings in the documents directory"
(You do not need to close SteamVR)
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]
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 Menu ➜ Options ➜ Avatar ➜ 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 Menu ➜ Expressions ➜ Quick 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.
Restore posing with grip / Can't pickup Physbones
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. You may be dropping Physbones at the moment because fully pulling the trigger activates theinteract
action, posing the physbone (or dropping it if posing is disabled)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
AndGesture 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.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.