V1.3.0-rc1 (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.

  • 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.

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.

  • 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.

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 mentioned in Object Setup 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.3.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.

  • 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.3.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.

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 (see MyVirtualGrasp 0.15.0),
    • now maximally 2 Sensor setups can be assigned to each element of a a list of Avatars (see MyVirtualGrasp 1.3.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.

  • 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 mentioned in Object Setup 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.

V0.15.0(2022-07-27)

Major Functionality Changes:
  • Breaking change: The sensor configuration in MyVirtualGrasp has been refactored:
    • Each controller profile (earlier VG_AutoSetup) has been ported into a ScriptableObject of type VG_ControllerProfile (in Resources/ExternalControllers), uncluttering the MyVirtualGrasp interface.
    • To resolve update issues: for a sensor in avatar in MyVirtualGrasp, just drag and drop the controller profile .asset you want to use into the “Profile” slot.
    • You can customize the profiles fully now.
    • The profile supports list of controller names, separated by ‘;’, in order of priorization. For example “OculusHand;UnityXR” (assuming that you have enabled both controllers properly) will use Oculus hand tracking as a priority, but if no hands are tracked, it will fallback to UnityXR controllers.
    • VG_AutoSetup has been removed from the API and GUI.
    • Origin transform has been kept in MyVirtualGrasp to allow overwrite of the name-based origin in the VG_ControllerProfile.
  • Breaking change: VG_SynthesisMethod has been removed.
  • Breaking change: VG_GraspStudio related script, resources and prefab have been removed, and is replaced with VG_GraspEditor which is a much simpler interface that can be used in runtime in any client’s unity project.
GUI / Component Changes:
  • Avatar Model Field removed to unclutter the interface. We always assume humanoid hand models for now.
  • If your version supports networking (Pro feature), you can now enable DebugSettings->UseNetworkIDs to set network ID for avatar’s left/right hand (through MyVirtualGrasp->Avatar), and set network ID for object (through VG_Articulation).
  • VG_Articulations / VG_Interactables will be grayed out during runtime to make clear that changing them has no effect. To change them, use the adequate API functions.
  • All changes triggered by API functions that change VG_Articulations or VG_Interactable (except RecoverObjectJoint) are now reflected in the Inspector components.
  • The control flags (that were a list of checkboxes in each Sensor before) have been replaced with a nicer VG_SensorControlFlags [Flags] enum. Due to the change above related to VG_ControllerProfile, they were also moved into VG_ControllerProfile assets.
  • Slightly re-ordered some Global Grasp Interaction Settings in MyVirtualGrasp.
  • VG_ExternalController cleared up and simplified.
  • Bugfix: when anchor of VG_Articulation is not set, no change needs to be reflected on anchor when calling API functions such as ChangeObjectJoint.
API Changes:
  • Uncluttered API from a number of classes and enums that did not need to be public.
  • TOGGLE_SYNTHESIS and TOGGLE_INTERACTION removed from VG_EditorAction.
  • GetBroadcastSignal – if your version supports networking (Pro feature) – was extended with a flag argument to be able to pick out specific parts of the network signal.
  • SetAvatarSpecificObjectSelectionWeight and ClearAvatarSpecificObjectSelectionWeights added, allowing to specify different selection preferences on an object for different avatars.
  • SetObjectJointState added to set an articulated object’s state in runtime.
  • Formerly deprecated SetGestureDuration and SetPushAngleThreshold are removed.
  • Formerly deprecated ResetObject and ResetAllObjects are removed.
Other / Internal Changes:
  • The .NET TargetFrameworkVersion has been downgraded from 4.8 to 4.7.2 since it caused some issues for Unity+VSCode users.
  • Debug messages that come from the native VG library to the console have been equipped with “context” as well (if applicable), meaning that selecting the message will highlight the GameObject the message relates to.
  • New external controller “UnityInteractionHand” added that supports controller supported by Unity’s action-based Unity Interaction Toolkit (together with “XRI Default Input Actions.inputactions” in Resources).
  • VG_ExternalControllerManager runtime optimizations.
  • Bugfix: rig registration now also considers hidden bones.
Update to VG Core library:
  • Dramatic runtime performance optimization for dynamic grasping
  • Improved pinch dynamic grasp on small objects. (fixed known issue from 0.14.0)
  • Always make SwitchGraspObject and JumpGraspObject succeed to grasp the target object. (fixed known issue from 0.14.0)
  • Fixed a crashing bug: when an object and all its upstream objects have FIXED VG_Articulation joint, when grasped by two hands, when one hand releases crash happens. (fixed known issue from 0.14.0)
  • Fixed a crashing bug: networking objectSignal will not crash anymore when invalid key is provided.
Known Issues:
  • When graspable object is very close to an index pushable object, after grasp the object, pushing gesture may not form.

  • A few events such as OnObjectGrasped and OnObjectDeselected do not function correctly for proxy avatars in multiplayer scenes.

  • The planar joint does not support discrete states and ChangeObjectJoint as yet.

  • Preview grasp is not able to pick up a physical object once grasp is triggered due to event handling is not taking care of this interaction type yet.

  • If Haptics is enabled in Sensor Control specifications, haptics feedback is not consistently given at the moment of grasp, release or collision on build.

  • MakeGesture have a bug when choose gesture from VG_GraspType.FLAT.

  • When using the VG_GraspEditor on Android, the grasp database is not modified. We recommend for now to do all grasp editing in the Unity Editor.

V0.14.0 (2022-06-17)

Major Functionality Changes:
  • Breaking change: ChangeObjectJoint is extended with one additional input parameter “new_anchor_transform”.
  • Physical objects are allowed to have disabled VG_Articulation components with any constrained joint types. Note the enabled VG_Articulation can only have Floating joint type.
  • Customized selection weight (different from default value 1.0f) will be recovered when object is switched from hidden to selectable again to enable interaction.
GUI / Component Changes:
  • SteamHand.cs added as new external controller to support any controllers supported through SteamVR (for example Knuckles).
  • When using finger tracking devices, Finger Control Type option – “BY_ANIMATION” is disabled, so only recommended BY_SENSOR_FULL_DOFS is used.
  • GUI issues of some Unity versions resolved by making lists [NonReorderable].
  • Pause / Resume replay of recorded sensor data control is added to VG_Recorder component: Shift + Replay Sequence Key is used to pause or resume replay.
  • MyVirtualGrasp’s elements have been re-ordered. For example: controllers at top to be closer to AutoSetup, GraspButton section removed and merged into Interaction settings.
  • All AutoSetup options have been renamed to better reflect the names of the external controllers.
API Changes:
Other / Internal Changes:
  • Onboarding scene object models are improved and sound effect added.
  • Guard mesh and rig are compatible when registering avatars.
  • Using special characters for object name in Unity is allowed and won’t affect VG functionality anymore.
  • A couple of text optimizations to the VirtualGrasp Tutorials to improve understanding.
  • Bugfix to avoid NullReference if a ForceReleasedObject is deleted in the same frame.
Update to VG Core library 0.11.0:
  • Fixed bug that is examplified in onboarding Task 3: after assembling cap to the bottle where cap becomes bottle’s child, then grasp bottle and cap together could make cap move off the initial position relative to the parent bottle. (fixed known issue from 0.13.0)
  • Fixed bug on if game object’s pivot is relatively far away from mesh center, there is strange interactive behavior on PRISMATIC joint (both through VG_Articulation or ArticulationBody): the rotating movement of controller can result in unexpected translation of object along the joint axis. Other constrained joint types are also affected. (fixed known issue from 0.13.0)
  • Fixed bug on if an object has rotational VG articulation joints, when switch from two hands grasping to one hand, or when one hand grasps an object at the moment of another hand releasing it, the remaining grasping hand have trouble to control the constrained object movement. (fixed known issue from 0.13.0)
  • Two hands grasp interaction with an object is improved. Both hands now contribute to the position and rotation changes of the grasped object.
Known Issues:
  • When graspable object is very close to an index pushable object, after grasp the object, pushing gesture may not form.

  • A few events such as OnObjectGrasped and OnObjectDeselected do not function correctly for proxy avatars in multiplayer scenes.

  • The planar joint does not support discrete states and ChangeObjectJoint as yet.

  • Dynamic Grasp on small or thin objects sometimes thumb has no contact on the object.

  • Preview grasp is not able to pick up a physical object once grasp is triggered due to event handling is not taking care of this interaction type yet.

  • If Haptics is enabled in Sensor Control specifications, haptics feedback is not consistently given at the moment of grasp, release or collision on build.

  • MakeGesture have a bug when choose gesture from VG_GraspType.FLAT.

  • ResetAllObjects and ResetObject are not working properly.

  • SwitchGraspObject and JumpGraspObject may fail due to bad position of the target object with respect to the hand.

  • Crashing bug: when an object and all its upstream objects have FIXED VG_Articulation joint, when grasped by two hands, when one hand releases crash happens.

V0.13.0 (2022-05-23)

Major Functionality Changes:
  • The AutoSetup function was optimized by adding it to each single sensor. No need for indexing sensors anymore.
GUI / Component Changes:
  • VirtualGrasp menu re-organized for better usability.
  • Some VirtualGrasp menu functions were made obsolete/removed: “Create VG Scene,” “Convert object tags to VG_Articulations,”
  • The “About” (VirtualGrasp) window was made fixed size.
  • A “Welcome” window was added that can be access from the VirtualGrasp menu. It will automatically open if it is detected that XR Plugin Management is not installed, but used in the scene. The choice to install the UnityXR package and the Unity Tutorial package is provided to the user.
  • MyVirtualGraspBurst was removed.
  • In VG_Highlighter, if no shader is assigned, the included “RimLight” shader will be used.
API Changes:
  • All functions that were “XYZAtRuntime()” functions (such as RegisterAvatarAtRuntime()) have been renamed by removing that suffix (such as to RegisterAvatar()).
Other / Internal Changes:
  • A more appealing environment was added to the VG_Onboarding scene.
  • A version check was added to the BakingClient to inform you if a newer version of VG is available for download.
  • SDK was successfully tested with Unity 2022.1.0b16.
  • Some 3D models in the VG_Onboarding scene were simplied and optimized.
  • Additional .xml files have been packaged along the .dll libraries to expose the comments / summaries for the API into the coding environment.
  • Creating a VG_Editor scene can only be done when XR Management is installed and a vg_tmp directory exists.
  • Unity Tutorial Framework dependency handled. Version >=2.0 needs to be installed to run VG Unity tutorials.
  • physicsDefaultContactOffset removed from DebugSettings. We won’t fiddle with your project settings anymore.
  • Some graphical adjustments to the onboarding scene.
  • Allowed to get rid of the VG welcome window if you want to.
  • A number of warnings that were not really warnings were removed.
Update to VG Core library 0.10.0:
  • Fixed bug on new recording sensor recording using VG_Recorder is pending the data to earlier recordings. (fixed known issue from 0.12.0)
  • Fixed bug on successively recording sensor data using VG_Recorder can lead to crashing. (fixed known issue from 0.12.0)
  • Fixed bug on the 2nd method – pressing button “Export Scene in Edit” to Create Debug Files has a bug: instead of create debug files in vg_tmp folder, it enabled “Export Scene in Runtime”. (fixed known issue from 0.12.0)
  • Fixed bug on runtime change parent of an interactable object with constrained joint type may result in unexpected joint axis different from its initial setting. (fixed known issue from 0.12.0)
Known Issues:
  • When graspable object is very close to an index pushable object, after grasp the object, pushing gesture may not form.

  • A few events such as OnObjectGrasped and OnObjectDeselected do not function correctly for proxy avatars in multiplayer scenes.

  • If game object’s pivot is relatively far away from mesh center, there is strange interactive behavior on PRISMATIC joint (both through VG_Articulation or ArticulationBody): the rotating movement of controller can result in unexpected translation of object along the joint axis. Other constrained joint types are also affected.

  • If an object has rotational VG articulation joints, when switch from two hands grasping to one hand, or when one hand grasps an object at the moment of another hand releasing it, the remaining grasping hand have trouble to control the constrained object movement.

  • The newly added planar joint does not support discrete states and ChangeObjectJoint as yet.

  • Dynamic Grasp on small or thin objects sometimes thumb has no contact on the object.

  • Preview grasp is not able to pick up a physical object once grasp is triggered due to event handling is not taking care of this interaction type yet.

  • If Haptics is enabled in Sensor Control specifications, haptics feedback is not consistently given at the moment of grasp, release or collision on build.

  • There is an Inspector GUI artifact in VG_MainScript/Sensors, but it is a known Unity issue.

  • In onboarding Task 3, there is a bug after assembling cap to the bottle where cap becomes bottle’s child, then grasp bottle and cap together could make cap move off the initial position relative to the parent bottle. This will not happen however if you first grasp bottle then later another hand grasp the cap. We have identified cause and the problem will be fixed in V1.3.0.

V0.12.0(2022-04-14)

Major Functionality Changes:
  • VG_BakingClient has been overhauled with support of Prepare project in the same GUI without the need to move to Debug Settings if there are no runtime spawned interactable objects.
GUI / Component Changes:
  • AutoSetup enum name for Oculus finger tracking was changed from “Quest_FT” to “Oculus_FT” to conform with the file names and avoid confusion.
  • Fixed confusion of disabled (unchecked) VG_Articulation component. Now, if the component is added but disabled (unchecked) the object will not be interactable. Runtime enabling or disabling this component will make the object interactable or uninteractable respectively. However note that it is more efficient to change object’s interactable status by SetObjectSelectionWeight. (fixed known issue from 0.11.1)
API Changes:
  • There are no API changes.
Other / Internal Changes:
  • Updated GleechiHands with better shader and material, as well as bone structure for finger pose mapping and grasp interaction (fixed known issue from 0.11.1).
  • Updated Unity tutorials for VG baking client.
  • Bugfix on if two hands trigger grasp on a physical object at the exact same moment, the hands will form grasps, but the object freeze and can not be moved by hands. (fixed known issue from 0.11.1)
Update to VG Core library 0.9.0:
  • Bugfix on unreliable grasp and release triggering for finger tracking solutions OCULUS_FT. (fixed known issue from 0.11.1)
  • Bugfix on if two hands grasp on a non-physical FLOATING object, when one hand releases, the other hand could have a big offset from sensor position. (fixed known issue from 0.11.1)
Known Issues:
  • New recording sensor recording using VG_Recorder is pending the data to earlier recordings.

  • Successively recording sensor data using VG_Recorder can lead to crashing.

  • The 2nd method – pressing button “Export Scene in Edit” to Create Debug Files has a bug: instead of create debug files in vg_tmp folder, it enabled “Export Scene in Runtime”.

  • Runtime change parent of an interactable object with constrained joint type may result in unexpected joint axis different from its initial setting.

  • When graspable object is very close to an index pushable object, after grasp the object, pushing gesture may not form.

  • GetReplayStartWristPose does not give accurate wrist pose.

  • A few events such as OnObjectGrasped and OnObjectDeselected do not function correctly for proxy avatars in multiplayer scenes.

  • If game object’s pivot is relatively far away from mesh center, there is strange interactive behavior on PRISMATIC joint (both through VG_Articulation or ArticulationBody): the rotating movement of controller can result in unexpected translation of object along the joint axis. Other constrained joint types are also affected.

  • If an object has rotational VG articulation joints, when switch from two hands grasping to one hand, or when one hand grasps an object at the moment of another hand releasing it, the remaining grasping hand have trouble to control the constrained object movement.

  • The newly added planar joint does not support discrete states and ChangeObjectJoint as yet.

  • Dynamic Grasp on small or thin objects sometimes thumb has no contact on the object.

  • Preview grasp is not able to pick up a physical object once grasp is triggered due to event handling is not taking care of this interaction type yet.

  • If Haptics is enabled in Sensor Control specifications, haptics feedback is not consistently given at the moment of grasp, release or collision on build.

V0.11.1 (2022-04-11)

Major Functionality Changes:
  • Breaking change: Avatar IDs that were before the array index have been replaced by the Unity instance ID of the SkinnedMeshRenderer that relates to the avatar. The VG API is providing helper functions and the SDK scripts have been adjusted accordingly. Check out GetSensorControlledAvatarID, GetReplayAvatarID, and GetAvatarID.
  • Released Gleechi’s first original avatar in VirtualGrasp/Resources/GleechiHands. This replaces earlier released OcculusHands, so in the VG SDK that support only one avatar, only GleechiHands are supported.
  • Added planar joint support on VG_Articulation. See VG Onboarding Task6 to show the example use.
GUI / Component Changes:
  • AutoSetup “External” string for Oculus finger tracking was changed from “QuestHand” to “OculusHand” to conform with the file names and avoid confusion.
  • Bugfix on AutoSetup in MyVirtualGrasp is broken. Please refer to the manual “AutoSetup” sections on the ExternalController you like to use. (fixed known issue from 0.10.1)
  • VG_Articulation has been overhauled as a dynamic component to improve user experience.
  • Replay and Remote checkboxes for avatar are only shown if the VG version supports this feature.
  • VG_Interactable added “Throw Velocity Scale” and “Throw Angular Velocity Scale” to allow specifying object-specific throwing power that overwrite those set in Global Grasp Interaction Settings.
  • VG_Recorder has improved file management so that users can optionally provide in Recording Filename with either a single file name like “MyRecordingFile”, or a folder and a file name like “MyRecordingFolder/MyRecordingFile”. Also adding the file extension “.sdb” is only optional.
API Changes:
Other / Internal Changes:
  • Bugfix on OnObjectSelected event is not invoked for object with Index Pushable interaction affordance.
  • Bugfix on OnObjectGrasped event is not invoked for JumpGraspObject call. (fixed known issue from 0.10.1)
  • Bugfix on after an interactable object with constrained joint follows the move of its non-interactable parent (or an ancester), the moment when hand grasp or push this constrained object, it jump back to the original global pose. (fixed known issue from 0.10.1)
  • Bugfix on physical avatar when grasping physical object with sticky hand interaction type object and hand is grandually moving away.
  • Further performance optimization of selecting which objects need to be synced between Unity and VG.
  • Improved grasping and sliding a physical object on another object with collider. Note however still Unity physical material with smaller friction should be used for desired sliding behaviors. (fixed known issue from 0.10.1)

  • Provide error message when trying to use an controller but not enabling its #define (e.g., VG_USE_LEAP_CONTROLLER).
  • Provide error signal if interactable object is labeled as Static.
  • Provide error signal if start a scene without providing SkeletalMesh for avatar setup.
  • Provide error message if you are on Mac that Mac is not supported.

  • All #defines that enable controllers with dependencies on third party plugins have been prefixed with VG_ (e.g., USE_LEAP_CONTROLLER is now VG_USE_LEAP_CONTROLLER) to avoid conflicts with non-VG defines.
  • Onboarding scene added Task6 to showcase VirtualGrasp’s newly added support of planar joints.
  • Added first Unity tutorials.
Update to VG Core library 0.8.0:
  • Bugfix for physical avatar index finger push gesture formation is not smooth. (fixed known issue from 0.10.1)
  • Improved pinch grasp on small objects. (fixed known issue from 0.10.1)
  • Bugfix for when hand form index finger push gesture grasp synthesis adopted push gesture problem.
  • Bugfix for JumpGraspObject crash on unbaked object problem.
Known Issues:
  • There is a problem of unreliable grasp and release triggering for finger tracking solutions OCULUS_FT.

  • If two hands grasp on a non-physical FLOATING object, when one hand releases, the other hand could have a big offset from sensor position.

  • If a game object only has a disabled (unchecked) VG_Articulation component, this game object is still marked as interactable so that you can grasp it. And even if this disabled VG_Articulation set a joint other than Floating, it will behave as Floating joint. These are undesired behavior and will be fixed.

  • If two hands trigger grasp on a physical object at the exact same moment, the hands will form grasps, but the object freeze and can not be moved by hands. This is difficult to reproduce but still could happen.

  • The newly released GleechiHands does not have perfect mapping of real finger poses when using finger tracking solutions like OCULUS_EXT and LEAP_EXT.

  • A few events such as OnObjectGrasped and OnObjectDeselected do not function correctly for proxy avatars in multiplayer scenes.

  • If game object’s pivot is relatively far away from mesh center, then there is strange interactive behavior on PRISMATIC joint (both through VG_Articulation or Unity ArticulationBody): the rotating movement of controller can result in unexpected translation of object along the joint axis. Other constrained joint types are also affected.

  • If an object has rotational VG articulation joints, when switch from two hands grasping to one hand, or when one hand grasps an object at the moment of another hand releasing it, the remaining grasping hand have trouble to control the constrained object movement.

  • The newly added planar joint does not support discrete states and ChangeObjectJoint as yet.

  • Successively recording sensor data using VG_Recorder can lead to crashing.

  • When graspable object is very close to an index pushable object, after grasp the object, pushing gesture may not form.

  • Preview grasp is not able to pick up a physical object once grasp is triggered due to event handling is not taking care of this interaction type yet.

  • If Haptics is enabled in Sensor Control specifications, haptics feedback is not consistently given at the moment of grasp, release or collision on build.

  • Dynamic Grasp on small or thin objects sometimes thumb has no contact on the object.

V0.10.1 (2022-03-01)

Major Functionality Changes:
  • Breaking change: Removed support of using VG_Articulation component with constrained joints (non-FLOATING joint) on objects with Rigidbody. Developers are encouraged to use Unity Joints or Unity ArticulationBody for physical joints.
  • Breaking change: in VG_Articulation, “Pivot” changed name to “Anchor” to be more consistent with the terminology used by Unity ArticulationBody. And “Push Pivot” changed name to “Push Direction” to be more descriptive. Due to the name change, the reference can be lost and need to be reassigned.
  • More stable grasp interaction with physical objects and better throwing experiences.
GUI / Component Changes:
  • In Global Grasp Interaction Settings changed variable name “Grasp Speed” to “Grasp Animation Speed” and “Release Speed” to “Release Animation Speed”. The default values for them are reduced to 0.05 (from 0.1) and 0.1 (from 0.2) second respectively to make grasp and release more snappy. The minimum values for both are reduced to 0.01 second (from 0.1 second).
  • In Global Grasp Interaction Settings added “Throw Velocity Scale” and “Throw Angular Velocity Scale” to control power of throw on grasped objects.
  • VG_Articulation editing is disabled when object has Rigidbody component. (Was disabled when object has ArticulationBody component in version 0.9.6)
  • Made VG_MainScript abstract since one should only use a child class (such as MyVirtualGrasp).
  • Improved handling of AutoSetup when a VG_MainScript is created (such as adding a sensor instead of complaining it has not been added).
  • MyVirtualGrasp/Avatars added “Replay” check to indicate if this avatar is to be used for sensor replay. If not checked, it will be controlled by sensor / controller.
API Changes:
  • Breaking change: VG_Controller.SetProcessedByFrame() function is removed. If you want to set an avatar for sensor replay, you can specify the avatar for replay by checking Replay in MyVirtualGrasp component.
Other / Internal Changes:
  • Event handling bugfix: OnObjectFullyReleased do not trigger on objects that are not grasped.
  • Onboarding scene Task3 improved ManageContainerObject.cs script.
  • Onboarding scene added Task4 showcase VirtualGrasp’s support of interaction with ArticulationBodys.
  • Onboarding scene added Task5 showcase VirtualGrasp’s support of object assembly with VG_Articulation without rely on physics.
  • Endpoints for CABVG cloud baking updated to new server.
  • Hidden affordances (such as after switching a VG_Articulation from revolute joint to fixed joint) are ignored as they should be.
  • Recording files added to StreamingAssets.
  • Bugfix when objects are moved to a different parent which has not been registered.
Update to VG Core library 0.7.0:
  • Default hand pose animation is improved.
  • Dyamic Grasp rejection rate is improved.
  • Improved hand palm colliders for physical avatar.
  • Removed the controller hand offset when runtime change a grasped object’s VG Articulation to FLOATING joint type.
Known Issues (To Be Fixed In Next Release)
  • Index finger push gesture formation is not smooth when avatar is set to be physical.
  • OnObjectGrasped event is not invoked for JumpGraspObject call.
  • After an interactable object with constrained joint follows the move of its non-interactable parent (or an ancester), the moment when hand grasp or push this constrained object, it jump back to the original global pose.
  • Grasping and sliding a physical object on another object with collider shows obvious non-smooth behavior due to some artificial manipulation of object velocities.
  • AutoSetup in MyVirtualGrasp is broken. Please refer to the manual “AutoSetup” sections on the ExternalController you like to use.
Known Issues:
  • Since Unity 2019 or earlier versions do not have Unity ArticulationBody, these earlier versions of Unity is not supported.
  • A few events such as OnObjectGrasped and OnObjectDeselected do not function correctly for proxy avatars in multiplayer scenes.
  • Dynamic Grasp sometimes has unnaturally large thumb extention.
  • Grasps on small objects may have unatural finger placement.
  • If a game object only has a disabled (unchecked) VG_Articulation component, this game object is still marked as interactable so that you can grasp it. And even if this disabled VG_Articulation set a joint other than Floating, it will behave as Floating joint. These are undesired behavior and will be fixed.

V0.9.6 (2022-02-15)

Major Functionality Changes:
  • Breaking change: Prefabs GleechiLib and GleechiLibBurst removed. You are expected to just insert a VG_MainScript component (such as MyVirtualGrasp) on a GameObject of your choice.
  • Grasp .db will be handled automatically, no manual deployment needed anymore (UploadGraspDB menu entry removed).
  • Removed ObjectIdentifiers. The single and only component to mark objects as interactable is VG_Articulation. This should not break earlier use of VG_Interactable as Unity will create missing VG_Articulation component through RequireComponent requirement.
  • Performance speed up by handling only subset of close-by objects.
  • Added
GUI / Component Changes:
  • GraspStudio optimized and extended (see VG_GraspStudio).
  • Helper tooltips adjusted after documentation being transferred to docs.virtualgrasp.com.
  • Disabling VG_Articulation editing when ArticulationBody is on object.
  • Adjusted auto-setup offsets for provided hand model when using UnityXR.
API Changes:
  • OnObjectFullyReleased event carries VG_HandStatus instead of Transform, aligning with all other VG events.
  • VG_AutoSetup.QUEST renamed to VG_AutoSetup.UNITYXR
  • VG_VrButton extended with GRIP_OR_TRIGGER to enable both buttons for grabbing.
  • VG_Controller.SetObjectAffordances() added to change object affordances in runtime.
Other / Internal Changes:
  • Event handling order bugfix: OnObjectReleased() called before OnObjectFullyReleased()
  • All assets (onboarding scene) provided as Prefabs.
  • .scn files also saved when using Save Debug Edit.
  • Avatar Bone management optimized.
  • Removed Unity Garbage Collection during Editor time.
  • Initial support for Unity ArticulationBodies.
  • Improved upon physical object handling.
  • Improved upon physical hand handling.
Update to VG Core library 0.6.6:
  • Added support to interact with objects with Unity ArticulationBody components.
  • For non-physical objects (objects without RigidBody or ArticulationBody), grasping a child object with constrained joint will also move the parent non-physical object, and the movement will propagate back to upstream non-physical objects as long as they are connected through constrained joints.
  • DG can grasp on the inner structure of a complex object, for example a driving wheel.
  • Improved fitting of physical avatar finger colliders.
Known Issues:
  • When grasping freely movable physical objects, movement with the object is suboptimal with observable wobbling effects. This is to be fixed in next release.
  • When throwing a physical object, the object velocity is suboptimal. This is to be fixed in next release.
  • Dynamic Grasp sometimes has unnaturally large thumb extention.
  • Grasps on small object may have unatural finger placement.

V0.9.5 (2022-01-14)

GUI / Component Changes:
  • Grasp DB file for baking can now be adjusted in scriptable object VG_VirtualGraspDbFile.
  • All objects and hand included as Prefabs and used as Prefabs in VG_Onboarding scene.
Other / Internal Changes:
  • Bugfix that if loading .db at start fails, it will not overwrite at end.
  • Proper reading of VG_Onboarding’s fallback .db when no .db is found.
  • PDFs added in Doc/ for offline tutorial and offline API documentations.
Update to VG Core library 0.6.5:
  • Bugfix that intermediate empty object can cause crash.
  • Won’t save empty object db entries into grasp db file.
Known Issues:
  • If an object has rigidbody, changing object physical properties such as drag or mass won’t affect VG interaction.
  • Dynamic Grasp sometimes has unnaturally large thumb extention.
  • Grasps on small object may have unatural finger placement.

V0.9.4 (2021-12-16)

Other / Internal Changes:
  • VG_BakingClient updated to support larger files.
  • Warning added if you have an index-pushable, physical (i.e. Rigidbody) object but no physical hand that would be needed to interact with a physical button.
Update to VG Core library 0.6.4:
  • Default hand pose becomes more natural.
  • Pinch grasp object is chosen more strictly.
Known Issues:
  • If an object has rigidbody, changing object physical properties such as drag or mass won’t affect VG interaction.
  • Dynamic Grasp sometimes has unnaturally large thumb extention.
  • Grasps on small object may have unatural finger placement.