Suggested BVH Joint Rotation Limits

From Second Life Wiki
Revision as of 14:21, 22 September 2011 by Coaldust Numbers (talk | contribs)
Jump to navigation Jump to search
Bone X Range X Stiffness Y Range Y Stiffness Z Range Z Stiffness
head -37 to 22 84% -45 to 45 75% -30 to 30 83%
neck -37 to 22 84% -45 to 45 75% -30 to 30 83%
lCollar Locked Not Applicable -30 to 10 89% -30 to 30 83%
rCollar Locked Not Applicable -10 to 30 89% -30 to 30 83%
lShldr -135 to 90 38% -180 (-105) to 98 44% -91 to 97 48%
rShldr -135 to 90 38% -98 to 180 (105) 44% -97 to 91 48%
lForeArm -90 to 79 53% -146 to 0 59% Locked Not Applicable
rForeArm -90 to 79 53% 0 to 146 59% Locked Not Applicable
lHand -45 to 45 99% -25 to 36 83% -90 to 86 51%
rHand -45 to 45 99% -36 to 25 83% -86 to 90 51%
chest -45 to 22 81% -45 to 45 75% -30 to 30 83%
abdomen -45 to 68 69% -45 to 45 75% -30 to 30 83%
hip Not Applicable Not Applicable Not Applicable Not Applicable Not Applicable Not Applicable
lThigh -155 to 45 44% -85 to 105 47% -17 to 88 71%
rThigh -155 to 45 44% -105 to 85 47% -88 to 17 71%
lShin 0 to 150 58% Locked Not Applicable Locked Not Applicable
rShin 0 to 150 58% Locked Not Applicable Locked Not Applicable
lFoot -31 to 63 74% -26 to 26 86% -74 to 15 75%
rFoot -31 to 63 74% -26 to 26 86% -15 to 74 75%

This information is useful for preventing animators from hyperextending joints. It's also required by some programs to

set up inverse kinematics.

Forward kinematics is animating by rotating the bones manually. Inverse kinematics is animating by moving the end of a

chain of bones (often the hands and feet) causing the bones behind it to be pulled along like links in a chain. Most

animators use a combination of the two. Inverse kinematics is good for quickly getting the bones into a position close to

what you desire. You can then use forward kinematics to fine tune the positions before setting your keyframe. Inverse

kinematics can also be useful for quickly placing a hand, elbow, knee, or foot exactly where you want it.

None of the limits above are 'official'. They aren't due to limitations in the simulator or viewer. They aren't based on

anything in the default animations. They aren't drawn from medical sources. In fact, I was surprised to be unable to

find anything like this on the web, despite it being important to anyone making animations for humanoids. I can only say

that the animations I've created with these limits look right to my eyes, and I can make most of these bends with my own

body (and I'm not double jointed or a gymnast). Information from more reputable sources would be welcome.

When trying to estimate what the joint rotation limits should be it's important to consider actions that bend the joints

to extremes.

Actions I considered include:

  • touch ear to shoulder
  • cross elbows in front of the chest
  • cross elbows behind the head
  • touch elbows behind the back
  • torso tilt to the side (exercise)
  • torso twist (exercise)
  • crossing legs at the knees
  • crossing legs by resting an ankle on the opposite knee
  • doing the splits
  • cartwheel
  • swan dive
  • baseball pitch
  • swinging from a gymnastics high bar (e.g. with your arms behind you)
  • walking on the tips of the toes, as in ballet
  • toe touch
  • hand walking
  • several yoga poses:
    • lotus
    • both feet behind the head
    • bound angle
    • bow
    • crocodile
    • eagle
    • extended side angle
    • gate
    • half spinal twist
    • hero
    • monkey
    • scorpion
    • standing forward bend with hands clasped behind back
    • standing side bend
    • upward bow

Several of the limits need some explanation.

The Shldr forward Y rotation limit should normally be 105, but this would make the scorpion yoga pose, and similar

positions, impossible. The Y axis is normally used to rotate the arms forward and backward along a approximately

horizontal plane, but in positions similar to the scorpion yoga pose it describes rotation along approximately vertical

planes, which is what the X axis would normally describe. To place the elbow beside the head either the X or Y axis limit

must be 180. If the X axis limit is raised to 180 the Y axis limit must also be raised to 180 to allow the elbow to

rest at the side (e.g. to smoothly transition into its position by the head). If the Y axis limit is raised then only

that axis needs excessive freedom. The Shldr backward Y rotation limit does not need to be raised, even in positions like

the scorpion yoga pose.

Hands should not normally rotate along the X axis, but some X axis rotation is necessary to compensate for the lack of

finger control.

Since hip is the root of the bone hierarchy, it rotates the entire body. It therefore has no rotation limits or

stiffness.

Joint stiffness controls how easily a joint rotates around a particular axis. When configured properly it causes chains

of bones to move realistically when using inverse kinematics.

Most of the time, the greater the range of an axis, the less stiff it should be. For that reason I used the following

formula to calculate the stiffness for most axes:

1 - abs(start - end)/360

"abs" stands for absolute value "start" and "end" are variables containing the minimum and maximum values for rotation along that axis

You calculate the percentage of a full 360 degree circle that the rotation limits allow. Since this percentage will

increase as rotation range increases, and we want one that decreases as rotation range increases, we subtract it from 1.

There are times when you don't want to use this method; animation tools would not make it configurable otherwise.

I used 105, instead of 180, as the Shldr forward Y axis rotation limit when calculating the stiffness. This best

represents the usual behavior of the Y axis and should result in the most natural movement.

Since Hand X axis rotation should be minimized, I listed their stiffness as 99%.

See Also