In VirtualGrasp we use the terms sensor and controller exchangeably since a VR controller is essentially a sensing device for hand poses.

VirtualGrasp is hardware-agnostic.

You can use VirtualGrasp with or without a VR headset and your scene does not need to be a VR-enabled scene.

In terms of hand control, VirtualGrasp can create natural grasp interactions with any kind of controllers (or sensors), whether it is hand-held VR controllers that gives accurate 6-dof wrist pose, finger tracking devices like Leap Motion or Oculus finger tracking feature, or or even just a computer mouse.

This is because unlike many physics-based grasp synthesis solutions in the market that require accurate finger tracking, VirtualGrasp exploits “object intelligence”. By analyzing shape and affordances of an object model in VR, we can synthesize grasp configurations on a hand with just the knowledge of where the wrist is, and without any dependence of expensive physical simulations.

How to Setup

VirtualGrasp allows you to assign upto two types of sensors for an avatar. This allows developers to combine two sensors to control avatar’s hands. For example you can choose to use a data glove to control avatar’s finger pose and grasp triggers, while using an Oculus touch controller to control wrist position and orientation. Though this is not most common setup for today’s development use cases, this feature may become useful expecially for research and development of new hand controllers.

In the majority of use cases only one primary sensor is used.

Whether it is Unity or Unreal, you can assign your controller input in MyVirtualGrasp → Avatars → Primary and Secondary Sensor Setup.

Avatar and Sensor setup in Unity.
Avatar and Sensor setup in Unity.

Controller Profile

In Unity, VirtualGrasp provides “controller profiles” as ScriptableObjects. You are able to configure a number of controller-related settings and thereby quickly integrate new motion controller hardware, and or switch between them. There are already a number of the most common hardware controllers pre-configured as part of the VG SDK in Resources/VG_ControllerPofiles, such as UnityXR (e.g. supporting Quest), LeapMotion, Mouse, and others. You can find a more detailed documentation on VG_ControllerProfiles.


While each VG_ControllerProfile contains an “Origin Name” that should act as the origin of your controller data, you can overwrite the origin by selecting a different transform here.