V1.3.0 (2023-05-15)

Major Functionality Changes:
GUI / Component Changes:
  • Extend Hand Profile UI by thumb rotation, and hide the Hand Bone Indices that form the map of avatar’s bone to gleechi hand model.
API Changes:
  • Add AVATAR_ALREADY_REGISTERED enum to use when registering avatar is already registered (and return that avatars ID instead of 0).
  • OnObjectPushStopped event is added when hand released push on an object.
  • GetHand overload function is added.
Other / Internal Changes:
  • Fixed a bug: When physical object with RigidBody has constraint of movement, and Jump Grasp interaction type is used, object will jump to hand without respecting this physical constraints. Now it is fixed and hand will interpolate to the object instead. (fixed known issue from 1.2.0)
  • Fixed a bug: VG_Articulation on joint gizmo has a bug for Revolute joint, the gizmo shown joint range with left-handed system that is opposite to the direction of object rotation. Also for both Revolute and Prismatic joint, the gizmo is moving together with object, not respecting the initial zero pose. Now both problems are fixed. (fixed known issue from 1.2.0)
  • Fixed a bug: When mirror hand control is enabled, the disabling of hand still are controlled by missing sensor signal from same side. Now it will only disable hand if mirrored sensor signal missing. (fixed known issue from 1.2.0)
  • Make external controller VG_EC_MouseHand only update pose if Application.isFocused.
Known Issues:
  • When graspable object is very close to an index pushable object, after grasp the object, pushing gesture may not form.

  • When index finger tip moves in a different direction from wrist, pushing can get double triggered.

  • VG main loop currently runs in FixedUpdate rather than Update in order to synchronize VG powered hand object interaction with physics calculation in Unity. This can cause some visual inconsistency showed as non-smooth hand movement with/without holding an object. We recommend you to resolve this by setting the Time.fixedDeltaTime to match the refresh rate of the device you are targetting (e.g. 1f / 72f to target 72 hz displays).

  • When a game object with ArticulationBody (with constrained joint like prismatic) is released from grasp, the object may move to a direction not intended by the released hand.

  • An internal component VG_ColliderTest should not be allowed to be added to a GameObject, but now there is no prevension on this yet.

  • Combinig two sensors – Primary and Secondary Sensors – for an avatar is not working properly. Note for majority use cases you only need one Primary Sensor Setup.

  • When runtime spawn a new avatar, the existing registered avatar’s hands will suddenly flip.

  • Grasp Editor is not working with runtime spawned sensor avatar.


title: Release Notes keywords: release notes sidebar: main_sidebar_1_2_0 permalink: release_notes.1.2.0.html folder: mydoc —

V1.2.0 (2023-04-03)

Major Functionality Changes:
  • Hand Profiles add a new functionality to allow developers to manually map customized hand bones (wrist and finger bones) to Gleechi hand model.

  • Mirror hand control feature is added. Developers can set a sensor avatar to have mirror hand control either at initial Avatars and Sensors setting, or in runtime through SetAvatarMirrorHandControl api function.

  • VG_AnimationDriver now can also be used with legacy input. (fixed known issue from 1.1.0)

  • VirtualGrasp SDK moved over to Custom Package structure, with SDK being a proper package and the Onboarding being an optionally installable “Sample.” We are still unsure how this affects the Asset Store deployment through the Unity verification system, but will update as soon as we have a validated version. We will update potentially incorrect paths in this documentation then.

GUI / Component Changes:
  • My VirtualGrasp -> Avatars and Sensors shows clearer separation of multiple avatars, and also shows avtar’s ID.

  • The Baking Client has been visually optimized to make it easier to handle login and baking.

  • The VG_EC_MouseHand controller has been adjusted so it can be used with both Legacy and new Input System.

  • When using “NULL” as the origin name in any VG_ControllerProfile the origin will be hard reset to zero-origin even if an origin transform is provided in the MyVirtualGrasp component. This to assure that some controllers (such as the VG_EC_MouseHand) do not use any origin offset.

API Changes:
Other / Internal Changes:
  • VG_OculusHands_Profile is added in Resources/VG_HandProfiles/ to support OVR hand models which do not follow the Gleechi hand model standard. Note developers do not need VirtualGrasp SDK to release a new hand profile to support any custom hand models, and please see Hand Profiles to learn how to create your own hand profile with hand bone maps.

  • OculusIntegration sample scene is added (in Samples/OculusIntegration) to compare OVR hand controller with VG’s Oculus integration. See FAQ regarding OVR hand for more explanation.

  • VG_EC_OVRHand controller is added only for the OculusIntegration sample scene mentioned above.

  • Fixed a bug: Solved memory leak and Unity crashing bug when repeatedly calling register and unregister avatars. (fixed known issue from 1.1.0)

  • Fixed a bug: Solved RigidBody.iskinematic true runtime setting is lost problem when a physical object with RigidBody is released from grasping. (fixed known issue from 1.1.0)

  • Fixed a bug: The first overloaded function ChangeObjectJoint when target is Revolute or Cone joint types limit angle is not converted to radian before passing to the VirtualGrasp library, causing limits appear to be much bigger than the set values. (fixed known issue from 1.1.0)

  • Fixed a bug: When handover a physical object from one hand to another, sometimes the receiving hands may drop together with the object. (fixed known issue from 1.1.0)

  • Fixed a bug: When physical object with RigidBody has constraints of movement, and Jump Grasp interaction type is used, object will jump to hand without respecting this physical constraints. Now the physical constraints will be respected. (fixed known issue from 1.1.0)

Update to VG Core library:
  • No update.
Known Issues:
  • When graspable object is very close to an index pushable object, after grasp the object, pushing gesture may not form.

  • When index finger tip moves in a different direction from wrist, pushing can get double triggered.

  • VG main loop currently runs in FixedUpdate rather than Update in order to synchronize VG powered hand object interaction with physics calculation in Unity. This can cause some visual inconsistency showed as non-smooth hand movement with/without holding an object. We recommend you to resolve this by setting the Time.fixedDeltaTime to match the refresh rate of the device you are targetting (e.g. 1f / 72f to target 72 hz displays).

  • When a game object with ArticulationBody (with constrained joint like prismatic) is released from grasp, the object may move to a direction not intended by the released hand.

  • When physical object with RigidBody has constraint of movement, and Jump Grasp interaction type is used, object will jump to hand without respecting this physical constraints.

  • An internal component VG_ColliderTest should not be allowed to be added to a GameObject, but now there is no prevension on this yet.

  • VG_Articulation on joint gizmo has a bug for Revolute joint, the gizmo shown joint range with left-handed system that is opposite to the direction of object rotation. Also for both Revolute and Prismatic joint, the gizmo is moving together with object, not respecting the initial zero pose.

  • When mirror hand control is enabled, the disabling of hand still are controlled by missing sensor signal from same side.


title: Release Notes keywords: release notes sidebar: main_sidebar_1_1_0 permalink: release_notes.1.1.0.html folder: mydoc —

V1.1.0 (2023-03-07)

Major Functionality Changes:
  • Breaking change: How grasp db (.db file) is loaded into the project has been refactored:
    • In previous versions grasp db is unrecognized file for Unity, and now it is recognized as an asset if it is put into Assets folder. And any .db files inside Assets folder will be recognized as grasp db files.
    • In previous versions once baking is finished the output grasps.db file will be put into StreamingAssets folder and will be automatically loaded into the project when playing. Now each time grasp baking is finished the output will be a new file “Assets/VG_Grasps/grasp-[hash].db” with random hash.
    • And if you want to use the new baking result, developers need to set it into MyVirtualGrasp -> Grasp DB.
    • If you want to use previously baked grasp db inside the StreamingAssets folder in previous VG versions, you need to move it into Assets folder, and drag this grasp db into MyVirtualGrasp -> Grasp DB.
  • Breaking change for Pro version: How sensor db (.sdb file) is loaded into the project has been refactored:
    • In previous versions sensor db is unrecognized file for Unity, and now it is recognized as an asset if it is put into Assets folder. And any .sdb files inside Assets folder will be recognized as sensor db assets.
    • In previous versions VG_Recorder in VG1.0.0 output recorded .sdb file into StreamingAssets folder. Now VG_Recorder needs to enter complete New Recording Path end with .sdb file to save recorded data.
    • When replaying recorded .sdb file, this file should be dragged into VG_Recorder Replay Recording entry.
  • For Pro version: VG_Recorder allows to assign multiple Replay Avatars. This allows you to replay data on a pair of hands that are represented by separate hand models. (fixed known issue from 1.0.0)

  • For tiny objects that need precision grasps, the grasp quality now varies depending on which interaction type is chosen for the object. When jump grasp is used on an object, the grasp will have more accurate finger placement on the object but the object will have larger rotation when “jumping” into the hand. When trigger grasp is used, the grasp will have less accurate finger placement with the benefit of less hand offset when moved towards the grasping pose. (See Grasp Interaction Type section.)

  • Fixed a bug: “VirtualGrasp -> Make Interactables Readable” helper function now works, and you will see in console output which object(s) has been processed. (fixed known issue from 1.0.0)
GUI / Component Changes:
  • VG_FingerAnimator, VG_ObjectAnimator and VG_AnimationDriver are added to support easy creation of animation of in-hand manipulation of articulated objects. See VG onboarding task 9 to learn an example use case.

  • Fixed a bug: SetSensorActive now works properly. (fixed known issue from 1.0.0)

  • Fixed a bug: In previous version, if an object has constrained joint, pushing Step grasp button on VG_GraspEditor to review primary grasps on this object did not work. Now it works. (fixed known issue from 1.0.0)

API Changes:
Other / Internal Changes:
  • Fixed a bug: When an object is held in hand(s), runtime changes of physical properties of Rigidbody or ArticulationBody will be kept after this object is fully released. (fixed known issue from 1.0.0)
  • Task2 radio disassemble and task7 chain assemble switched to use the new VG_Assemble component. The old scripts DisassembleWithDistanc.cs and ChainAssembleVGArticulation.cs are removed.
  • Task7 chain assemble switched to use the chain loop instead of previous the wrench.
  • VG onboarding task 8 was added to show case how VG_Assemble is used to assemble or disassemble screw with a screw driver to a box.
  • VG onboarding task 9 was added to show case how to use the newly added three components, VG_FingerAnimator, VG_ObjectAnimator and VG_AnimationDriver to create animation of in-hand manipulation of articulated objects.
  • VG onboarding scene now switches to use GRIP button as the Grasp Button in MyVirtualGrasp -> Global Grasp Interaction Settings. This is to support VG onboarding task 9 to use TRIGGER button for animating the manipulation of the plier part.
  • Fixed a bug: While a hand grasps a physical object to collide with another physical object, if any colliding object’s collider is disabled, the controller grasping the object will continue to have vibrating haptic feedback until hand releases the object. Now it is fixed so that when the collider is disabled, the vibration will stop. (fixed known issue from 1.0.0)
Update to VG Core library:
  • When a chain of objects are connected through VG constrained joints, in the previous version, if one hand grasps an upstream object, and the other grasps a distal object, only the distal object (with constrained but movable joint, i.e. non-Fixed) is movable by the hand. In this version (1.4.0) grasping the distal joint will move its upstream movable joint. This change allows (for example in VG onboarding task 8) on a chain like box (floating) -> screw (revolute) -> screw driver (fixed), users could grasp box with one hand, and grasp and rotate the distal object, screw driver, with another hand in order to rotate screw into the box.
Known Issues:
  • When graspable object is very close to an index pushable object, after grasp the object, pushing gesture may not form.

  • When index finger tip moves in a different direction from wrist, pushing can get double triggered.

  • Multiplayer (not available in free or pro versions) with VG network message still can not solve complete object sync for new player registration.

  • A few events such as OnObjectDeselected do not function correctly for proxy avatars in multiplayer (not available in free or pro versions) scenes.

  • VG main loop currently runs in FixedUpdate rather than Update in order to synchronize VG powered hand object interaction with physics calculation in Unity. This can cause some visual inconsistency showed as non-smooth hand movement with/without holding an object. We recommend you to resolve this by setting the Time.fixedDeltaTime to match the refresh rate of the device you are targetting (e.g. 1f / 72f to target 72 hz displays).

  • When a game object with ArticulationBody (with constrained joint like prismatic) is released from grasp, the object may move to a direction not intended by the released hand.

  • You can not use OVR Hand (which can be found in the Oculus Integration under Oculus\VR\Scripts\Util\OVRHand.cs) together with VG controllers at the moment, as they both are independently affecting the hand model.

  • The VG_AnimationDriver is currently relying on the Unity “XR Interaction Toolkit” package. We thus have a dependency of this system in the current 1.4.0, but will resolve this in the next so it can also be used with legacy input.

  • When a physical object with RigidBody is released from grasping, the RigidBody.iskinematic always switch to false even if the developer has changed iskinematic to true when object is grasped.

  • The first overloaded function ChangeObjectJoint has a bug on joint limit setting of Revolute and Cone joint types because the limit angle in degree missed to be converted to radian before passing to the VirtualGrasp library.

  • When handover a physical object from one hand to another, sometimes the receiving hands may drop together with the object.

  • Repeated runtime calling of register and unregister of avtars will cause Unity crash due to memory leaks.

  • When physical object with RigidBody has constraint of movement, and Jump Grasp interaction type is used, object will jump to hand without respecting this physical constraints.


title: Release Notes keywords: release notes sidebar: main_sidebar_1_0_0 permalink: release_notes.1.0.0.html folder: mydoc —

V1.0.0 (2022-12-07)

Major Functionality Changes:
  • Breaking change: The Sensor/Avatar configuration in the MyVirtualGrasp component has been refactored:
    • While before, a list of Avatars could be assigned to each element of a list of Sensors,
    • now maximally 2 Sensor setups can be assigned to each element of a a list of Avatars (see MyVirtualGrasp 1.4.0).
    • If you are updating to this version from an older version, you need to re-configure your MyVirtualGrasp component.
  • Breaking change: The old GetNumGrasps API function changed name to GetNumGraspsInDB to avoid potentially confusing user to think GetNumGrasps is to obtain currently executed grasps on an object.
    • Together with this change, a new api function GetNumPrimaryGraspsInDB is added to give number of enabled primary grasps in the grasp DB.
  • Breaking change: Enum VG_AvatarType has been removed. The old RegisterAvatar API functions have been split upto 3 functions depending on avatar type:
    • RegisterSensorAvatar for sensor controlled avatars, where several overloads exist. The most common is to register an avatar with a single sensor setup without any network output. A secondary sensor setup and network output can be added.
    • RegisterRemoteAvatar for remote controlled avatars in multiplayer applications, and
    • RegisterReplayAvatar for replay controlled avatars.
  • VG_HandProfiles were introduced to simplify the external controller mapping for custom hand models.

  • ChangeObjectJoint (two overloaded functions) and RecoverObjectJoint do not have any function signature change. However from this version, VG will internally remove Rigidbody or ArticulationBody on a physical object if the function call intends to change object joint to a constrained joint type (non-floating), and recover just removed Rigidbody or ArticulationBody when it changes back to floating joint type. This change makes it convenient for Unity developers to benefit from VG’s object articulation system on both physical and non-physical environments.

  • Added “ensemble physical object” support. That is when assembling two physical objects through ChangeObjectJoint, as an example shown in VG Onboarding Task7, grasping the child objects (when child became non-physical due to object change to constrained joint type), the parent which is still a physical object will follow as if the parent-child has become an ensemble physical object.

  • When an object’s Rigidbody component has Rigidbody.isKinematic true, VG will consider this object as a non-physical object. (In previous versions whenever an object has Rigidbody component, even when it is kinematic, VG considers the object physical resulting in some unwanted interaction behaviors.)
GUI / Component Changes:
  • Only one enabled VG_Articulation component is allowed now, and the enabled component reflects the current object articulation status.
  • VG_Articulation for constrained joint types now allows selection of “Motion Type” to be Limited or Free, where Free means there is no limitation along the constrained dof(s) of this joint.
  • VG_GraspEditor
    • The prefab has improved 3D shape and texture, and
    • has been moved to ThirdParty/VirtualGrasp/Resources/GraspEditor/ to separate it from the Onboarding demo scene.
    • VG_GraspEditor script exposed an option Editing Interaction Type to allow developers to choose the main interaction type to use when adding primary grasps.
  • “VirtualGrasp” Menu cleanup. Some obsolete entries were removed.
  • VG_Articulation, VG_Interactable and MyVirtualGrasp scripts are deactivated during runtime to better reflect that changes to them are only valid in editor mode.
  • Grasp and Release animation speeds in MyVirtualGrasp GUI integer fields were replaced by range sliders.
API Changes:
Other / Internal Changes:
  • Fixed a bug: when OnGraspTriggered event invoked, sometimes m_selectedObject is null.
  • Fixed a bug: sometimes an interactable object’s selection weight becomes negative causing this object not interactable.
  • If an object is set to afford INDEX_PUSHABLE interaction, VG library will switch its interaction type to STICKY HAND to avoid some unneccssary debug outputs.
  • VG onboarding task 5 added an additional prefab, “Task5_bottle_with_rigidbody”, in the onboarding scene to show the same AssembleVGArticulation.cs also works on the bottle and cap when they are physical objects.
  • Added VG onboarding task 7 showing off using VG Articulation to assemble a chain with physical objects.
  • For VG onboarding task4 and task5, the function for assembling has improved computation of desired object rotation; the assembling and dissasembling code are called in LateUpdate instead of Update to sync with player input.
  • Multiplayer (not available in free or pro versions) VG support now allows multiple players grasping on the same object at the same time, and also works with complex object settings.
  • Explicit asset database refresh added when VG creates files (such as files for mesh baking input and output).
  • Adjusted In-Editor tutorials to follow the new changes in the VG API and GUI.
  • Improved the project file structure. Among others made it possible to delete the example onboarding folder and resources to make the plugin lighter without affecting VG functionality.
  • Fixed a bug: Preview grasp is not able to pick up a physical object once grasp is triggered. (fixed known issue from 0.15.0)
  • Fixed a bug: If Haptics is enabled in Sensor Control specifications, haptics feedback is not consistently given at the moment of grasp, release or collision on build. (fixed known issue from 0.15.0)
  • The .NET TargetFrameworkVersion has been downgraded from 4.7.2 to 4.7.1 since it caused some issues for Unity+VSCode users.
  • Fixed a bug: when pause a VR app with Occulus button or remove headset, the grasp pose is lost.
  • Improved the status sync of VG_Articulation on a Game Object with the interactability of that objects.
  • Fixed a bug: the second avatar registered has twisted finger bones.
  • Improved the VG_MainScript inspector DebugSettings to become a proper foldout menu.
  • Fixed a bug: crashing when JumpGraspObject, SwitchGraspObject, or TogglePrimaryGraspOnObject is called on an object without mesh assigned to it.
Update to VG Core library:
  • Improved the grasp interaction on object that has rotating joint types.
  • Improved the grasp interaction on floating objects with multiple hands.
  • Completed planar joint features by adding discrete states and ChangeObjectJoint support. (fixed known issue from 0.15.0)
  • Reduced dynamic grasp finger-object penetration when pinch grasp small elongated objects.
  • Fixed a bug: hand twisting when registering multiple avatars of same structure was fixed.
Known Issues:
  • When graspable object is very close to an index pushable object, after grasp the object, pushing gesture may not form.

  • When index finger tip moves in a different direction from wrist, pushing can get double triggered.

  • Multiplayer (not available in free or pro versions) with VG network message still can not solve complete object sync for new player registration.

  • A few events such as OnObjectDeselected do not function correctly for proxy avatars in multiplayer (not available in free or pro versions) scenes.

  • VG main loop currently runs in FixedUpdate rather than Update in order to synchronize VG powered hand object interaction with physics calculation in Unity. This can cause some visual inconsistency showed as non-smooth hand movement with/without holding an object. We recommend you to resolve this by setting the Time.fixedDeltaTime to match the refresh rate of the device you are targetting (e.g. 1f / 72f to target 72 hz displays).

  • VG_Recorder only allows to assign one Replay Avatar, which makes it not work if you have separate hand models when using custom avatar supported by VG Pro version.

  • SetSensorActive does not have effect. If you set it inactive, the avatar’s hands are still controlled and moved by the sensor / controller.

  • “VirtualGrasp -> Make Interactables Readable” helper function is not working. For now you have to manually check “Read/Write enabled” checkbox in the model inspector of your object in order to interact with the object or bake grasp.

  • When an object is held in hand(s), runtime changes of physical properties of Rigidbody or ArticulationBody get lost once this object is fully released.

  • If an object has constrained joint, pushing Step grasp button on VG_GraspEditor to review primary grasps on this object does not work.

  • While a hand grasps a physical object to collide with another physical object, if any colliding object’s collider is disabled, the controller grasping the object will continue to have vibrating haptic feedback until hand releases the object.

  • You can not use OVR Hand (which can be found in the Oculus Integration under Oculus\VR\Scripts\Util\OVRHand.cs) together with VG controllers at the moment, as they both are independently affecting the hand model.