Difference between revisions of "Suggested BVH Joint Rotation Limits"

From Second Life Wiki
Jump to navigation Jump to search
(Created page with "{{Help |Object=* }} {| class="sortable" {{prettytable}} |-{{Hl2}} !Bone !X Axis !Y Axis !Z Axis |- |head | -30 to 22 | -45 to 45 | -30 to 30 |- |neck | -30 to 22 | -45 to 45 | -…")
 
Line 5: Line 5:
{| class="sortable" {{prettytable}}
{| class="sortable" {{prettytable}}
|-{{Hl2}}
|-{{Hl2}}
!Bone
! Bone
!X Axis
! X Range
!Y Axis
! X Stiffness
!Z Axis
! Y Range
! Y Stiffness
! Z Range
! Z Stiffness
|-
|-
|head
| head
| -30 to 22
| -37 to 22
| -45 to 45
| 84%
| -45 to 45
| 75%
| -30 to 30
| -30 to 30
| 83%
|-
|-
|neck
| neck
| -30 to 22
| -37 to 22
| -45 to 45
| 84%
| -45 to 45
| 75%
| -30 to 30
| -30 to 30
| 83%
|-
|-
|lCollar
| lCollar
| 0 to 0
| Locked
| -30 to 10
| Not Applicable
| -30 to 10
| 89%
| -30 to 30
| -30 to 30
| 83%
|-
|-
|rCollar
| rCollar
| 0 to 0
| Locked
| -10 to 30
| Not Applicable
| -10 to 30
| 89%
| -30 to 30
| -30 to 30
| 83%
|-
|-
|lShldr
| lShldr
| -90 to 90
| -135 to 90
| -105 to 72
| 38%
| -100 to 98
| -180 (-105) to 98
| 44%
| -91 to 97
| 48%
|-
|-
|rShldr
| rShldr
| -90 to 90
| -135 to 90
| -72 to 105
| 38%
| -98 to 100
| -98 to 180 (105)
| 44%
| -97 to 91
| 48%
|-
|-
|lForeArm
| lForeArm
| -90 to 72
| -90 to 79
| -146 to 0
| 53%
| 0 to 0
| -146 to   0
| 59%
| Locked
| Not Applicable
|-
|-
|rForeArm
| rForeArm
| -90 to 72
| -90 to 79
| 53%
| 0 to 146
| 0 to 146
| 0 to 0
| 59%
| Locked
| Not Applicable
|-
|-
|lHand{{Footnote|In theory, the hands should not rotate along the X axis, but some rotation along the X axis is needed to compensate for the lack of finger control.  When using inverse kinematics you should set the X axis joint stiffness to maximum, so it will only rotate when required, or lock the X axis rotation at 0 and unlock and adjust it manually when necessary.|handle=a}}
| lHand
| -45 to 45
| -45 to 45
| -25 to 36
| 99%
| -72 to 72
| -25 to 36
| 83%
| -90 to 86
| 51%
|-
|-
|rHand{{Footnote|handle=a}}
| rHand
| -45 to 45
| -45 to 45
| -36 to 25
| 99%
| -72 to 72
| -36 to 25
| 83%
| -86 to 90
| 51%
|-
|-
|chest
| chest
| -30 to 22
| -45 to 22
| -45 to 45
| 81%
| -45 to 45
| 75%
| -30 to 30
| -30 to 30
| 83%
|-
|-
|abdomen
| abdomen
| -30 to 68
| -45 to 68
| -45 to 45
| 69%
| -45 to 45
| 75%
| -30 to 30
| -30 to 30
| 83%
|-
|-
|hip{{Footnote|Since hip is the root of the bone hierarchy, it rotates the entire body.|handle=b}}
| hip
| Not Applicable
| Not Applicable
| Not Applicable
| Not Applicable
| Not Applicable
| Not Applicable
| Not Applicable
| Not Applicable
| Not Applicable
|-
|-
|lThigh
| lThigh
| -155 to 45
| -155 to 45
| -30 to 68
| 44%
| -15 to 85
| -85 to 105
| 47%
| -17 to 88
| 71%
|-
|-
|rThigh
| rThigh
| -155 to 45
| -155 to 45
| -68 to 30
| 44%
| -85 to 15
| -105 to 85
| 47%
| -88 to 17
| 71%
|-
|-
|lShin
| lShin
| 0 to 150
| 0 to 150
| 0 to 0
| 58%
| 0 to 0
| Locked
| Not Applicable
| Locked
| Not Applicable
|-
|-
|rShin
| rShin
| 0 to 150
| 0 to 150
| 0 to 0
| 58%
| 0 to 0
| Locked
| Not Applicable
| Locked
| Not Applicable
|-
|-
|lFoot
| lFoot
| -32 to 54
| -31 to 63
| -45 to 22
| 74%
| -85 to 15
| -26 to 26
| 86%
| -74 to 15
| 75%
|-
|-
|rFoot
| rFoot
| -32 to 54
| -31 to 63
| -22 to 45
| 74%
| -15 to 85
| -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.
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


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.
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.
None of the limits above are 'official'.  They aren't due to limitations in the simulator or viewer.  They aren't based on  


When trying to estimate what the joint rotation limits should be it's important to consider actions that bend the joints to extremes.
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:
* walking on the tips of the toes, as in ballet
* 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
* cartwheel
* crossing the legs at the knees
* sliding the feet apart along a flat floor into the splits
* swan dive
* swan dive
* baseball pitch
* swinging from a gymnastics high bar (e.g. with your arms behind you)
* 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
* toe touch
* torso tilt to the side (exercise)
* hand walking
* torso twist (exercise)
* 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 ==
== See Also ==
*[[Suggested BVH Hip Y Locations]]
*[[Suggested BVH Hip Y Locations]]
== Footnotes ==
{{Footnotes}}


[[Category:LSL_Animation]]
[[Category:LSL_Animation]]

Revision as of 14:21, 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