This article or section is a Stub. You can help the Resonite Wiki by expanding it.

Introduction
Oof
— Epsilion
The VRIK component is used to configure Inverse Kinematics on an avatar, for posing joints based on the position of IK Targets such as a VR HMD, hand tracking, or Vive Trackers
This component is automatically configured when importing a mesh with a detectable humanoid rig, and generally should not be modified unless you know what you are doing.
Documentation on this component may take some time, as it is very complex, and not commonly used. The basis for this component seems to be the VRIK solver developed by Final IK.
Usage
All weight values are 1-0, excluding clamps which are inverted 0-1. You can overdrive some of them with interesting results.
Name | Type | Description |
---|---|---|
persistent
|
Bool | Determines whether or not this item will be saved to the server. |
UpdateOrder
|
Int | Controls the order in which this component is updated. |
Enabled
|
Bool | Controls whether or not this component is enabled. Some components stop their functionality when this field is disabled, but some don't. |
AutoUpdate
|
Bool | Whether to update the VRIK regardless of whether or not the sync delegates are called by a VRIK avatar or similar sources. this can break systems still using a VRIKAvatar but can fix ones with a lack of such component. |
FixTransformsEnabled
|
Bool | Clamps IK transforms to reasonable values and Resets IK every update. |
Solver
|
direct IKSolverVR | The actual solver that contains most of the fields of this component. |
componentInitiated
|
Bool | Marks this component as fully started and ready to solve IK transforms. |
_drives
|
list of VRIK.BoneDrive | A list of fields to drive with defaultLocalPositions and defaultLocalRotations plus transforms solved by the IK using defaultLocalPositions and defaultLocalRotations as a basis.
|
IKSolverVR
Most of the complexity in VRIK is actually stored in the IKSolverVR type. And even this is spread across multiple types.
Name | Type | Description |
---|---|---|
IKPosition
|
Float3 | Unused. |
IKPositionWeight
|
Float | Weight of the IK. Makes the bones go back to defaultLocalPositions and defaultLocalRotations as this goes to 0. Also known as default pose.
|
SimulationSpace
|
Slot | The top most hiearchy this solver should simulate in. When on an Avatar this is usually the user's slot when equipped and the avatar root when unequipped. |
OffsetSpace
|
Slot | Is used to determine if there is movement happening in user space. for example shuffling around in the player's physical room. This also tells the feet to try to find new footing, and to tell the feet the user is moving. |
_initiated
|
Bool | Whether or not this component is simulating and driving it's fields. |
OnPreInitiate
|
delegate of identity UpdateDelegate | Currently unused. Fires the SyncDelegate inside when this component is started initializing(usually during loading) |
OnPostInitiate
|
delegate of identity UpdateDelegate | Currently unused. Fires the SyncDelegate inside when this component is done initializing (usually during loading) |
OnPreUpdate
|
delegate of identity UpdateDelegate | Sync Delegate usually filled with calls to the VRIKAvatar component. |
OnPostUpdate
|
delegate of identity UpdateDelegate | Sync Delegate usually filled with calls to the VRIKAvatar component. |
root
|
Slot | The root of the solver simulation, on an avatar this will be the avatar root when equipped and nothing when dequipped. |
BoneReferences
|
direct References | The set of slots are what parts of the VRIK. |
defaultLocalPositions
|
array of Float3 | This is internal, and stores the positions the bones should go to as IKPositionWeight goes to 0. |
defaultLocalRotations
|
array of FloatQ | This is internal, and stores the rotations the bones should go to as IKPositionWeight goes to 0. |
DebugVisuals
|
Bool | Enables Debug visuals |
PlantFeet
|
Bool | When enabled, feet positions will be prioritized over anything else including HeadTarget. (Causes issues with walking) If true, will keep the toes planted even if the HeadTarget is out of reach, so this can cause the camera to exit the head if it is too high for the model to reach. |
spine
|
direct Spine | The spine section of the VRIK solver. |
leftArm
|
direct Arm | The left arm section of the VRIK solver. |
rightArm
|
direct Arm | The right arm section of the VRIK solver. |
leftLeg
|
direct Leg | The left leg section of the VRIK solver. |
rightLeg
|
direct Leg | The right leg section of the VRIK solver. |
locomotion
|
direct Locomotion | The locomotion section of the VRIK solver. |
ForwardFlipped
|
Bool | Swaps the feet and turns the whole IK around. |
ForceRootHeight
|
Nullable`1<Float> | Foot planting height override (Negative numbers cause issues with walking) |
LocomotionPositionOffset
|
Float3 | Handles how the IK should be offset when calculating locomotion. |
DefaultRootPosition
|
Float3 | The default position of the centered root. |
DefaultRootRotation
|
FloatQ | The default rotation of the centered root. |
References
Name | Type | Description |
---|---|---|
root
|
Slot | The root of the VRIK, usually avatar root. |
pelvis
|
Slot | Usually is set to the avatar's mapped Hips BodyNode.
|
spine
|
Slot | Usually is set to the avatar's mapped Spine BodyNode.
|
chest
|
Slot | Usually is set to the avatar's mapped Chest BodyNode.
|
neck
|
Slot | Usually is set to the avatar's mapped Neck BodyNode.
|
head
|
Slot | Usually is set to the avatar's mapped Head BodyNode.
|
leftShoulder
|
Slot | Usually is set to the avatar's mapped LeftShoulder BodyNode.
|
leftUpperArm
|
Slot | Usually is set to the avatar's mapped LeftUpperArm BodyNode.
|
leftForearm
|
Slot | Usually is set to the avatar's mapped LeftLowerArm BodyNode.
|
leftHand
|
Slot | Usually is set to the avatar's mapped LeftHand BodyNode.
|
rightShoulder
|
Slot | Usually is set to the avatar's mapped RightShoulder BodyNode.
|
rightUpperArm
|
Slot | Usually is set to the avatar's mapped RightUpperArm BodyNode.
|
rightForearm
|
Slot | Usually is set to the avatar's mapped RightLowerArm BodyNode.
|
rightHand
|
Slot | Usually is set to the avatar's mapped RightHand BodyNode.
|
leftThigh
|
Slot | Usually is set to the avatar's mapped LeftUpperLeg BodyNode.
|
leftCalf
|
Slot | Usually is set to the avatar's mapped LeftLowerLeg BodyNode.
|
leftFoot
|
Slot | Usually is set to the avatar's mapped LeftFoot BodyNode.
|
leftToes
|
Slot | Usually is set to the avatar's mapped LeftToes BodyNode.
|
rightThigh
|
Slot | Usually is set to the avatar's mapped RightUpperLeg BodyNode.
|
rightCalf
|
Slot | Usually is set to the avatar's mapped RightLowerLeg BodyNode.
|
rightFoot
|
Slot | Usually is set to the avatar's mapped RightFoot BodyNode.
|
rightToes
|
Slot | Usually is set to the avatar's mapped RightToes BodyNode.
|
Spine
Name | Type | Description |
---|---|---|
Initiated
|
Bool | Whether or not the spine section is initalized. |
HeadTarget
|
Slot | This slot is used to position the head when set. When unset the head position is determined by IKPositionHead and IKRotationHead .
|
PelvisTarget
|
Slot | This slot is used to position the pelvis when set. When unset the pelvis position is determined by IKPositionPelvis and IKRotationPelvis .
|
PositionWeight
|
Float | Positional weight of the HeadTarget. |
RotationWeight
|
Float | Rotational weight of the HeadTarget. |
PelvisPositionWeight
|
Float | Positional weight of the PelvisTarget. |
PelvisRotationWeight
|
Float | Rotational weight of the PelvisTarget. |
ChestGoal
|
Slot | If ChestGoalWeightis greater than 0, the chest will be turned towards this slot when set. When unset, GoalPositionChest is used as a position to turn towards.
|
ChestGoalWeight
|
Float | Weight of turning the chest towards the ChestGoal. |
MinHeadHeight
|
Float | Minimum Head height allowed by the IK solver (Nonfunctional) |
BodyPosStiffness
|
Float | How much the body will try to move with the HeadTarget or with IKPositionHead and IKRotationHead if HeadTarget is unset.
|
BodyRotStiffness
|
Float | How much the body will try to rotate with the HeadTarget or with IKPositionHead and IKRotationHead if HeadTarget is unset.
|
NeckStiffness
|
Float | How much the chest will rotate when the head is rotated. |
RotateChestByHands
|
Float | How much the chest rotates based on hand movement. |
ChestClampWeight
|
Float | How much the chest can rotate relative to the head with 0 being full movement and 1 being no movement. A value of 0.5 allows 90 degrees of rotation for the chest relative to the head. A value of 0 allows 180 degrees and a value of 1 means the chest will be locked relative to the head. |
HeadClampWeight
|
Float | How much the head can rotate relative to the HeadTarget or with IKPositionHead and IKRotationHead if HeadTarget is unset with 0 being full movement and 1 being no movement. A value of 0.5 allows 90 degrees of rotation for the head relative to the target. A value of 0 allows 180 degrees and a value of 1 means head rotation will be locked to the target.
|
MoveBodyBackWhenCrouching
|
Float | How much the body will move backwards when crouching |
MaintainPelvisPosition
|
Float | How much the pelvis will move with the feet instead of the HeadTarget or with IKPositionHead and IKRotationHead if HeadTarget is unset.
|
MaxRootAngle
|
Float | How much the HeadTarget or with IKPositionHead and IKRotationHead if HeadTarget is unset must rotate for the whole body to rotate (in degrees).
|
IKPositionHead
|
Float3 | The solved position for the head. Driven. |
IKRotationHead
|
FloatQ | The solved rotation for the head. Driven. |
IKPositionPelvis
|
Float3 | The solved position for the pelvis. Driven. |
IKRotationPelvis
|
FloatQ | The solved rotation for the pelvis. Driven. |
GoalPositionChest
|
Float3 | The solved goal position for the chest. Driven. |
headHeight
|
Float | Head height while standing. Used for calculating MoveBodyBackWhenCrouching. |
anchorRelativeToHead
|
FloatQ | Root rotation relative to HeadTarget or with IKPositionHead and IKRotationHead if HeadTarget is unset.
|
pelvisRelativeRotation
|
FloatQ | Pelvis rotation relative to HeadTarget or with IKPositionHead and IKRotationHead if HeadTarget is unset.
|
chestRelativeRotation
|
FloatQ | Chest rotation relative to HeadTarget or with IKPositionHead and IKRotationHead if HeadTarget is unset.
|
chestForward
|
Float3 | Chest Forward Vector |
pelvisForward
|
Float3 | Pelvis Forward Vector |
Arm
Contains parameters for the two arms: leftArm
and rightArm
.
Name | Type | Description |
---|---|---|
Initiated
|
Bool | Whether this arm section is initalized. |
Target
|
Slot | The target for the arm's hand. It will use this if set, or PositionWeight and RotationWeight if unset.
|
BendGoal
|
Slot | The arm's elbow will be bent towards this slot if BendGoalWeight > 0, and the slot is set. Otherwise BendGoalPosition is used as a bend position.
|
PositionWeight
|
Float | Positional weight of the Target. |
RotationWeight
|
Float | Rotational weight of the Target. |
ShoulderRotationMode
|
ShoulderRotationMode | Shoulder rotation method. Pitch/yaw is more accurate, while From/to is simpler. |
ShoulderRotationWeight
|
Float | How much the arm's shoulder should move based on Hand position. |
BendGoalWeight
|
Float | if greater than 0, will bend the elbow towards the BendGoal slot if set otherwise BendGoalPosition is used
|
SwivelOffset
|
Float | Rotation offset for the arm's elbow in degrees. |
WristToPalmAxis
|
Float3 | Palm Direction; local axis of the hand bone that points from the wrist towards the palm. Used for defining hand bone orientation. (Higher values on the Y axis increase the amount the arms move with your controllers) |
PalmToThumbAxis
|
Float3 | Thumb Direction; local axis of the hand bone that points from the palm towards the thumb. Used for defining hand bone orientation. |
ArmLengthMlp
|
Float | Arm Length Multiplier. Used to make the arm shorter/longer. Works by displacement of hand and forearm local position. |
StretchCurve
|
direct SyncCurve`1<Float> | Unsupported. Would evaluate stretching of the arm by target distance relative to arm length. Value at time 1 represents stretching amount at the point where distance to the target is equal to arm length. Value at time 2 represents stretching amount at the point where distance to the target is double the arm length. Value represents the amount of stretching. Linear stretching would be achieved with a linear curve going up by 45 degrees. Increase the range of stretching by moving the last key up and right at the same amount. Smoothing in the curve can help reduce elbow snapping (start stretching the arm slightly before target distance reaches arm length). |
IKPosition
|
Float3 | The solved position for the arm's hand. Driven. |
IKRotation
|
FloatQ | The solved rotation for the arm's hand. Driven. |
BendGoalPosition
|
Float3 | The solved position for the bend goal. Driven. |
TwistRelaxWeight
|
Float | How much the forearm twists towards the wrist |
TwistCrossfade
|
Float | Weight of the forearm twisting |
TwistAngleOffset
|
Float | Angle offset of the forearm twisting |
chestForwardAxis
|
Float3 | The axis used to tell the VRIK what direction the chest is pointing forward by default. usually set when the chest bone roll is different from 0 in blender. |
chestUpAxis
|
Float3 | The axis used to tell the VRIK what direction the chest is pointing up by default. usually set when the chest doesn't point directly towards the next bone in the chain. |
forearmTwistAxis
|
Float3 | This specifies what axis the forearms should twist around in local space. |
forearmAxis
|
Float3 | This specifies the axis that the forearm takes place along in local space. |
axisRelativeToUpperArm
|
Float3 | This identifies which axis the forearm is from the upper arm. |
axisRelativeToHand
|
Float3 | This identifies which axis the hand is from the forearm. |
ShoulderRotationMode
Name | Value | Description |
---|---|---|
YawPitch
|
0 | Rotates the shoulder using Yaw Pitch, which is like using Slerp. |
FromTo
|
1 | Rotates the shoulder using essentially a look at, which can solve some IK issues. |
Leg
Contains parameters for the two legs: leftLeg
and rightLeg
.
Name | Type | Description |
---|---|---|
Initiated
|
Bool | Whether this leg is initialized. |
Target
|
Slot | The target for the left foot/toe. This can override the IKPosition and IKRotation values so it uses this slot as a target position instead.
|
BendGoalPosition
|
Float3 | The solved position for the bend goal. Driven. |
BendGoal
|
Slot | The left knee will be bent towards this slot if BendGoalWeight > 0 if set. otherwise BendGoalPosition is used.
|
PositionWeight
|
Float | Positional weight of the Target. |
RotationWeight
|
Float | Rotational weight of the Target. |
BendGoalWeight
|
Float | if greater than 0, will bend the left knee towards the BendGoal slot if set otherwise BendGoalPosition is used.
|
SwivelOffset
|
Float | Rotation offset for the left knee in degrees. |
CalfBendNormal
|
Float3 | The direction the calf should bend towards in local space. |
IKPosition
|
Float3 | The solved position for the left foot/toe. Driven. |
IKRotation
|
FloatQ | The solved rotation for the left foot/toe. Driven. |
Locomotion
Name | Type | Description |
---|---|---|
Weight
|
Float | How much weight locomotion calculation has rather than normal IK calculation. |
FootDistance
|
Float | Tries to maintain this distance between where each foot will attempt to plant themselves. |
StepThreshold
|
Float | How far you have to move for the feet to take a step (re-plant themselves). |
AngleThreshold
|
Float | How much you have to rotate for the feet to take a step (re-plant themselves). |
ComAngleMlp
|
Float | Multiplier angle of the (center of mass minus the center of pressure) vector. Larger value makes the character step sooner if losing balance. |
MaxVelocity
|
Float | Maximum magnitude of head/hand target velocity for prediction. |
VelocityFactor
|
Float | How much the feet will use your current head/hand target velocity to predict where you're stepping. |
MaxLegStretch
|
Float | How much your leg can stretch before it attempts to take a step. 1 means fully stretched. |
RootSpeed
|
Float | How fast the pelvis and legs will move to catch up to the HMD; the speed of lerping the root of the character towards the horizontal mid-point of the footsteps. |
StepSpeed
|
Float | How fast the foot planter will move the feet to their new position when re-planting |
StepHeight
|
direct SyncCurve`1<Float> | The height of the foot by normalized step progress (0 - 1). |
HeelHeight
|
direct SyncCurve`1<Float> | The height offset of the heel by normalized step progress (0 - 1). |
RelaxLegTwistMinAngle
|
Float | How much your HMD has to rotate before your feet begin to rotate towards your HMD without stepping; rotates the foot while the leg is not stepping to relax the twist rotation of the leg if ideal rotation is past this angle. |
RelaxLegTwistSpeed
|
Float | How fast the feet can rotate while on the ground; the speed of rotating the foot while the leg is not stepping to relax the twist rotation of the leg. |
StepInterpolation
|
InterpolationMode | The type of interpolation the feet will use during stepping. |
Offset
|
Float3 | Offset for feet planting relative to your HMD |
LeftFootOffset
|
Float3 | How much to offset the foot from the given target position and rotation for the left foot. |
RightFootOffset
|
Float3 | How much to offset the foot from the given target position and rotation for the right foot. |
OnLeftFootstep
|
delegate of identity Action | This is very finicky, and can be used to fire sounds or other Action sync delegates when the left foot steps. |
OnRightFootstep
|
delegate of identity Action | This is very finicky, and can be used to fire sounds or other Action sync delegates when the right foot steps. |
_leftFootstep
|
direct Footstep | A list of footsteps to trigger for the left foot. |
_rightFootstep
|
direct Footstep | A list of footsteps to trigger for the right foot. |
Footstep
BoneDrive
Bonedrive fields use a combination of the defaultLocalPositions
and defaultLocalRotations
entries at this element's entry position in the list as well as VRIK position and rotation solved values to determine the final driven value.
Name | Type | Description |
---|---|---|
Position
|
field drive of Float3 | The field to drive with the VRIK's solved position for the bone that corrosponds to this entry. |
Rotation
|
field drive of FloatQ | The field to drive with the VRIK's solved rotation for the bone that corrosponds to this entry. |
Usage
This article or section is a Stub. You can help the Resonite Wiki by expanding it.
Examples
Used in every avatar except head and hands avatars to make avatar movements.