Difference between revisions of "Suggested BVH Joint Rotation Limits"

From Second Life Wiki
Jump to navigation Jump to search
Line 166: Line 166:
|}
|}


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


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.


Forward kinematics is animating by rotating the bones manuallyInverse kinematics is animating by moving the end of a  
None of the limits above are 'official'.  They aren't due to limitations in the simulator or viewerThey 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.


chain of bones (often the hands and feet) causing the bones behind it to be pulled along like links in a chain.  Most
When trying to estimate what the joint rotation limits should be it's important to consider actions that bend the joints to extremes.
 
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:
Actions I considered include:
Line 230: Line 210:
Several of the limits need some explanation.
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  
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.


positions, impossible.  The Y axis is normally used to rotate the arms forward and backward along a approximately
Hands should not normally rotate along the X axis, but some X axis rotation is necessary to compensate for the lack of finger control.


horizontal plane, but in positions similar to the scorpion yoga pose it describes rotation along approximately vertical
Since hip is the root of the bone hierarchy, it rotates the entire body.  It therefore has no rotation limits or stiffness.


planes, which is what the X axis would normally describeTo place the elbow beside the head either the X or Y axis limit
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.


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
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:
 
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
: 1 - abs(start - end)/360
"abs" stands for absolute value
"abs" stands for absolute value
"start" and "end" are variables containing the minimum and maximum values for rotation along that axis
"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  
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.
 
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.
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  
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.
 
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%.
Since Hand X axis rotation should be minimized, I listed their stiffness as 99%.

Revision as of 14:22, 22 September 2011

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