Thursday 7 March 2019

Tabletop Simulator's SteamVR binding walkthrough

SteamVR's action+binding system is a very powerful tool for allowing the player to express exactly how they wish a game's controls to operate.  It's also a very useful mechanism for allowing a myriad of VR hardware to all function on any game which supports it, as you can tailor the controls to the specific buttons, triggers, sticks and pads your controller has.  This is a great design on Valve's part, as it means any hardware developer can make their own VR system without having to worry that with a limited consumer base no developer will write code specifically for their setup.  This system means that the developer just has to makes the game work with SteamVR, after which every piece of hardware should be able to be used with their game.

However, this versatility does come at a slight cost: setting up a control scheme in it is a little more involved than <Press the key for this action> that players are used to dealing with.  This post will walk through the default bindings that Tabletop Simulator uses for Vive and Rift, which will hopefully give you an idea of how to (a) customize the controls on those platforms to suit yourself and (b) create your own bindings if you have less common hardware.

You may access the controller binding interface inside VR or on your desktop in a web browser.

To access it in desktop mode you must be running SteamVR in the background, and in fact running Tabletop Simulator in VR as well might be helpful, since the SteamVR UI is still a bit beta...

The control schemes on both platforms are effectively the same on both hands, so here we'll predominantly look at the Left Controller (with some notes where applicable if there is some variance).

These bindings are accurate to version 11.1 of Tabletop Simulator.

N.B. If you're interested in the Rift controls it will be worth having a quick read through the Vive section, as it will cover some basic generalities not covered in the Rift section, and go into each action in more detail.


First up is the Grip button.  On Vive this is predominantly used for movement, which is bound with the Enable Movement action; this is bound as a button (if you wished to add another such binding you would click on the + icon at the top right and select BUTTON).

This needs to be bound under Held: as long as you hold the button movement will be enabled (hit "More options" when adding to show the options available other than Click) - movement in Tabletop Simulator is done by holding the button down and pulling or pushing yourself as if you had grabbed onto something.

Next up is Display Tooltips.  This will simply cause tooltips to appear on the controllers as long as the button is held down.  Doubling these on top of the move button is convenient, as it means the player has easy access to some helpful info without it getting in the way of other actions, or being context dependent.  Once you are used to the controls you might want to disable tooltips; you can do so by deleting this binding (hover over it and click the trash can).

Button 14 is one of many (20!) bindings which emulate joypad buttons.  This can be used in-game by turning on Joypad Emulation in the VR settings, allowing you to bind VR inputs in the standard control settings window.  The first ten joypad buttons are listed as if they were on a 360 controller, and are assigned to the controllers here in a roughly analogous layout.  The last ten buttons are simply listed with a numerical index.  In effect it doesn't matter what button goes where, as long as you have a button assigned to the inputs on the controller you want to use.  Note that in the default controls these buttons are assigned uniquely, scattered over both VR controllers; in this slot the right controller has Button 19 bound instead.  As all the Button bindings do the same thing (emulate joypad presses) we'll ignore them after this.

Finally, there is _grip_held.  This, along with every other binding starting with an '_' symbol, is used for the legacy binding of the old VR controls.  They can be ignored, and we'll be skipping them from now on.

Notice the cog icon in the bottom right of the active binding; clicking on this lets you set additional settings on the binding.

Here you could specify some haptic feedback for when you use this input.  As Tabletop Simulator generates relevant haptics automatically, the default bindings don't use any; they are all set to 0.  If you set up a binding and are experiencing your controller unexpectedly vibrating, these settings in each binding are where to check.

The Menu button is set up for two main purposes: clicking it will activate the game's main menu, while holding it down for a few seconds will instead reset your position in the room.  You can see this is done very easily; Single click is set to the Main Menu action, and Long press is set to Reset Position.

The Trigger is set up with multiple, complementary bindings.

Primarily it is used for the Grab action, which is the main interaction used in Tabletop Simulator; it is what you use to pick up components, hit in-game buttons, and activate your currently selected tool.

Here it is assigned to Pull: this means that it will activate when the trigger is squeezed (without having to be clicked).

On the same panel you can see that Click is assigned to Orient Object.  This action depends on the type of object you are holding; for example, a card will be toggled between the orientation you picked it up, and held facing you (and hidden from other players).  This works well with the above action: squeezing the trigger a little lets you hold an object, and while you do you can click the trigger to toggle.

Then there is the Peek action; in-game, a thing you can do to more easily view a component on the table is zoom it, turning your controller into a large-scale version of it.  The Peek action flips your view so you see the bottom of the component (the bottom card in a deck, for instance).  Note that here the trigger is used as a button, with the action bound on Held.

Finally there is the trackpad, which has an awful lot of bindings!

There are two main area here: interacting with the game and its menus with the laser pointer, and the complicated context-sensitive actions which can be access via the touchpad.  The top three panels in the image above deal with the former, and the bottom two the latter.

Interface Click is effectively the VR equivalent of "left mouse button".  Here, the pad is set up to act as a DPad, in Click mode, with the action bound only to Center.  Clicking in the middle of the touchpad will act as if you clicked on whatever you are aiming the laser pointer at.

In order to have a laser pointer you either need to turn Laser Always On in the in-game VR settings, or bind an action to activate it.  Here the touchpad is set as a DPad in Touch mode, with the Activate Laser Pointer action bound at every point.  This means whenever you touch the pad anywhere on its surface the laser will turn on.

Pad Click tells the game that the pad has been clicked.  This is quite a low-level action that is currently only used for toggling the lock on the zoom object mode, and will likely be refactored at some point.  The pad is simply set to act as a giant button, triggering it when clicked.

Finally, there are the two bottom sections which deal with the actions related to using the pad for context sensitive commands.  For the in-game context functions to work it needs to know when you are touching the pad, clicking the pad, and where (i.e. which direction or center).  These two sections cover this: one for when you are merely touching the pad, and one for when you are clicking it.

Note that you really only need one controller to have these bindings, so if you wanted to free up a bunch of "buttons" for use in-game then you could leave your dominant hand controller alone, but delete both of these sections from your off-hand controller.  This would disable the context actions on that hand, but you could then freely use them for their joypad buttons in the control settings window; for instance, assigning pad-left to copy and pad-right to paste.

That's pretty much it... apart from these two buttons in the middle of the screen:

Which lead to these two windows:

There isn't anything to decide here: the Pose and Haptics actions need to be assigned as depicted or SteamVR will not be happy.


[screenshot of all bindings]

The Rift controller is quite different in layout from the Vive controller; most notably it has a stick instead of a pad.  From the top:

First up the Trigger, and there is a lot going on.  The primary use of the trigger on the Rift is to interact with the game and menus with the laser pointer.  Here the Interface Click action is assigned to the trigger under Pull, and then Activate Laser Pointer is also assigned to the trigger under Pull.  This might seem like a conflict, but it works because in-game there are two different thresholds for activation on these inputs; the laser pointer will activate as soon as you squeeze the trigger even a little, while the click will only occur when you pull it with intent (you can edit these thresholds in the in-game VR settings menu).

The trigger is not used on the Rift for the Grab action, but while you are grabbing an object you can't use the laser, so Click on the trigger is still a useful and intuitive place to put the Orient Object action.  The same is true while your controller is turned into a zoom object (no laser), so placing Peek on click also works.

The joystick is used for context actions alone (it doesn't double up on laser pointer duty like in the Vive bindings).  It's slightly less versatile than the touchpad for this; theoretically it could have the dual touch+click mechanic by utilising the stick clicking in, but this feels cumbersome and ungainly in practice.  Instead, on the Rift both actions are bound to the act of moving the stick in a direction.

For this we use the stick as a DPad, in Touch mode, two times: assigning each direction's touch and click action.

Note that we assign the Center Click and Center Touch actions separately by using the stick as a button; this is because when the Rift stick is used as a DPad in Touch mode it is effectively just outputting the position of the stick, and will constantly send the Center action while the stick is in its default position.

The last section sends the Pad Click action when the stick is clicked.  As noted in the Vive section this might be changed in the future, but for now acts to toggle the zoom lock.

Grip is very straightforward on the Rift; it is simply used for the Grab action (not counting joypad emulation or legacy bindings).

The X Button (A Button on the right controller) is used for movement.  Used as a button, the Enable Movement action is attached to the Held input.

As with the Vive controls, this is a convenient place to attach the Display Tooltips action (as it doesn't interfere with the movement)

The Y Button (B Button on the right controller) is used as the menu button:

A single press will activate the games main menu, while holding it down for a few seconds will reset the players position instead.

Finally, the Pose and Haptic actions must be bound, or SteamVR will be unhappy:


Some things to watch out for:
  • There are two bindings for Interface Click and Activate Laser Pointer - one is for an analog input like a trigger pull, the other is binary for buttons.  You don't need to assign both versions of each, just the one you want to use! (so don't worry if one of each appears in Suggested Actions as if they are unbound).
  • Make sure to assign the Pose and Haptic actions or SteamVR will freak out.
  • Screenshots of all default bindings: Vive | Rift
  • Latest info on Tabletop Simulator's VR controls

No comments:

Post a Comment