V1.7.0 (2024-01-30)

Major Functionality Changes:
  • The Record & Replay functionality (earlier only a feature of the PRO version), is now also available in the free Test version.

  • To support that change in Record & Replay functionality, the free Test version now also allows for up to 2 avatars in the scene.

  • We have included unit and regression tests on a subset of functionality of the API. These tests are supported by Unity TestRunner and many of them exemplify the Record & Replay functionality through pre-recorded actions.

  • Internal development version for VG was changed to Unity 2022.3.18f1. From now on, VG will be packaged using Unity 2022 instead of Unity 2021. In addition, the packaged SDK was tested to work properly with Unity 2023.2.7f1 (see Installation).

GUI / Component Changes:
  • The OculusIntegration sample was removed from the SDK since it assumed dependency on Oculus prefabs and the Oculus Integration which is not by default installed or needed in many customers’ projects.

  • Overhaul and optimization of the OpenXR based external controller code (VG_EC_UnityXRInteraction controller).

  • The “XRInteraction” Sample was included in the PRO version. It includes a scene to present the use of this controller in an example for runtime-registration of differently scaled avatars (which are “custom hand models” and thus only supported in the PRO version).

  • The VirtualGrasp menu was moved to Tools/VirtualGrasp menu to conform with Unity’s asset packaging rules.

API Changes:
  • There are no API changes in this version.
Other / Internal Changes:
  • Various internal bugfixes and optimizations.

  • Updated various administrative content related to the company reconstruction of Gleechi AB to Gleechi Technology AB.

Known Issues (still the same as in 1.6.3):
  • 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.

  • StartReplay entering selectedObject will not fully support object-centered replay.

V1.6.3 (2023-09-25)

Major Functionality Changes:
  • VG_Articulation added Simulated Weight feature to simulate the “heavy object lifting” effect. Note that this effect is not through physics simulation, but rather artificially slowing down the lifting of an object with non-zero simulated weight.

  • Breaking change: VG_Assemble is improved to cover assembling object with different symmetric levels. Developers who used this component in previous versions just need to convert 3D vector of Assemble Axis to the corresponding axis type, for example [0, 1, 0] corresponds to “Y Axis”. If [0, 0, 0] was used to require whole rotation match, for this new version, the corresponding setting is to select any assymetric axis (e.g. “X Axis”) for Assemble Axis, and set 1 for Assemble Symmetry Steps which is a new option added in this version. Please check documentation VG_Assemble and example onboarding task 10 to see how this improved component can cope with a whole range of symmetric conditions.

  • An internal change in VG_Assemble is that previusly automatically disabling and enabling the desired pose transform when an object is assembled and disassembled respectively is now removed. Instead a public function SetTargetTransformActive is added that can be hooked to On Assembled and On Disassembled to achieve the same effect.

  • Another change in VG_Assemble is that previusly the unity events of assemble or disassemble return the assembled object transform, now they return the selected target transform.

GUI / Component Changes:
  • VG_Articulation added Simulated Weight feature to simulate the “heavy object lifting” effect.

  • VG_Assemble is improved to cover assembling object with different symmetric levels. The GUI changes include:

    1. Assemble Axis changed from entering a 3D vector to an enum of axis types.
    2. Assemble Symmetry Steps is added to provide a number of evenly distributed steps around 360 degree around the Assemble Axis.
API Changes:
  • A new API function SetGraspButton is added to allow runtime change grasp buttons.
Other / Internal Changes:
  • With the improvement of VG_Assemble, this bug is also resolved: when “Assemble Axis” is Y axis, the angular difference is not taken into account when measuring closeness of the object to the target. (fixed known issue from 1.5.0)
Known Issues:
  • 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.

  • StartReplay entering selectedObject will not fully support object-centered replay.

V1.5.0 (2023-08-25)

Major Functionality Changes:
  • Breaking change: Two overloaded functions SetBlockRelease changed names to SetBlockReleaseObject to make it consistent with ForceReleaseObject function.

  • Breaking change: Changed external controller class name from VG_EC_UnityInteraction to VG_EC_UnityXRInteraction to be consistent with the corresponding controller profile, VG_CP_Unity.XRInteraction. Also changed the scripting define symbol for this controller class from VG_USE_UNITYINTERACTION_HAND to VG_USE_UNITYXRINTERACTION_HAND for Unity player settings (Project Settings → Player → Script Compilation) (fixed known issue from 1.4.0)

  • Fixed the algorithm error on VG_FingerAnimator that leads to the absolute target rotation keep changing, resulting in flickering finger animation. (fixed known issue from 1.4.0)

  • Index pushing interaction now has an improvement on user experience: a proxy hand feature is introduced to force index finger tip to stay on the pushing surface unless the hand is pushing too “hard” into the surface.

GUI / Component Changes:
  • VG_Recorder fixed a bug of clicking on the defined Replay Sequence Key or Replay Segment Key can not replay just recorded data. (fixed known issue from 1.4.0)
    • as a result Replay From Memory option is removed on the GUI of VG_Recorder since directly hitting replay key after recording is replaying from memory.
  • Added VG_Utility scriptable object in Runtime/Resources/ that covers most of VG’s static API functions.
  • Added VG_Locomotion component that originats from Samples/onboarding/Scripts/Move.cs. In addition to the original functionalities in Move.cs, on VG_Locomotion speed control and keyboard control are added.
  • Added more prefabs and improved existing ones in Runtime/Resources/Prefabs/
    • SensorAvatar and SensorAndReplayAvatars were refactored to avoid conflicting control of avatar movement by different mechanisms.
    • SensorAvatarLeap was added as prefab varient of SensorAvatar to directly support Leap motion sensor control.
    • SeparateHandsSensorAvatar was added. It is comparible to SensorAvatar with the difference of using the newly added singular left hand model Runtime/Resources/GleechiHands/GleechiLeftHand.fbx. This prefab was added mainly to show an example of how to set up VG sensor avatar with separate hand models.
    • SeparateHandsSensorAndReplayAvatars was added as prefab varient of SeparateHandsSensorAvatar. It is comparible to SensorAndReplayAvatars also with the difference of using the newly added singular left hand model. This was added mainly to show an example of how to setup VG library for sensor recording and replaying with separate hand models.
API Changes:
  • Fixed the bug on SetBlockRelease overload function with no hand side input: if input avatarID corresponds to an avatar that has only right hand, then this function will not set block release on the right hand because an early return happens when left hand is not found. (fixed known issue from 1.4.0)

  • Fixed the bug on ForceReleaseObject overload function with no hand side input: if input avatarID corresponds to an avatar that has only right hand, then this function will not force release the right hand because an early return happens when left hand is not found. (fixed known issue from 1.4.0)

  • Added IsReplaying overloaded function that just recieve avatar id as input.

Other / Internal Changes:
  • Fixed the issue when graspable object is close to an index pushable object, after grasping the object, pushing gesture may not form. (fixed known issue from 1.4.0)

  • Fixed the issue when index finger tip moves in a different direction from wrist, pushing can get double triggered. (fixed known issue from 1.4.0)

Known Issues:
  • 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.

  • StartReplay entering selectedObject will not fully support object-centered replay.

  • VG_Assemble has a bug: when “Assemble Axis” is Y axis, the angular difference is not taken into account when measuring closeness of the object to the target.

V1.4.0 (2023-07-24)

Major Functionality Changes:
  • Prior to this version, if an object’s initial pose (which is the zero pose) is violating the joint limit setting (for example when joint limit exclude zero pose), after game start, only when hand is interacting with this object (pushing or grasping), the object snaps to the valid pose respecting the joint limit. This creates a sense of buggy application. Now, the object is directly set to the joint limit range at the game start.

  • VG_EC_Mouse external controller allows separate control of left and right hand movement depending on if left-shift or right-shift key is pressed. This improvement is only when Unity “Input System” is used.

GUI / Component Changes:
  • VG_Articulation now enables Dual Hands Only option for physical object.
  • VG_BakingClient GUI moved “Clear” button before “Export” button to be more aligned of order of actions.
  • VG_HandStatus exposed more relevant variables: mode, grasp pose, isremote, linkedObjects and joint states.
  • VG_ManusHand was added as an experimental controller, including controller profile and hand profile.
API Changes:
  • Add ForceReleaseObject overloaded function that recieves transform of the object that is to be released by all grasping hands.

  • Add GetHand overloaded function that recieves transform of the wrist.

  • Add GetFingerBone overloaded function that recieves transform of the wrist.

  • The former VG_ExternalControllerManager was integrated into the core functionality of the VG SDK. Controllers are now automatically instantiated through the rig registration and it is not necessary anymore to do this separately. Thus, the VG_ExternalControllerManager page has been removed from the documentation (and a new page for VG_ControllerProfile was created instead).

  • Due to earlier confusion about the naming convention of controllers, controller profiles, and hand profiles, many assets have been renamed:

    • All controller scripts (child classes of VG_ExternalController, in Runtime/Scripts/VG_ExternalControllers/) as well as the classes inside have been renamed using VG_EC_* prefix and a more descriptive the name of the controller.
    • All VG_ControllerProfiles (ScriptableObjects, in Runtime/Resources/VG_ControllerProfiles) have been renamed using VG_CP_* prefix and more descriptive names of the provider and the controller. The member “external type” of each VG_ControllerProfile was renamed to “controller classes” and now expects one or more exact names of the VG_EC_* controller classes (see above).
    • All VG_HandProfiles (ScriptableObjects, in Runtime/Resources/VG_HandProfiles) have been renamed using VG_HP_* prefix and more descriptive names of the provider.
Other / Internal Changes:
  • Fixed a bug: When runtime spawn a new avatar, the existing registered avatar’s hands will suddenly flip. (fixed known issue from 1.3.0)

  • Fixed a bug: Grasp Editor was not working with runtime spawned sensor avatar, and now it is fixed. (fixed known issue from 1.3.0)

  • The In-Editor Tutorials folder was moved to the Samples folder. This allows to install the tutorials optionally in an NPM package setup.

  • Naming convention for asset files was introduced and implemented, such as T_* for textures, M_* for materials, etc.

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.

  • There is a typo on the controller profile scritable object VG_CP_Unity.XRInteraction, “VG_EC_UnityXRInteraction” should be changed to “VG_EC_UnityInteraction”, corresponding to the name of the corresponding external controller class.

  • VG_Recorder click on the defined Replay Sequence Key or Replay Segment Key can not replay just recorded data.

  • StartReplay entering selectedObject will not fully support object-centered replay.

  • SetBlockRelease with no hand side input has a bug: if input avatarID corresponds to an avatar that has only right hand, then this function will not set block release on the right hand because an early return happens when left hand is not found. Before this is fixed, to safely set block release on right hand, use the overloaded function SetBlockRelease with hand side input instead.

  • ForceReleaseObject with no hand side input has a bug: if input avatarID corresponds to an avatar that has only right hand, then this function will not force release the right hand because an early return happens when left hand is not found. Before this is fixed, to safely release right hand, use the overloaded function ForceReleaseObject with hand side input instead.

  • VG_FingerAnimator has a fundamental algorithm error that leads to the absolute target rotation keep changing, resulting in flickering finger animation.

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.