Here at VRChat, we’re all pretty big n̶e̶r̶d̶s̶ enthusiasts about the latest VR hardware to hit the market. Aside from keeping track of the general landscape of VR development in the interest of potential VRChat support, we also enjoy trying out the latest hardware and seeing how it pushes the boundaries of the industry. The past few months have been no slouch in offering new tech for us to try out, and June is no different!

The Valve Index, set for release in late June, is a VR set from Valve that offers some interesting new tech in the headset, controllers, and tracking system. The Index HMD itself has some very compelling advances, as do the new Valve Base Stations. The Index Controllers, however, offer an entirely new form-factor and sensor setup that enables high-fidelity finger tracking and control schemes.

If you watched our last Dev Stream two weeks ago, we had a section regarding supporting the Index Controllers in a future release. That time is now upon us! We will support Valve Index Controllers with finger movement in VRChat 2019.2.3, the next major release on our roadmap. This release is currently in Open Beta, which you can participate in by joining our Discord and checking out #open-beta-info. Check out the full patch notes here.

So how’s this going to work?

The Valve Index Controllers contain capacitive sensors for the pinky, ring, and middle fingers. They also contain capacitive sensors on the trigger for the index finger, and sensors on the face of the controller to sense when your thumb is “down”. Finally, they contain a “squeeze” sensor to detect squeezing of the controller.

At all times, your fingers on your avatar in VRChat will track to your fingers’ states on the Index Controller. Although the tracking isn’t exact, the closed or open state of the finger will allow for finger movement on your avatar, improving immersion.

Set your Default Bindings!

We will be publishing a new Default controller binding for VRChat once 2019.2.3 is in Open Beta. You must ensure that you are using this new default binding, otherwise your Index Controllers will not work. Although there are many Community-created “compatibility” bindings available, none of them are set up to use the inputs we have available.

Currently, the bindings are called “VRChat bindings for Index Controller” with the description “Official VRChat bindings for Valve Index Controller. Supports finger tracking and gesture toggle. Requires VRChat 2019.2.3 or later”. We have set these as the default bindings, and are waiting for Steam to propagate these settings out. You may have to scroll down the Community list a bit to find them.

Keep in mind that you can configure your own bindings completely using SteamVR Control Bindings. The old bindings that the Community has created will no longer work, but you can create new bindings and share them using our new default as a base. We’ve got some more details on this in our documentation and further in the blog below.

What about Gesture Overrides?

If you’re not familiar with Overrides, you can create animations for your avatar that play when you trigger a gesture. This was originally intended to allow custom hand poses when you performed hand shapes on the controller. However, our Community quickly discovered that this could be used to animate anything on the avatar, triggered by a gesture.

Although the Gesture Override system was never intended for this use, we have seen a lot of interesting cases for it. That being said, we do eventually plan on replacing the Gesture Override system with something that has more control, customizability, and expandability. For now, however, it served as an interesting bump in the road for Index Controller support.

Gesture Toggle

To support both full finger-posing at all times and simultaneously allow gesture-matching to trigger Gesture Overrides, we implemented the Gesture Toggle button. If you press in your left thumbstick on your Valve Index Controller, you will swap Gesture Toggle modes, and an icon will appear on your UI at the bottom left.

When Gesture Toggle is enabled, VRChat will attempt to match your current finger pose against the standard VRChat hand poses. Any applied Gesture Overrides will play. However, your hand pose will not change even if you’ve defined an override for your hand position.

This behavior differs from other controllers that use psuedo-hand poses (like the Oculus Touch). The reasoning here is that if you’ve got full finger-tracking fidelity, replacing the hand pose would be off-putting and potentially confusing. For example, if you performed the “Finger Gun” hand pose on the Valve Index Controller and gesture matched to an animation that caused a closed fist, you’d now have a difference between your real-life hand state and your avatar’s hand state. Although this is something you can “get used to” on other controllers, it is especially jarring on the Valve Index Controllers, so we simply ignore the Override’s hand pose.

When you have Gesture Toggle disabled, VRChat will not attempt to gesture-match. Your Gesture Overrides will never play.

When Gesture Toggle is on, thumbs up shows starry eyes!

If you disable Gesture Toggle while holding a Gesture Override, that Override will continue animating until you enable Gesture Toggle once again.

Object Interaction

Grabbing objects (like a Disc in Battle Discs) is done by squeezing the grip. Releasing the grip will drop the object. Playing games like Battle Discs can feel more immersive and natural with the Valve Index Controllers. The grip strength required can be adjusted in SteamVR Controller Bindings, along with many other settings.

Controller Mappings

We’ve been working hard on our documentation in various places. In particular, we’ve created a brand-new page to cover the functionality of the Valve Index Controllers. Once the release is Live, it will be available under the Controls category in our documentation.

In the meantime, here’s an image illustrating the bindings for the Valve Index Controllers.

You can always customize these bindings via the SteamVR Controller Bindings menu, but we have a few tips for you if you plan on doing so:

In SteamVR mapping, Left Gesture Toggle and Right Gesture Toggle are the same action.

Be careful when re-assigning “thumb-touch” button Touch events. VRChat checks for touch events on every button the thumb can touch to know if the thumb is bent. If a “thumb-touch” button is not assigned for the same touch events, VRChat cannot tell that the thumb has been bent, and will not track properly.

Jump , Mic Toggle , and Left / Right Gesture Toggle are hard input bindings to the application.

Going Forward

As mentioned before (and as is the case with many VRChat systems), this is a first-pass implementation. As we observe user interaction with the new Valve Index Controllers, we’ll tune the default bindings and adjust behavior as needed. As usual, if you have feedback, please let us know on our Canny.

We’re excited to see avatars in VRChat enjoy full finger movement while using the Index Controllers. The Gesture Toggle system is only available for the Valve Index Controllers at this time. We are going to enable Gesture Toggle and the finger-pose functionality on other controllers like the Oculus Touch in an upcoming release. We’re also looking into enabling a portion of the functionality for Vive Wands and Windows Mixed Reality controllers, but they present some design and implementation difficulties. We’ll keep you up to date.

Thanks for reading, and we hope you enjoy your new-found dexterity with Valve Index Controllers in VRChat.