API reference
API reference
Select your platform
No SDKs available
No versions available

OVRUnityHumanoidSkeletonRetargeter Class

Extends OVRSkeleton
A class responsible for retargeting from OVRSkeleton body tracking bones to a third party humanoid skeleton.
Unlike OVRCustomSkeleton, the skeleton retargeted to does not need to use bones that match body tracking names, or have a hierarchy that matches what body tracking expects. Instead, you can use this class to apply body tracking to characters that have been imported as Unity Humanoids.
The retargeter is split into several parts, each with its own responsibility.
The main portion is responsible for computing the offsets between the source (body tracking) and target (Humanoid) skeletons, which will be used animate the target based on the source's movements.
Another portion, known as OVRSkeletonMetadata, is responsible for meta data applicable for retargeting, such as bone-to-bone pairs in body tracking and Humanoid skeletons. These bone-to-bone pairs are used to align the Humanoid (target) skeleton to the body tracking (source) skeleton, so that a Humanoid can be driven by body tracking movements.
There is also OVRHumanBodyBonesMappings, which contains maps useful for retargeting, such as maps between body tracking and humanoid bones for upper body and full body tracking.

Constructors

OVRUnityHumanoidSkeletonRetargeter ()
Default constructor for the retargeter class that initializes the instance's skeleton type to match half body tracking.
Signature
OVRUnityHumanoidSkeletonRetargeter()

Protected Fields

_adjustments : JointAdjustment[]
Signature
JointAdjustment [] _adjustments
_bodySectionsToAlign : OVRHumanBodyBonesMappings.BodySection[]
Signature
OVRHumanBodyBonesMappings.BodySection [] _bodySectionsToAlign
_bodySectionToPosition : OVRHumanBodyBonesMappings.BodySection[]
Signature
OVRHumanBodyBonesMappings.BodySection [] _bodySectionToPosition
_fullBodySectionsToAlign : OVRHumanBodyBonesMappings.BodySection[]
Signature
OVRHumanBodyBonesMappings.BodySection [] _fullBodySectionsToAlign
_fullBodySectionToPosition : OVRHumanBodyBonesMappings.BodySection[]
Signature
OVRHumanBodyBonesMappings.BodySection [] _fullBodySectionToPosition
_updateType : UpdateType
Controls if we run retargeting from FixedUpdate, Update, or both, and is based on the enum OVRUnityHumanoidSkeletonRetargeter.UpdateType.
Signature
UpdateType _updateType

Protected Properties

Adjustments : JointAdjustment[]
[Get]
Signature
JointAdjustment [] Adjustments
AnimatorTargetSkeleton : Animator
[Get]
Signature
Animator AnimatorTargetSkeleton
BodySectionsToAlign : OVRHumanBodyBonesMappings.BodySection[]
[Get]
Signature
OVRHumanBodyBonesMappings.BodySection [] BodySectionsToAlign
BodySectionToPosition : OVRHumanBodyBonesMappings.BodySection[]
[Get]
Signature
OVRHumanBodyBonesMappings.BodySection [] BodySectionToPosition
CustomBoneIdToHumanBodyBone : Dictionary< BoneId, HumanBodyBones >
[Get]
Signature
Dictionary<BoneId, HumanBodyBones> CustomBoneIdToHumanBodyBone
FullBodySectionsToAlign : OVRHumanBodyBonesMappings.BodySection[]
[Get]
Signature
OVRHumanBodyBonesMappings.BodySection [] FullBodySectionsToAlign
FullBodySectionToPosition : OVRHumanBodyBonesMappings.BodySection[]
[Get]
Signature
OVRHumanBodyBonesMappings.BodySection [] FullBodySectionToPosition
SourceSkeletonData : OVRSkeletonMetadata
[Get]
Signature
OVRSkeletonMetadata SourceSkeletonData
SourceSkeletonTPoseData : OVRSkeletonMetadata
[Get]
Signature
OVRSkeletonMetadata SourceSkeletonTPoseData
TargetSkeletonData : OVRSkeletonMetadata
[Get]
Signature
OVRSkeletonMetadata TargetSkeletonData
TargetTPoseRotations : Dictionary< HumanBodyBones, Quaternion >
[Get]
Signature
Dictionary<HumanBodyBones, Quaternion> TargetTPoseRotations

Properties

BodyBoneMappingsInterface : OVRHumanBodyBonesMappingsInterface
[Get][Set]
This returns body bone mappings, based on OVRHumanBodyBonesMappingsInterface.
Use this field in case the default mappings fall short and you wish to override them with a custom one that works with a specific characters.
Signature
OVRHumanBodyBonesMappingsInterface BodyBoneMappingsInterface

Protected Methods

ComputeOffsetsUsingSkeletonComponent ()
Compute skeletal offsets using the current input skeletal data and the target skeletal data.
Signature
void ComputeOffsetsUsingSkeletonComponent()
Returns
void
FindAdjustment ( boneId )
Signature
JointAdjustment FindAdjustment(HumanBodyBones boneId)
Parameters
boneId: HumanBodyBones
Returns
JointAdjustment
OffsetComputationNeededThisFrame ()
Indicates if skeletal offsets will be computed during this frame.
This usually happens if there is a change in the input skeletal data, a change in the target skeletal scale, et cetera.
Signature
bool OffsetComputationNeededThisFrame()
Returns
bool  True if computation is required; false if not.
OnValidate ()
Signature
virtual void OnValidate()
Returns
void
RecomputeSkeletalOffsetsIfNecessary ()
Signature
void RecomputeSkeletalOffsetsIfNecessary()
Returns
void
ShouldRunUpdateThisFrame ()
Signature
bool ShouldRunUpdateThisFrame()
Returns
bool
Start ()
Start this instance.
Initialize data structures related to the body tracking's skeleton.
Signature
override void Start()
Returns
override void
Update ()
Signature
override void Update()
Returns
override void

Protected Static Methods

IsBodySectionInArray ( bodySectionToCheck , sectionArrayToCheck )
Signature
static bool IsBodySectionInArray(OVRHumanBodyBonesMappings.BodySection bodySectionToCheck, OVRHumanBodyBonesMappings.BodySection[] sectionArrayToCheck)
Parameters
bodySectionToCheck: OVRHumanBodyBonesMappings.BodySection
sectionArrayToCheck: OVRHumanBodyBonesMappings.BodySection[]
Returns
bool

Inner Classes

JointAdjustment Class

Allows you to tweak joint movements after the OVRUnityHumanoidSkeletonRetargeter has retargeted to a character.
If the retargeted result is unsatisfactory, you can use this field to affect the final output.

Fields

BoneIdOverrideValue : OVRHumanBodyBonesMappings.BodyTrackingBoneId
Allows mapping this human body bone to a (half body) OVRSkeleton bone different from the standard value.
An OVRHumanBodyBonesMappings.BodyTrackingBoneId.NoOverride value indicates to not override the default mapping; OVRHumanBodyBonesMappings.BodyTrackingBoneId.Remove means to exclude the bone from retargeting. This cannot be changed at runtime.
Signature
OVRHumanBodyBonesMappings.BodyTrackingBoneId BoneIdOverrideValue
DisablePositionTransform : bool
Use this to disable positional retargeting on the target joint, so that the target's position values are not affected by body tracking.
Signature
bool DisablePositionTransform
DisableRotationTransform : bool
Use this to disable rotational retargeting on the target joint, so that the target's rotation values are not affected by body tracking.
Signature
bool DisableRotationTransform
FullBodyBoneIdOverrideValue : OVRHumanBodyBonesMappings.FullBodyTrackingBoneId
Allows mapping this human body bone to a (full body) OVRSkeleton bone different from the standard value.
An OVRHumanBodyBonesMappings.FullBodyTrackingBoneId.NoOverride value indicates to not override the default mapping; OVRHumanBodyBonesMappings.FullBodyTrackingBoneId.Remove means to exclude the bone from retargeting. This cannot be changed at runtime.
Signature
OVRHumanBodyBonesMappings.FullBodyTrackingBoneId FullBodyBoneIdOverrideValue
Joint : HumanBodyBones
Maps to the Unity Humanoid joint that can be adjusted using position or rotation-based tweaks.
Signature
HumanBodyBones Joint
PositionChange : Vector3
The position change to apply to the joint, post-retargeting, in world-space.
Defaults to the zero vector.
Signature
Vector3 PositionChange
RotationChange : Quaternion
The rotation change to apply to the joint, post-retargeting, in world-space.
Defaults to the Quaternion identity. NOTE: This is deprecated, please use .
Signature
Quaternion RotationChange
RotationTweaks : Quaternion[]
Allows accumulating a series of rotations to be applied to a joint, post-retargeting.
These values are accumulated and stored in JointAdjustment.PrecomputedRotationTweaks.
Signature
Quaternion [] RotationTweaks

Properties

PrecomputedRotationTweaks : Quaternion
[Get]
Precomputed accumulated rotations, derived from JointAdjustment.RotationTweaks.
Signature
Quaternion PrecomputedRotationTweaks

Methods

PrecomputeRotationTweaks ()
Precompute rotation tweaks by accumulating them and storing them into JointAdjustment.PrecomputedRotationTweaks.
Using the precomputed value is faster at runtime than accumulating the quaternions during each frame.
Signature
void PrecomputeRotationTweaks()
Returns
void

OVRHumanBodyBonesMappings Class

Implements the OVRHumanBodyBonesMappingsInterface interface, and contains mappings that are relevant to retargeting by classes such as OVRUnityHumanoidSkeletonRetargeter.
This includes associations between HumanBodyBones and BoneId, HumanBodyBones and BodySection. There are also mappings between a body tracking or humanoid bone and joint pairs used for retargeting.
This is a default implementation, which means that if you have a custom character is not compatible then you will need to implement OVRHumanBodyBonesMappings separately.

Static Fields

BoneIdToHumanBodyBone : readonly Dictionary< OVRSkeleton.BoneId, HumanBodyBones >
Maps upper body body tracking bones with HumanBodyBones bones.
Use this field to retarget from a body tracking to its humanoid equivalent.
Signature
readonly Dictionary<OVRSkeleton.BoneId, HumanBodyBones> BoneIdToHumanBodyBone
BoneIdToJointPair : readonly Dictionary< OVRSkeleton.BoneId, Tuple< OVRSkeleton.BoneId, OVRSkeleton.BoneId > >
The map associates a pair of bones for each OVRSkeleton.BoneId.
Retargeters such as OVRUnityHumanoidSkeletonRetargeter and OVRSkeletonMetadata use these pairs to creates axes for the purposes of retargeting. Intended for half body tracking.
Signature
readonly Dictionary<OVRSkeleton.BoneId, Tuple<OVRSkeleton.BoneId, OVRSkeleton.BoneId> > BoneIdToJointPair
BoneToBodySection : readonly Dictionary< HumanBodyBones, BodySection >
Maps HumanBodyBones to BodySection.
Use this to determine which part of the body (i.e. back) corresponds with a humanoid bone.
Signature
readonly Dictionary<HumanBodyBones, BodySection> BoneToBodySection
BoneToJointPair : readonly Dictionary< HumanBodyBones, Tuple< HumanBodyBones, HumanBodyBones > >
The map associates a pair of bones for each HumanBodyBones.
Retargeters such as OVRUnityHumanoidSkeletonRetargeter and OVRSkeletonMetadata use these pairs to creates axes for the purposes of retargeting.
Signature
readonly Dictionary<HumanBodyBones, Tuple<HumanBodyBones, HumanBodyBones> > BoneToJointPair
FullBodyBoneIdToHumanBodyBone : readonly Dictionary< OVRSkeleton.BoneId, HumanBodyBones >
Maps full body body tracking bones with HumanBodyBones bones.
Use this field to retarget from a body tracking to its humanoid equivalent.
Signature
readonly Dictionary<OVRSkeleton.BoneId, HumanBodyBones> FullBodyBoneIdToHumanBodyBone
FullBoneIdToJointPair : readonly Dictionary< OVRSkeleton.BoneId, Tuple< OVRSkeleton.BoneId, OVRSkeleton.BoneId > >
The map associates a pair of bones for each OVRSkeleton.BoneId.
Retargeters such as OVRUnityHumanoidSkeletonRetargeter and OVRSkeletonMetadata use these pairs to creates axes for the purposes of retargeting. Intended for full body tracking.
Signature
readonly Dictionary<OVRSkeleton.BoneId, Tuple<OVRSkeleton.BoneId, OVRSkeleton.BoneId> > FullBoneIdToJointPair

Properties

GetBoneIdToHumanBodyBone : Dictionary< OVRSkeleton.BoneId, HumanBodyBones >
[Get]
Returns to mapping for upper body characters.
Since retargeting retargets to humanoid characters, it uses this field to map body tracking bones to humanoid bones.
Signature
Dictionary<OVRSkeleton.BoneId, HumanBodyBones> GetBoneIdToHumanBodyBone
GetBoneIdToJointPair : Dictionary< OVRSkeleton.BoneId, Tuple< OVRSkeleton.BoneId, OVRSkeleton.BoneId > >
[Get]
The mapping between BoneId a tuple of BoneId.
Retargeting uses this tuple or joint pair to create a BoneId's orientation during retargeting. Define this field so that you can influence what kind of tuple is used during retargeting. Intended for the retargeting source (i.e. body tracking) assuming upper body tracking is used.
Signature
Dictionary<OVRSkeleton.BoneId, Tuple<OVRSkeleton.BoneId, OVRSkeleton.BoneId> > GetBoneIdToJointPair
GetBoneToBodySection : Dictionary< HumanBodyBones, BodySection >
[Get]
The mapping between HumanBodyBones and BodySection.
Define this mapping to associate a body with parts of the body, such as the back, left arm, right leg, and so on.
Signature
Dictionary<HumanBodyBones, BodySection> GetBoneToBodySection
GetBoneToJointPair : Dictionary< HumanBodyBones, Tuple< HumanBodyBones, HumanBodyBones > >
[Get]
The mapping between HumanBodyBones a tuple of HumanBodyBones.
The tuple is a joint pair that retargeting uses to create a HumanBodyBones's orientation during runtime. Define this field so that you can influence what kind of tuple is used during retargeting.
Signature
Dictionary<HumanBodyBones, Tuple<HumanBodyBones, HumanBodyBones> > GetBoneToJointPair
GetFullBodyBoneIdToHumanBodyBone : Dictionary< OVRSkeleton.BoneId, HumanBodyBones >
[Get]
Returns to mapping for full body characters.
Since retargeting retargets to humanoid characters, it uses this field to map body tracking bones to humanoid bones.
Signature
Dictionary<OVRSkeleton.BoneId, HumanBodyBones> GetFullBodyBoneIdToHumanBodyBone
GetFullBodyBoneIdToJointPair : Dictionary< OVRSkeleton.BoneId, Tuple< OVRSkeleton.BoneId, OVRSkeleton.BoneId > >
[Get]
The mapping between BoneId a tuple of BoneId.
Retargeting uses this tuple or joint pair to create a BoneId's orientation during retargeting. Define this field so that you can influence what kind of tuple is used during retargeting. Intended for the retargeting source (i.e. body tracking) assuming full body tracking is used.
Signature
Dictionary<OVRSkeleton.BoneId, Tuple<OVRSkeleton.BoneId, OVRSkeleton.BoneId> > GetFullBodyBoneIdToJointPair

Inner Enums

BodySection Enum
Since humanoid characters can possibly be described as large sections, such the back, left leg, right arm, and so on, BodySection is defined to define those sections.
Use this enum to associate a body section with a character's bone.
Enumeration Constants
Member
LeftLeg
LeftFoot
RightLeg
RightFoot
LeftArm
LeftHand
RightArm
RightHand
Hips
Back
Neck
Head
FullBodyTrackingBoneId Enum
Body tracking bone IDs that should be exposed through the inspector.
has enum values that map to the same integers, which would not work with a serialized field that expects unique integers. is an enum that restricts BoneId to the values that are relevant for full body characters and avoids redundant values.
Enumeration Constants
MemberValue
FullBody_Start
OVRPlugin.BoneId.FullBody_Start
FullBody_Root
OVRPlugin.BoneId.FullBody_Root
FullBody_Hips
OVRPlugin.BoneId.FullBody_Hips
FullBody_SpineLower
OVRPlugin.BoneId.FullBody_SpineLower
FullBody_SpineMiddle
OVRPlugin.BoneId.FullBody_SpineMiddle
FullBody_SpineUpper
OVRPlugin.BoneId.FullBody_SpineUpper
FullBody_Chest
OVRPlugin.BoneId.FullBody_Chest
FullBody_Neck
OVRPlugin.BoneId.FullBody_Neck
FullBody_Head
OVRPlugin.BoneId.FullBody_Head
FullBody_LeftShoulder
OVRPlugin.BoneId.FullBody_LeftShoulder
FullBody_LeftScapula
OVRPlugin.BoneId.FullBody_LeftScapula
FullBody_LeftArmUpper
OVRPlugin.BoneId.FullBody_LeftArmUpper
FullBody_LeftArmLower
OVRPlugin.BoneId.FullBody_LeftArmLower
FullBody_LeftHandWristTwist
OVRPlugin.BoneId.FullBody_LeftHandWristTwist
FullBody_RightShoulder
OVRPlugin.BoneId.FullBody_RightShoulder
FullBody_RightScapula
OVRPlugin.BoneId.FullBody_RightScapula
FullBody_RightArmUpper
OVRPlugin.BoneId.FullBody_RightArmUpper
FullBody_RightArmLower
OVRPlugin.BoneId.FullBody_RightArmLower
FullBody_RightHandWristTwist
OVRPlugin.BoneId.FullBody_RightHandWristTwist
FullBody_LeftHandPalm
OVRPlugin.BoneId.FullBody_LeftHandPalm
FullBody_LeftHandWrist
OVRPlugin.BoneId.FullBody_LeftHandWrist
FullBody_LeftHandThumbMetacarpal
OVRPlugin.BoneId.FullBody_LeftHandThumbMetacarpal
FullBody_LeftHandThumbProximal
OVRPlugin.BoneId.FullBody_LeftHandThumbProximal
FullBody_LeftHandThumbDistal
OVRPlugin.BoneId.FullBody_LeftHandThumbDistal
FullBody_LeftHandThumbTip
OVRPlugin.BoneId.FullBody_LeftHandThumbTip
FullBody_LeftHandIndexMetacarpal
OVRPlugin.BoneId.FullBody_LeftHandIndexMetacarpal
FullBody_LeftHandIndexProximal
OVRPlugin.BoneId.FullBody_LeftHandIndexProximal
FullBody_LeftHandIndexIntermediate
OVRPlugin.BoneId.FullBody_LeftHandIndexIntermediate
FullBody_LeftHandIndexDistal
OVRPlugin.BoneId.FullBody_LeftHandIndexDistal
FullBody_LeftHandIndexTip
OVRPlugin.BoneId.FullBody_LeftHandIndexTip
FullBody_LeftHandMiddleMetacarpal
OVRPlugin.BoneId.FullBody_LeftHandMiddleMetacarpal
FullBody_LeftHandMiddleProximal
OVRPlugin.BoneId.FullBody_LeftHandMiddleProximal
FullBody_LeftHandMiddleIntermediate
OVRPlugin.BoneId.FullBody_LeftHandMiddleIntermediate
FullBody_LeftHandMiddleDistal
OVRPlugin.BoneId.FullBody_LeftHandMiddleDistal
FullBody_LeftHandMiddleTip
OVRPlugin.BoneId.FullBody_LeftHandMiddleTip
FullBody_LeftHandRingMetacarpal
OVRPlugin.BoneId.FullBody_LeftHandRingMetacarpal
FullBody_LeftHandRingProximal
OVRPlugin.BoneId.FullBody_LeftHandRingProximal
FullBody_LeftHandRingIntermediate
OVRPlugin.BoneId.FullBody_LeftHandRingIntermediate
FullBody_LeftHandRingDistal
OVRPlugin.BoneId.FullBody_LeftHandRingDistal
FullBody_LeftHandRingTip
OVRPlugin.BoneId.FullBody_LeftHandRingTip
FullBody_LeftHandLittleMetacarpal
OVRPlugin.BoneId.FullBody_LeftHandLittleMetacarpal
FullBody_LeftHandLittleProximal
OVRPlugin.BoneId.FullBody_LeftHandLittleProximal
FullBody_LeftHandLittleIntermediate
OVRPlugin.BoneId.FullBody_LeftHandLittleIntermediate
FullBody_LeftHandLittleDistal
OVRPlugin.BoneId.FullBody_LeftHandLittleDistal
FullBody_LeftHandLittleTip
OVRPlugin.BoneId.FullBody_LeftHandLittleTip
FullBody_RightHandPalm
OVRPlugin.BoneId.FullBody_RightHandPalm
FullBody_RightHandWrist
OVRPlugin.BoneId.FullBody_RightHandWrist
FullBody_RightHandThumbMetacarpal
OVRPlugin.BoneId.FullBody_RightHandThumbMetacarpal
FullBody_RightHandThumbProximal
OVRPlugin.BoneId.FullBody_RightHandThumbProximal
FullBody_RightHandThumbDistal
OVRPlugin.BoneId.FullBody_RightHandThumbDistal
FullBody_RightHandThumbTip
OVRPlugin.BoneId.FullBody_RightHandThumbTip
FullBody_RightHandIndexMetacarpal
OVRPlugin.BoneId.FullBody_RightHandIndexMetacarpal
FullBody_RightHandIndexProximal
OVRPlugin.BoneId.FullBody_RightHandIndexProximal
FullBody_RightHandIndexIntermediate
OVRPlugin.BoneId.FullBody_RightHandIndexIntermediate
FullBody_RightHandIndexDistal
OVRPlugin.BoneId.FullBody_RightHandIndexDistal
FullBody_RightHandIndexTip
OVRPlugin.BoneId.FullBody_RightHandIndexTip
FullBody_RightHandMiddleMetacarpal
OVRPlugin.BoneId.FullBody_RightHandMiddleMetacarpal
FullBody_RightHandMiddleProximal
OVRPlugin.BoneId.FullBody_RightHandMiddleProximal
FullBody_RightHandMiddleIntermediate
OVRPlugin.BoneId.FullBody_RightHandMiddleIntermediate
FullBody_RightHandMiddleDistal
OVRPlugin.BoneId.FullBody_RightHandMiddleDistal
FullBody_RightHandMiddleTip
OVRPlugin.BoneId.FullBody_RightHandMiddleTip
FullBody_RightHandRingMetacarpal
OVRPlugin.BoneId.FullBody_RightHandRingMetacarpal
FullBody_RightHandRingProximal
OVRPlugin.BoneId.FullBody_RightHandRingProximal
FullBody_RightHandRingIntermediate
OVRPlugin.BoneId.FullBody_RightHandRingIntermediate
FullBody_RightHandRingDistal
OVRPlugin.BoneId.FullBody_RightHandRingDistal
FullBody_RightHandRingTip
OVRPlugin.BoneId.FullBody_RightHandRingTip
FullBody_RightHandLittleMetacarpal
OVRPlugin.BoneId.FullBody_RightHandLittleMetacarpal
FullBody_RightHandLittleProximal
OVRPlugin.BoneId.FullBody_RightHandLittleProximal
FullBody_RightHandLittleIntermediate
OVRPlugin.BoneId.FullBody_RightHandLittleIntermediate
FullBody_RightHandLittleDistal
OVRPlugin.BoneId.FullBody_RightHandLittleDistal
FullBody_RightHandLittleTip
OVRPlugin.BoneId.FullBody_RightHandLittleTip
FullBody_LeftUpperLeg
OVRPlugin.BoneId.FullBody_LeftUpperLeg
FullBody_LeftLowerLeg
OVRPlugin.BoneId.FullBody_LeftLowerLeg
FullBody_LeftFootAnkleTwist
OVRPlugin.BoneId.FullBody_LeftFootAnkleTwist
FullBody_LeftFootAnkle
OVRPlugin.BoneId.FullBody_LeftFootAnkle
FullBody_LeftFootSubtalar
OVRPlugin.BoneId.FullBody_LeftFootSubtalar
FullBody_LeftFootTransverse
OVRPlugin.BoneId.FullBody_LeftFootTransverse
FullBody_LeftFootBall
OVRPlugin.BoneId.FullBody_LeftFootBall
FullBody_RightUpperLeg
OVRPlugin.BoneId.FullBody_RightUpperLeg
FullBody_RightLowerLeg
OVRPlugin.BoneId.FullBody_RightLowerLeg
FullBody_RightFootAnkleTwist
OVRPlugin.BoneId.FullBody_RightFootAnkleTwist
FullBody_RightFootAnkle
OVRPlugin.BoneId.FullBody_RightFootAnkle
FullBody_RightFootSubtalar
OVRPlugin.BoneId.FullBody_RightFootSubtalar
FullBody_RightFootTransverse
OVRPlugin.BoneId.FullBody_RightFootTransverse
FullBody_RightFootBall
OVRPlugin.BoneId.FullBody_RightFootBall
FullBody_End
OVRPlugin.BoneId.FullBody_End
NoOverride
OVRPlugin.BoneId.FullBody_End + 1
Remove
OVRPlugin.BoneId.FullBody_End + 2
BodyTrackingBoneId Enum
Body tracking bone IDs that should be exposed through the inspector.
has enum values that map to the same integers, which would not work with a serialized field that expects unique integers. is an enum that restricts BoneId to the values that are relevant for full body characters and avoids redundant values.
Enumeration Constants
MemberValue
Body_Start
OVRPlugin.BoneId.Body_Start
Body_Root
OVRPlugin.BoneId.Body_Root
Body_Hips
OVRPlugin.BoneId.Body_Hips
Body_SpineLower
OVRPlugin.BoneId.Body_SpineLower
Body_SpineMiddle
OVRPlugin.BoneId.Body_SpineMiddle
Body_SpineUpper
OVRPlugin.BoneId.Body_SpineUpper
Body_Chest
OVRPlugin.BoneId.Body_Chest
Body_Neck
OVRPlugin.BoneId.Body_Neck
Body_Head
OVRPlugin.BoneId.Body_Head
Body_LeftShoulder
OVRPlugin.BoneId.Body_LeftShoulder
Body_LeftScapula
OVRPlugin.BoneId.Body_LeftScapula
Body_LeftArmUpper
OVRPlugin.BoneId.Body_LeftArmUpper
Body_LeftArmLower
OVRPlugin.BoneId.Body_LeftArmLower
Body_LeftHandWristTwist
OVRPlugin.BoneId.Body_LeftHandWristTwist
Body_RightShoulder
OVRPlugin.BoneId.Body_RightShoulder
Body_RightScapula
OVRPlugin.BoneId.Body_RightScapula
Body_RightArmUpper
OVRPlugin.BoneId.Body_RightArmUpper
Body_RightArmLower
OVRPlugin.BoneId.Body_RightArmLower
Body_RightHandWristTwist
OVRPlugin.BoneId.Body_RightHandWristTwist
Body_LeftHandPalm
OVRPlugin.BoneId.Body_LeftHandPalm
Body_LeftHandWrist
OVRPlugin.BoneId.Body_LeftHandWrist
Body_LeftHandThumbMetacarpal
OVRPlugin.BoneId.Body_LeftHandThumbMetacarpal
Body_LeftHandThumbProximal
OVRPlugin.BoneId.Body_LeftHandThumbProximal
Body_LeftHandThumbDistal
OVRPlugin.BoneId.Body_LeftHandThumbDistal
Body_LeftHandThumbTip
OVRPlugin.BoneId.Body_LeftHandThumbTip
Body_LeftHandIndexMetacarpal
OVRPlugin.BoneId.Body_LeftHandIndexMetacarpal
Body_LeftHandIndexProximal
OVRPlugin.BoneId.Body_LeftHandIndexProximal
Body_LeftHandIndexIntermediate
OVRPlugin.BoneId.Body_LeftHandIndexIntermediate
Body_LeftHandIndexDistal
OVRPlugin.BoneId.Body_LeftHandIndexDistal
Body_LeftHandIndexTip
OVRPlugin.BoneId.Body_LeftHandIndexTip
Body_LeftHandMiddleMetacarpal
OVRPlugin.BoneId.Body_LeftHandMiddleMetacarpal
Body_LeftHandMiddleProximal
OVRPlugin.BoneId.Body_LeftHandMiddleProximal
Body_LeftHandMiddleIntermediate
OVRPlugin.BoneId.Body_LeftHandMiddleIntermediate
Body_LeftHandMiddleDistal
OVRPlugin.BoneId.Body_LeftHandMiddleDistal
Body_LeftHandMiddleTip
OVRPlugin.BoneId.Body_LeftHandMiddleTip
Body_LeftHandRingMetacarpal
OVRPlugin.BoneId.Body_LeftHandRingMetacarpal
Body_LeftHandRingProximal
OVRPlugin.BoneId.Body_LeftHandRingProximal
Body_LeftHandRingIntermediate
OVRPlugin.BoneId.Body_LeftHandRingIntermediate
Body_LeftHandRingDistal
OVRPlugin.BoneId.Body_LeftHandRingDistal
Body_LeftHandRingTip
OVRPlugin.BoneId.Body_LeftHandRingTip
Body_LeftHandLittleMetacarpal
OVRPlugin.BoneId.Body_LeftHandLittleMetacarpal
Body_LeftHandLittleProximal
OVRPlugin.BoneId.Body_LeftHandLittleProximal
Body_LeftHandLittleIntermediate
OVRPlugin.BoneId.Body_LeftHandLittleIntermediate
Body_LeftHandLittleDistal
OVRPlugin.BoneId.Body_LeftHandLittleDistal
Body_LeftHandLittleTip
OVRPlugin.BoneId.Body_LeftHandLittleTip
Body_RightHandPalm
OVRPlugin.BoneId.Body_RightHandPalm
Body_RightHandWrist
OVRPlugin.BoneId.Body_RightHandWrist
Body_RightHandThumbMetacarpal
OVRPlugin.BoneId.Body_RightHandThumbMetacarpal
Body_RightHandThumbProximal
OVRPlugin.BoneId.Body_RightHandThumbProximal
Body_RightHandThumbDistal
OVRPlugin.BoneId.Body_RightHandThumbDistal
Body_RightHandThumbTip
OVRPlugin.BoneId.Body_RightHandThumbTip
Body_RightHandIndexMetacarpal
OVRPlugin.BoneId.Body_RightHandIndexMetacarpal
Body_RightHandIndexProximal
OVRPlugin.BoneId.Body_RightHandIndexProximal
Body_RightHandIndexIntermediate
OVRPlugin.BoneId.Body_RightHandIndexIntermediate
Body_RightHandIndexDistal
OVRPlugin.BoneId.Body_RightHandIndexDistal
Body_RightHandIndexTip
OVRPlugin.BoneId.Body_RightHandIndexTip
Body_RightHandMiddleMetacarpal
OVRPlugin.BoneId.Body_RightHandMiddleMetacarpal
Body_RightHandMiddleProximal
OVRPlugin.BoneId.Body_RightHandMiddleProximal
Body_RightHandMiddleIntermediate
OVRPlugin.BoneId.Body_RightHandMiddleIntermediate
Body_RightHandMiddleDistal
OVRPlugin.BoneId.Body_RightHandMiddleDistal
Body_RightHandMiddleTip
OVRPlugin.BoneId.Body_RightHandMiddleTip
Body_RightHandRingMetacarpal
OVRPlugin.BoneId.Body_RightHandRingMetacarpal
Body_RightHandRingProximal
OVRPlugin.BoneId.Body_RightHandRingProximal
Body_RightHandRingIntermediate
OVRPlugin.BoneId.Body_RightHandRingIntermediate
Body_RightHandRingDistal
OVRPlugin.BoneId.Body_RightHandRingDistal
Body_RightHandRingTip
OVRPlugin.BoneId.Body_RightHandRingTip
Body_RightHandLittleMetacarpal
OVRPlugin.BoneId.Body_RightHandLittleMetacarpal
Body_RightHandLittleProximal
OVRPlugin.BoneId.Body_RightHandLittleProximal
Body_RightHandLittleIntermediate
OVRPlugin.BoneId.Body_RightHandLittleIntermediate
Body_RightHandLittleDistal
OVRPlugin.BoneId.Body_RightHandLittleDistal
Body_RightHandLittleTip
OVRPlugin.BoneId.Body_RightHandLittleTip
Body_End
OVRPlugin.BoneId.Body_End
NoOverride
OVRPlugin.BoneId.Body_End + 1
Remove
OVRPlugin.BoneId.Body_End + 2

OVRSkeletonMetadata Class

A class for handling Skeleton metadata.
It generates and stores information about the source and target skeletons, such as joint pairs that are used during retargeting.
At runtime, the humanoid retargeter class uses these joint pair directions to orient target skeletons to match the source body tracking skeleton.

Constructors

OVRSkeletonMetadata ( otherSkeletonMetaData )
Copy constructor that copies from another instance of OVRSkeletonMetadata to this instance.
Since each instance tracks data per HumanBodyBones and possibly modifies, that should be copied from the other OVRSkeletonMetadata instance.
Signature
OVRSkeletonMetadata(OVRSkeletonMetadata otherSkeletonMetaData)
Parameters
otherSkeletonMetaData: OVRSkeletonMetadata  Other meta data to copy from.
OVRSkeletonMetadata ( animator , bodyBonesMappingInterface )
Constructor that builds an instance from an Animator reference, along with an optional OVRHumanBodyBonesMappingsInterface argument.
Use this constructor for third-party characters imported as a Humanoid. remarks> Provide the OVRHumanBodyBonesMappingsInterface argument in order to influence the creation of each joint's bone pair.
Signature
OVRSkeletonMetadata(Animator animator, OVRHumanBodyBonesMappingsInterface bodyBonesMappingInterface=null)
Parameters
animator: Animator  Animator to build meta data from.
bodyBonesMappingInterface: OVRHumanBodyBonesMappingsInterface  Optional bone map interface.
OVRSkeletonMetadata ( skeleton , useBindPose , customBoneIdToHumanBodyBone , bodyBonesMappingInterface )
Constructor that builds an instance from a OVRSkeleton reference, intended for upper body characters.
Use the OVRHumanBodyBonesMappingsInterface reference in order to the influence hte creation each joint's bone pair.
Use the BoneId to HumanBodyBones mapping in order influence the mapping between the two, because the body tracking bones must be associated with Humanoid bones.
Signature
OVRSkeletonMetadata(OVRSkeleton skeleton, bool useBindPose, Dictionary< BoneId, HumanBodyBones > customBoneIdToHumanBodyBone, OVRHumanBodyBonesMappingsInterface bodyBonesMappingInterface)
Parameters
skeleton: OVRSkeleton  Skeleton to build meta data from.
useBindPose: bool  Whether to use bind pose (T-pose) or not.
customBoneIdToHumanBodyBone: Dictionary< BoneId, HumanBodyBones >  Custom bone ID to human body bone mapping.
bodyBonesMappingInterface: OVRHumanBodyBonesMappingsInterface  Body bones mapping interface.
OVRSkeletonMetadata ( skeleton , useBindPose , customBoneIdToHumanBodyBone , useFullBody , bodyBonesMappingInterface )
Constructor that builds an instance from a OVRSkeleton reference, intended for upper or full body characters.
Use the OVRHumanBodyBonesMappingsInterface reference in order to the influence hte creation each joint's bone pair.
Use the BoneId to HumanBodyBones mapping in order influence the mapping between the two, because the body tracking bones must be associated with Humanoid bones.
Signature
OVRSkeletonMetadata(OVRSkeleton skeleton, bool useBindPose, Dictionary< BoneId, HumanBodyBones > customBoneIdToHumanBodyBone, bool useFullBody, OVRHumanBodyBonesMappingsInterface bodyBonesMappingInterface)
Parameters
skeleton: OVRSkeleton  Skeleton to build meta data from.
useBindPose: bool  Whether to use bind pose (T-pose) or not.
customBoneIdToHumanBodyBone: Dictionary< BoneId, HumanBodyBones >  Custom bone ID to human body bone mapping.
useFullBody: bool  Whether to use full body or not.
bodyBonesMappingInterface: OVRHumanBodyBonesMappingsInterface  Body bones mapping interface.

Properties

BodyToBoneData : Dictionary< HumanBodyBones, BoneData >
[Get]
Maps from HumanBodyBones to associated BoneData.
Use this field to query the original transform, orientation, and correction (i.e. retargeting) quaternion associated with the HumanBodyBones.
Signature
Dictionary<HumanBodyBones, BoneData> BodyToBoneData

Methods

BuildBoneDataSkeleton ( skeleton , useBindPose , customBoneIdToHumanBodyBone , bodyBonesMappingInterface )
Builds the metadata necessary for retargeting to function properly.
While this function is called during the construction of the instance, it is necessary before the retargeter computes its offsets. Call this function during skeletal update events before computing retargeting offsets.
Intended for upper body characters, and used by OVRUnityHumanoidSkeletonRetargeter.
Signature
void BuildBoneDataSkeleton(OVRSkeleton skeleton, bool useBindPose, Dictionary< BoneId, HumanBodyBones > customBoneIdToHumanBodyBone, OVRHumanBodyBonesMappingsInterface bodyBonesMappingInterface)
Parameters
skeleton: OVRSkeleton  The OVRSkeleton.
useBindPose: bool  If true, use the bind pose.
customBoneIdToHumanBodyBone: Dictionary< BoneId, HumanBodyBones >  Custom bone ID to human body bone mapping.
bodyBonesMappingInterface: OVRHumanBodyBonesMappingsInterface  Body bones mapping interface.
Returns
void
BuildBoneDataSkeletonFullBody ( skeleton , useBindPose , customBoneIdToHumanBodyBone , bodyBonesMappingInterface )
Builds the metadata necessary for retargeting to function properly.
While this function is called during the construction of the instance, it is necessary before the retargeter computes its offsets. Call this function during skeletal update events before computing retargeting offsets.
Intended for full body characters, and used by OVRUnityHumanoidSkeletonRetargeter.
Signature
void BuildBoneDataSkeletonFullBody(OVRSkeleton skeleton, bool useBindPose, Dictionary< BoneId, HumanBodyBones > customBoneIdToHumanBodyBone, OVRHumanBodyBonesMappingsInterface bodyBonesMappingInterface)
Parameters
skeleton: OVRSkeleton  The OVRSkeleton.
useBindPose: bool  If true, use the bind pose.
customBoneIdToHumanBodyBone: Dictionary< BoneId, HumanBodyBones >  Custom bone ID to human body bone mapping.
bodyBonesMappingInterface: OVRHumanBodyBonesMappingsInterface  Body bones mapping interface.
Returns
void
BuildCoordinateAxesForAllBones ()
Builds an orientation per each bone of a character, using each joint's start and end transform.
It handles edge cases related to degenerate joints that may or may not exist, and also handles the character's palms differently relative to standard bones.
Signature
void BuildCoordinateAxesForAllBones()
Returns
void

Inner Class

BoneData Class
Data associated per bone.
This includes the original joint transform, as well as start and end transforms that are used to create a joint direction and orientation. The retargeting system uses the orientations to align the target to the source (body tracking) skeleton.
An example can be see in OVRUnityHumanoidSkeletonRetargeter, which retargets body tracking to Unity humanoids.
Constructors
BoneData ()
Default, no-argument constructor, that leaves fields such as the original joint, start transform, end transform, and orientation uninitialized.
Signature
BoneData()
BoneData ( otherBoneData )
Copy constructor that copies fields such as the original joint, start transform, end transform, orientation from another joint onto this one.
Signature
BoneData(BoneData otherBoneData)
Parameters
otherBoneData: BoneData  Other instance to copy from.
Fields
CorrectionQuaternion : Quaternion?
The offset quaternion necessary for retargeting by classes such as OVRUnityHumanoidSkeletonRetargeter.
Use this to affect a target character's joint rotation by the source's rotation during retargeting.
Signature
Quaternion? CorrectionQuaternion
DegenerateJoint : bool
Some joints made have bad orientations due to faulty joint pairs.
This can happen if the joint pair start end position have the same value.
Signature
bool DegenerateJoint
FromPosition : Vector3
From position for joint pair, created during data generation.
You may use this field for visual debugging.
Signature
Vector3 FromPosition
JointPairEnd : Transform
End of joint pair, which is usually the joint following the original one.
Together with JointPairStart, this is used to create the joint's orientation.
Signature
Transform JointPairEnd
JointPairOrientation : Quaternion
The orientation or rotation corresponding to joint pair.
Multiply this by the Vector3.forward vector to derive the forward direction.
Signature
Quaternion JointPairOrientation
JointPairStart : Transform
Start of joint pair, usually the original joint transform, used to create the joint orientation value.
The joint that follows this one is JointPairStart.
Signature
Transform JointPairStart
OriginalJoint : Transform
The original transform associated with joint data.
Use this to track the joint's movements.
Signature
Transform OriginalJoint
ParentTransform : Transform
Parent transform of joint.
Use this for edge cases where the original bone cannot have a joint pair created because it has no children, and its orientation cannot be derived. The parent transform is used to derive the orientation as a backup.
Signature
Transform ParentTransform
ToPosition : Vector3
To or end position for joint pair, created during data generation.
You may use this field for visual debugging.
Signature
Vector3 ToPosition

Inner Enum

UpdateType Enum

Since the retargeter's Update function is driven by OVRSkeleton's calls via FixedUpdate as well, the variable allows one to control how often updates occurs.
Use this field to allow updates during physics ticks, update ticks, or both.

Enumeration Constants

MemberValue
FixedUpdateOnly
0
UpdateOnly
FixedUpdateAndUpdate