Custom Hand Grab Poses
Updated: Mar 14, 2025
Hand Grab Poses enable you to enforce a specific, custom pose on the visible hand when grabbing an object. The pose used can be different depending on how or where the player is grabbing the object. For example, when picking up a cup with a handle, the pose of the hand would be different when grabbing the cup as opposed to picking it up by the handle.
How do Hand Grab Poses work?
There are two key elements of hand grab poses in Interaction SDK:
- Hand Pose Data
- Hand Grab Pose
Hand Pose Data assets (UIsdkHandPoseData
) contain the joint data for a specific pose. These Hand Pose Data properties are editable in the Details panel:
- Handedness - Specifies which hand, Left or Right, this pose represents.
- Pose Lerp Time - Sets the amount of time in seconds it takes to interpolate into and out of this pose when it is triggered during runtime. A value of 0 disables interpolation.
Note: Hand Pose Data assets can currently only be authored in Unreal Editor via the HandPoseStudio level in the Samples, allowing new Hand Pose Data files to be created in VR Preview over Link from the currently posed hand of the player.
A Hand Grab Pose (
UIsdkHandGrabPose
) is a scene component that is used to determine which Hand Pose Data to use and the position of that pose relative to the actor. This component is attached to an actor as a child of the
ISDKGrabbableComponent
. A Hand Grab Pose is displayed in the viewport as a visual representation of the pose once a
Hand Pose Data
asset is assigned in its properties. By default, it is not visible at runtime, although it can be visualized using a
console command.
These Hand Grab Pose properties are editable in the Details panel:
Hand Pose Data - Specifies the Hand Pose Data asset to use for this grab pose.
Pose Mode - Determines how this grab pose should behave when activated during runtime.
- None - Causes no pose to be applied.
- Snap Object to Pose - Causes the grabbed object to move and rotate to lock to the hand in the given pose.
- Snap Pose to Object - Causes the hand pose to move and rotate to lock to the grabbed object in the given pose.
- Mirror Reference - Sets this pose to be used as a mirror reference for a different Hand Grab Pose. See Mirroring Mode below for more information on this mode.
Snap Move Duration: Sets how long, in seconds, the linear interpolation will last for transitioning to and from the pose when either the Snap Object to Pose or Snap Pose to Object modes are enabled.
Mirroring Mode - How this pose should behave for grabs not using the hand of this Hand Pose.
- None - Perform no mirroring for the other-handedness, grabs not using the hand of this Hand Pose will not trigger a pose.
- Automatic - Automatically generates a mirrored hand pose, enables the Mirror Location and Rotation parameter.
Manual - This will use a Hand Grab Pose with Pose Mode set to Mirror Reference for grabs not using the hand of this Hand Pose.
NOTE: The mirror reference Hand Grab Pose must be parented to the base Hand Grab Pose. The manually mirrored Hand Grab Pose will inherit all parameters from the base.
Mirror Location and Rotation - If enabled, will automatically calculate the position/rotation of the mirrored hand grab pose and enables the Mirror Axis parameter. If disabled, both hands will share the same location/rotation. Requires Mirroring Mode to be set to Automatic.
Mirror Axis Enum specifying which Axis (X, Y, Z) of the parent actor the generated mirrored position/rotation should mirror across. Requires Mirror Location and Rotation to be enabled.
Show Debug Visual in Editor - If enabled, will spawn an editor-time visualization of the hand grab pose.
Remove Debug Visual on Play - If enabled, will destroy the debug visual when runtime starts.
Pose Disabled - If enabled, this pose will be ignored when the system caches poses.
Setting Up a Hand Grab Pose In the My Blueprint panel, select the ISDKGrabbableComponent
on your Actor. Then, click Add and choose IsdkHandGrabPose
to add a new Hand Grab Pose component.
Select the ISDKHandGrabPose
component. In the Details panel, Set the Hand Pose Data
asset to use in the Hand Pose Data property. The pose in the example was authored for a left-hand grab of the handle of a mug.
In the Blueprint Editor Viewport, using the transform tools with the Debug Visual as a reference, position the Hand Grab Pose in the desired location and orientation.
Configure the Pose Mode and Mirroring Mode as desired. In the example, Pose Mode is set to snap the object to the pose since the mug is a freely movable object. If it were an object that is fixed to another sturcture, such as a lever on a panel, setting the pose to snap to the object would make more sense. Mirroring Mode is set to Automatic so the pose is used for both right-hand and left-hand grabs. Mirror Location and Rotation is enabled and the Mirror Axis is set to Y to cause the pose to be oriented correctly when using the right hand to grab the mug.
Compile and save the Blueprint. Run your level with the grabbable object in it using VR Preview to test out the new behavior.
Creating New Hand Grab Pose assets To author a new Hand Pose Data
asset, you can use the Hand Pose Studio level available in the Interaction SDK Samples project.
Note: the default location for Hand Pose Data
assets created with the Hand Pose Studio level is OculusInteractionSamples/HandPoses
. To change the location to be more appropriate for your use case, open the HandPoseStudioControls Widget Blueprint (located in /Meta Interaction SDK Content/Tools/HandPosing
) and set a different path using the Pose Save Location variable.
Open the Hand Pose Studio level in the Interaction SDK Samples project and run the level in VR Preview with Meta Quest Link active.
Select the hand (Left or Right) you want to create a new pose for in the UI.
Form your hand into the pose you want to record.
Select Generate New Hand Pose to create a new Hand Pose Data
asset.
The new asset is displayed in the list.
Exit the VR Preview.
Open the Content Drawer or Content Browser and navigate to the location you set to save the new Hand Pose Data
asset. The new asset is shown. In this case, the location for new Hand Pose Data assets is a HandPoses
folder in the root Content
directory (/Game/HandPoses
).
Console Commands for Debugging Command | Description |
---|
Meta.InteractionSDK.HandGrabPoses.DebugPoseTransforms 1
| when enabled, will show the generated transforms for all hand grab poses |
Now that you know how to set up hand grab poses for grab interactions with Interaction SDK, continue on to the following guides: