Poser

Introduction

Poser is the module responsible for procedurally generating a grabbing pose around an object. This module can be used to pose a ghost hand so the resulting pose can be applied to master hand before performing a snap interaction.

Objects around which grabbing pose can be generated must have the Posable component attached.

Pose generation

The process of pose generation is performed as follows:

  1. Hand is placed and rotated so hand palm center is (desirably) contacting the object.

  2. Each finger bone is rotated iteratively from an initial pose to a goal pose.

  3. A sphere cast is performed through each bone searching for colliders that might be intersecting the bone.

  4. If that collider is found, lower bones won't be rotated in following iterations.

Model

  • Hand: Parent model (HandModel) that this module will be connected to.

  • Posable: Object around which grabbing pose will be generated.

Poses

  • Opened Hand Pose: Pose where all 5 fingers are extended.

  • Index Pinch Pose: Pose where thumb tip and index tip are in contact. This pose will be used as goal pose for objects wherePosable.handGesture is Index Pinch.

  • Full Pinch Pose: Pose where all 5 fingers are in contact. This pose will be used as goal pose for objects wherePosable.handGesture is Full Pinch.

  • Precision Grip Pose: Fist pose where thumb relies on middle fingers. This pose will be used as goal pose for objects wherePosable.handGesture is Precision Grip.

  • Power Grip Pose: Fist pose where thumb relies on index finger. This pose will be used as goal pose for objects wherePosable.handGesture is Power Grip.

  • Custom End Pose: Other arbitrary pose not included above. This pose will be used as goal pose for objects wherePosable.handGesture is Custom and Posable.customEndPose is null.

Control

  • Max Distance: Distance limit for the raycast that goes from hand palm to object.

  • Ghost Matches Master Wrist: If disabled, hand palm of ghost representation will be in contact with the object.

  • When Pose Point Is Null: Pose that should be applied when PoserModel.posable is null.

  • Use Layer Masks: If enabled, only collision layers specified in PoserModel.layerNames will be considered while generating the pose.

  • Layer Names: Layers that will be considered during pose generation. The resulting pose can make finger bones to pass through colliders which layer names are not included in this list.

Performance

  • Max Iterations: How many rotation steps will be applied to each finger bone during pose generation. Low number of iterations will translate into greater rotations applied to each finger bone on each iteration which is quicker but it can make some bones to intersect colliders. High number of iterations can be expensive but it will generate the pose with more precision.

  • Only Finger Tips: If enabled, a finger will stop curling into goal pose when its tip touches an object's collider. This option enables finding the pose sooner but at the cost of precision as if some inner finger bone touches the object before the finger tip, this collision won't be considered.

Debug

  • Draw Lines: If enabled, a line will be drawn from the palm center of the ghost representation to the position of the Rigidbody linked to the posable object.

View

Events

  • On Set Posable: Event invoked when property PoserView.posable is set or modified. Modifying PoseModel.posable won't trigger this event.

Last updated