FAQs

This asset has a dependency on the HPTK package. Missing this package can result in error messages like this:

The type or namespace name ‘…’ could not be found (are you missing a using directive or an assembly reference?)

You can verify this by opening Unity Package Manager and check if HPTK package is installed. If it's not, go to ‘Add package from Git URL…’ and enter the following URL:

https://github.com/jorgejgnz/HPTK.git

Rubber/jelly hands?

If slave hand representation presents unstable or unrealistic hand physics, this might be due to an incorrect ProjectSettings/Physics configuration. You can get more info about setting up hand physics in the getting started guide for HPTK.

Getting started guide for HPTK is available here.

How to record new poses?

This asset already contains poses for grabbing and pinching for both left and right hands. If you want to manually record new poses, follow these steps:

  1. Right-click on Project window and click on Create/HPTK Posing/HandPose Asset.

  2. Add a PoseRecorder component to any gameobject in the scene.

  3. Set the HandModel of the hand from which you want to record/apply a pose.

  4. Set the HandPose asset that you have just created.

  5. Rotate (manually) the bones referenced by the BoneModels of that HandModel

    (HandModel) > (FingerModels) > (BoneModels).transformRef

  6. Set an alias (optional).

  7. Once you have a desired pose, press Overwrite button (PoseRecorder component).

  8. HandPose asset now should contain the values of position, rotation and scale for every bone of the hand.

You can find HandModels as children of [Modules] > ProxyHandModule > ProxyHandModel

How to change ghost destination?

Manual

Go to the PosableHandModel component for the hand you want to generate the grabbing. Change PosableHandModel.posePoint by any other PosePointHandler in the scene (HPTK Controllers are HPTK Handlers too).

Scripted

To minimize code coupling, it is recommended to use viewModel’s properties (excepting from the controller that can access that model directly). This is an example:

public class YourScript: MonoBehaviour
{
    public PosableHandHandler posableHand;
    public PosePointHandler newPosePoint;

    private void ChangePosePoint()
    {
        posableHand.viewModel.posePoint = newPosePoint; 
    }
}

How to use HPTK with full-body armatures?

Each armature has its own rotations offsets and HPTK package includes a script (AutomaticHandSetup) that generate procedural hands (including colliders and joints) for any rigged hand. These hands have to be posed manually, before starting the generation, following specific directions represented by arrows in the scene.

You can get more info about setting up custom rigged hands on HPTK here.

The following tutorial shows how to generate a valid HPTK hand (including physics) from an arbitary full-body armature (Mixamo): https://youtu.be/AA8YJU9V3nQ

Once your custom rigged hands are compatible with HPTK, you can generate poses for those hands by following these steps:

  1. AutomaticHandSetup will only add references to HandModel.index and HandModel.thumb. Check that all your HandModels contains references to all fingers of your custom hand.

  2. Add PosableHandModule prefab as child of (HandRootObject) > [Modules].

  3. Configure (HandRootObject) > [Modules] > PosableHandModule > PosableHandModel

    1. Set the PosePoint you want the ghost hand to grab.

    2. Set the ProxyHandModel that includes the ghost HandModel that you want to pose.

    3. Set StartPose. Recommended OpenHand.L or OpenHand.R.

    4. Set EndPose. Recommended: Fist.L or Fist.R.

How to play the snapping example scene in VR?

HPTK Posing & Snapping is distributed without dependencies (excepting the HPTK package) so the example scenes are ready to be used in desktop but not in VR.

The following tutorial shows how to use the snapping example scene in Oculus Quest with hand tracking: https://youtu.be/GMZQYqQ3mQ0

You can get more info about using HPTK in VR here.

Last updated