HandPosing
A tool for quickly authoring hand poses to objects in VR using hand-tracking
Class List
Here are the classes, structs, unions and interfaces with brief descriptions:
[detail level 1234]
 NHandPosing
 NEditor
 CHandGhostEditor
 NInteraction
 CBaseGrabberSample implementation for a Grabber (without dependencies) that works with the snapping system. Inherit from this class to be able to reuse the provided Grabber-Grabbable classes or completely implement (or adapt!) your own by implementing the much smaller IGrabNotifier. This grabbed does not only takes care of detecting a grab but also if the user intended to grab and it failed
 CGrabbableThis class specifies a basic grabbable object. Taking care of moving the object while beign held by a BaseGrabber using local offsets (similar to parenting transforms)
 CIGrabNotifierLayer for communicating between the Grabber and the Snapper code. You must implement this interface if you want your grabber to be able to snap to objects
 CPhysicsGrabbableThis custom version of the Grabbable, uses physic Joints instead of transforms to move the object
 CSnappableSnappables are objects the hands can snap to using a Snapper. Internally it has a list of Snap Points that specify the positions and rotation of bones to gently held the object. Snap Points can be generated during Play-Mode using Hand-Tracking, but in order for the data to survive once Play-Mode is left, it is important to store it into a SnapPointsCollection. Then, the SnapPoints can be re-created forever in Edit-Mode from said collection and be modified. At that point the SnapPointsCollection is no longer needed
 CSnapperThis is one of the key Classes of HandPosing, it takes care of overriding the Hand representation using a HandPuppet, so it snaps to objects when the user is holding them
 NOVRIntegration
 NGrabEngine
 CControllerFlexThis Flex Interface is used to detect grabbing when using an Oculus Controller
 CFlexInterfaceRepresents interface for "flex" or grab strength. Serves as template for all grabbing methods
 CNoopFlexNo op flex detector used in snap-to-pose, used to turn off grab detection so that poses can be recorded
 CPinchTriggerFlexThis flex interface compares if the user is pinching with the Index or the Middle Finger. It can track the pinches in high and low confidence if specified, and tipically returns a fairly safe value since it relies on OVR methods for calculating the pinching
 CSphereGrabFlexSphere grab detector. They use poses (in this case hand state's raw pose) to determine if hand fingers are curled up into a ball. In this case we use the capsules to do determine the finger tips as well as the volume that curl into
 CSphereGrabPinchFlexThis Flex interface serves as the Union between SphereGrabFlex and PinchTriggerFlex. It will return a grab if any of them is in their own respective valid ranges, but also populate its internal state to know if the current used value was from the sphereFlex or the pinchFlex. That way the output value can be check against the right threshold ranges in the current frame
 CAnimatedHandOVRPurely based on the Hand.cs script from Oculus Plugin, but with BaseGrabber compatibility added instead of OVRGrabber. Uses an Animator to change the fingers of the hand when using controllers
 CAvatarHandPuppetOVRScript for moving Oculus Avatar hands with the puppeting system. Oculus Avatar hands are generated at runtime and only support controllers by default, with this script the pose can be overriden at runtime in first-person avatars
 CGrabberHybridOVRCustom grabber for the Oculus Plugin This Grabber supports grabbing with both Oculus Hand tracking, using Pinch gesture and grabbing using Oculus Touch controllers, using the Primary Hand Trigger
 CSkeletonDataProviderOVRCustom implementation for the Oculus plugin of the SkeletonDataProvider. It is important to note that since OVRSkeleton gets executed at -80, we want to update the data as soon as it is available (hence the -70)
 CTipsTriggersOVRComponent that prepares the OVRHand to have detection capsules in the tips of the fingers. This is not mandatory but can be interesting to add when using the Pinch grab to maximise accuracy
 CUpdateNotifierOVRThis is a custom implementation for Oculus plugin of the AnchorsUpdateNotifier. Since OVRCameraRig sometimes updates anchors at Update, FixedUpdate or even OnBeforeRender, this will inform the puppet system of the right moments these updates occur
 NSnapRecording
 CBaseSnapPointA SnapPoint indicates the properties about how a hand can snap to an object. The most important is the position/rotation and finger rotations for the hand, but it can also contain extra information like a valid holding surface (instead of just a single point) or a visual representation (using a hand-ghost)
 CHandGhostA static (non-user controller) representation of a hand. This script is used to be able to manually visualize and modify hand poses
 CHandGhostProviderHolds references to the prefabs for Ghost-Hands, so they can be instantiated in runtime to represent static poses
 CHandPoseRecorderExtract the current pose of the user hand and generates a valid snap point in the nearest snappable. Typically be used in play-mode
 CSnapPointDataSerializable data-only version of the SnapPoint so it can be stored when they are generated at Play-Mode (where Hand-tracking works)
 CSnapPointA single snap point. When not using different hand-scales this is the main type of BaseSnapPoint to use
 CSnapPointInterpolatorThis SnapPoint is actually a Composition of several basic SnapPoints that can be interpolated in between according to the hand scale
 CSnapPointsCollectionA collection of SnapPoints Data, to be used to store the information of a Snappable so it survives Play-Mode Edit-Mode cycles
 NSnapSurfaces
 NEditor
 CBoxEditor
 CCylinderEditor
 CSphereEditor
 CBoxSurfaceData
 CBoxSurfaceThis SnapSurface defines a Rectangle around which the grip point is valid. Since the grip point might be offset from the fingers, a valid range for each opposite side of the rectangle can be set so the grabbing fingers are constrained to the object bounds
 CCylinderSurfaceData
 CCylinderSurfaceThis type of surface defines a cylinder in which the grip pose is valid around an object. An angle can be used to constrain the cylinder and not use a full circle. The radious is automatically specified as the distance from the axis of the cylinder to the original grip position
 CSnapSurfaceDataA serializable data-only version of the Surface data so it can be storef if it was generated during Play-Mode
 CSnapSurfaceEspecifies a surface around a Snappable in which a hand can snap to. SnapSurfaces are an optional property of SnapPoints and they actually define all the valid points for the Grip of the hand to snap to the object with the same HandPose
 CSphereSurfaceData
 CSphereSurfaceEspecifies an entire sphere around an object in which the grip point is valid
 NTrackingData
 CBasicTrackingCleaner
 CExtrapolationTrackingCleaner
 CSkeletonDataDecorator
 CSkeletonDataProviderAbstract class to translate the hand-tracking data from specific systems to the one used by the HandPosing system. Implement this class for example to translate the hand-tracking data from Oculus or HTC Vive to a common one. One script is needed per hand
 CAnchorsUpdateNotifierUtility to manually trigger the update of the hand puppet system. Since the puppet must run after the hands have been moved natively, implement this to enforce the order
 CBoneMapStores the translation between hand tracked data and the represented bone
 CHandMapA special mapping for the base of the hand, indicating the position and rotation difference between the hand-tracking system and its controller representation
 CBoneCollectionA collection of bone maps to transform between hand-tracking data and their representation. Implements ISerializationCallbackReceiver to be able to store data as a Dictionary that survives serialization callbacks
 CBonePoseData indicating the rotation of a bone from a hand
 CHandPoseData for the pose of a hand in space
 CHandPuppetThis class controls the representation of a hand (typically a skin-mesh renderer) by moving its position/rotation and the rotations of the bones that compose it
 CScoredHandPoseA merge between a HandPose and the score indicating how good it is for snapping an object
 CInspectorButtonAttribute