VRIK (Component)

From Neos Wiki
Revision as of 19:51, 20 October 2021 by Xekri (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Other languages:
English

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


VRIK component as seen in the Scene Inspector

Intoduction

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. As usual for Neos, you can overdrive some of them with interesting results.

Fields
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
FixTransformsEnabled Bool Clamps IK transforms to reasonable values and Resets IK every update.
componentInitiated Bool
IKPosition Float3
IKPositionWeight Float Weight of the IK
SimulationSpace Slot
OffsetSpace Slot
_initiated Bool
OnPreInitiate UpdateDelegate
OnPostInitiate UpdateDelegate
OnPreUpdate UpdateDelegate
OnPostUpdate UpdateDelegate
root Slot
pelvis Slot
spine Slot
chest Slot
neck Slot
head Slot
leftShoulder Slot
leftUpperArm Slot
leftForearm Slot
leftHand Slot
rightShoulder Slot
rightUpperArm Slot
rightForearm Slot
rightHand Slot
leftThigh Slot
leftCalf Slot
leftFoot Slot
leftToes Slot
rightThigh Slot
rightCalf Slot
rightFoot Slot
rightToes Slot
defaultLocalPositions Float3
defaultLocalRotations FloatQ
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.Initiated Bool
spine.HeadTarget Slot Typically the position and rotation of the HMD tracker. Note: on my own avatar, this is set to null. It's possible that this value isn't used, and instead the Head slot of the User is used.
spine.PelvisTarget Slot Typically the position and rotation of the hip tracker. Note: on my own avatar, this is set to null. It's possible that this value isn't used, and instead the hip tracker slot of the User is used.
spine.PositionWeight Float Positional weight of the HeadTarget.
spine.RotationWeight Float Rotational weight of the HeadTarget.
spine.PelvisPositionWeight Float Positional weight of the PelvisTarget.
spine.PelvisRotationWeight Float Rotational weight of the PelvisTarget.
spine.ChestGoal Slot If ChestGoalWeightis greater than 0, the chest will be turned towards this slot.
spine.ChestGoalWeight Float Weight of turning the chest towards the ChestGoal.
spine.MinHeadHeight Float Minimum Head height allowed by the IK solver (Nonfunctional)
spine.BodyPosStiffness Float How much the body will try to move with the HeadTarget.
spine.BodyRotStiffness Float How much the body will try to rotate with the HeadTarget.
spine.NeckStiffness Float How much the chest will rotate when the head is rotated.
spine.RotateChestByHands Float How much the chest rotates based on hand movement.
spine.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.
spine.HeadClampWeight Float How much the head can rotate relative to the HeadTarget 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 HeadTarget. A value of 0 allows 180 degrees and a value of 1 means head rotation will be locked to the HeadTarget.
spine.MoveBodyBackWhenCrouching Float How much the body will move backwards when crouching
spine.MaintainPelvisPosition Float How much the pelvis will move with the feet instead of the HeadTarget.
spine.MaxRootAngle Float How much the HeadTarget must rotate for the whole body to rotate (in degrees).
spine.IKPositionHead Float3 The solved position for the head. Driven.
spine.IKRotationHead FloatQ The solved rotation for the head. Driven.
spine.IKPositionPelvis Float3 The solved position for the pelvis. Driven.
spine.IKRotationPelvis FloatQ The solved rotation for the pelvis. Driven.
spine.GoalPositionChest Float3 The solved goal position for the chest. Driven.
spine.headHeight Float Head height while standing. Used for calculating MoveBodyBackWhenCrouching.
spine.anchorRelativeToHead FloatQ Root rotation relative to HeadTarget.
spine.pelvisRelativeRotation FloatQ Pelvis rotation relative to HeadTarget.
spine.chestRelativeRotation FloatQ Chest rotation relative to HeadTarget.
spine.chestForward Float3 Chest Forward Vector
spine.pelvisForward Float3 Pelvis Forward Vector
leftArm.Initiated Bool
leftArm.Target Slot The target for the left hand. Note: on my own avatar, this is set to null. It's possible that this value isn't used, and instead the Left Hand slot of the User is used.
leftArm.BendGoal Slot The left elbow will be bent towards this slot if BendGoalWeight > 0.
leftArm.PositionWeight Float Positional weight of the Target.
leftArm.RotationWeight Float Rotational weight of the Target.
leftArm.ShoulderRotationMode ShoulderRotationMode Shoulder rotation method. Pitch/yaw is more accurate, while From/to is simpler.
leftArm.ShoulderRotationWeight Float How much the left shoulder should move based on Hand position.
leftArm.BendGoalWeight Float if greater than 0, will bend the elbow towards the BendGoal slot.
leftArm.SwivelOffset Float Rotation offset for the left elbow in degrees.
leftArm.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)
leftArm.PalmToThumbAxis Float3 Thumb Direction; local axis of the hand bone that points from the palm towards the thumb. Used for defining hand bone orientation.
leftArm.ArmLengthMlp Float Arm Length Multiplier. Used to make the arm shorter/longer. Works by displacement of hand and forearm local position.
leftArm.StretchCurve 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).
leftArm.IKPosition Float3 The solved position for the left hand. Driven.
leftArm.IKRotation FloatQ The solved rotation for the left hand. Driven.
leftArm.BendGoalPosition Float3 The solved position for the bend goal. Driven.
leftArm.TwistRelaxWeight Float How much the forearm twists towards the wrist
leftArm.TwistCrossfade Float Weight of the forearm twisting
leftArm.TwistAngleOffset Float Angle offset of the forearm twisting
leftArm.chestForwardAxis Float3
leftArm.chestUpAxis Float3
leftArm.forearmTwistAxis Float3
leftArm.forearmAxis Float3
leftArm.axisRelativeToUpperArm Float3
leftArm.axisRelativeToHand Float3
rightArm.Initiated Bool
rightArm.Target Slot The target for the right hand. Note: on my own avatar, this is set to null. It's possible that this value isn't used, and instead the Right Hand slot of the User is used.
rightArm.BendGoal Slot The right elbow will be bent towards this slot if BendGoalWeight > 0.
rightArm.PositionWeight Float Positional weight of the Target.
rightArm.RotationWeight Float Rotational weight of the Target.
rightArm.ShoulderRotationMode ShoulderRotationMode Shoulder rotation method. Pitch/yaw is more accurate, while From/to is simpler.
rightArm.ShoulderRotationWeight Float How much the right shoulder should move based on Hand position.
rightArm.BendGoalWeight Float if greater than 0, will bend the elbow towards the BendGoal slot.
rightArm.SwivelOffset Float Rotation offset for the right elbow in degrees.
rightArm.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)
rightArm.PalmToThumbAxis Float3 Thumb Direction; local axis of the hand bone that points from the palm towards the thumb. Used for defining hand bone orientation.
rightArm.ArmLengthMlp Float Arm Length Multiplier. Used to make the arm shorter/longer. Works by displacement of hand and forearm local position.
rightArm.StretchCurve 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).
rightArm.IKPosition Float3 The solved position for the right hand. Driven.
rightArm.IKRotation FloatQ The solved rotation for the right hand. Driven.
rightArm.BendGoalPosition Float3 The solved position for the bend goal. Driven.
rightArm.TwistRelaxWeight Float How much the forearm twists towards the wrist
rightArm.TwistCrossfade Float Weight of the forearm twisting
rightArm.TwistAngleOffset Float Angle offset of the forearm twisting
rightArm.chestForwardAxis Float3
rightArm.chestUpAxis Float3
rightArm.forearmTwistAxis Float3
rightArm.forearmAxis Float3
rightArm.axisRelativeToUpperArm Float3
rightArm.axisRelativeToHand Float3
leftLeg.Initiated Bool
leftLeg.Target Slot The target for the left foot/toe. This isn't the left foot tracker itself, but a child Slot parented to it so you could adjust its position/rotation to match the orientation of the foot/toe bone. If LeftToes is assigned, the solver will match the left toe bone to this target. If no LeftToes is assigned, LeftFoot will be used instead. Note: on my own avatar, this is set to null. It's possible that this value isn't used, and instead the left foot slot of the User is used.
leftLeg.BendGoalPosition Float3 The solved position for the bend goal. Driven.
leftLeg.BendGoal Slot The left knee will be bent towards this slot if BendGoalWeight > 0.
leftLeg.PositionWeight Float Positional weight of the Target.
leftLeg.RotationWeight Float Rotational weight of the Target.
leftLeg.BendGoalWeight Float if greater than 0, will bend the left knee towards the BendGoal slot.
leftLeg.SwivelOffset Float Rotation offset for the left knee in degrees.
leftLeg.CalfBendNormal Float3
leftLeg.IKPosition Float3 The solved position for the left foot/toe. Driven.
leftLeg.IKRotation FloatQ The solved rotation for the left foot/toe. Driven.
rightLeg.Initiated Bool
rightLeg.Target Slot The target for the right foot/toe. This isn't the right foot tracker itself, but a child Slot parented to it so you could adjust its position/rotation to match the orientation of the foot/toe bone. If RightToes is assigned, the solver will match the left toe bone to this target. If no RightToes is assigned, RightFoot will be used instead. Note: on my own avatar, this is set to null. It's possible that this value isn't used, and instead the right foot slot of the User is used.
rightLeg.BendGoalPosition Float3 The solved position for the bend goal. Driven.
rightLeg.BendGoal Slot The right knee will be bent towards this slot if BendGoalWeight > 0.
rightLeg.PositionWeight Float Positional weight of the Target.
rightLeg.RotationWeight Float Rotational weight of the Target.
rightLeg.BendGoalWeight Float if greater than 0, will bend the right knee towards the BendGoal slot.
rightLeg.SwivelOffset Float Rotation offset for the right knee in degrees.
rightLeg.CalfBendNormal Float3
rightLeg.IKPosition Float3 The solved position for the right foot/toe. Driven.
rightLeg.IKRotation FloatQ The solved rotation for the right foot/toe. Driven.
locomotion.Weight Float
locomotion.FootDistance Float Tries to maintain this distance between where each foot will attempt to plant themselves.
locomotion.StepThreshold Float How far you have to move for the feet to take a step (re-plant themselves).
locomotion.AngleThreshold Float How much you have to rotate for the feet to take a step (re-plant themselves).
locomotion.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.
locomotion.MaxVelocity Float Maximum magnitude of head/hand target velocity for prediction.
locomotion.VelocityFactor Float How much the feet will use your current head/hand target velocity to predict where you're stepping.
locomotion.MaxLegStretch Float How much your leg can stretch before it attempts to take a step. 1 means fully stretched.
locomotion.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.
locomotion.StepSpeed Float How fast the foot planter will move the feet to their new position when re-planting
locomotion.StepHeight Float The height of the foot by normalized step progress (0 - 1).
locomotion.HeelHeight Float The height offset of the heel by normalized step progress (0 - 1).
locomotion.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.
locomotion.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.
locomotion.StepInterpolation InterpolationMode The type of interpolation the feet will use during stepping.
locomotion.Offset Float3 Offset for feet planting relative to your HMD
locomotion.LeftFootOffset Float3
locomotion.RightFootOffset Float3
locomotion.OnLeftFootstep Action Non-Functional WorldDelegate
locomotion.OnRightFootstep Action Non-Functional WorldDelegate
locomotion._leftFootstep._initialized Bool
locomotion._leftFootstep.footRelativeToRoot FloatQ
locomotion._leftFootstep.footGroundHeight Float
locomotion._rightFootstep._initialized Bool
locomotion._rightFootstep.footRelativeToRoot FloatQ
locomotion._rightFootstep.footGroundHeight Float
ForwardFlipped Bool Swaps the feet
ForceRootHeight Float Foot planting height override (Negative numbers cause issues with walking)
LocomotionPositionOffset Float3
DefaultRootPosition Float3
DefaultRootRotation FloatQ
_drives BoneDrive

Behavior

Examples

Related Components