Arm rotation 180 degrees: Is the arm out to the side or over the shoulder?

I’m not sure how an arm should rotate over the head, if the arm should be to the side when rotated 180 degrees or over the shoulder. I included a screenshot to illustrate what I mean: the figure on the left is what I am calling out to the side and the one on the right is what I am calling over the shoulder.

I rotated Sintel’s arm over 180 degrees and the arm appeared out to the side but when I looked at myself in the mirror it was over the shoulder. This page says that as the arm rotates higher, the collar bone does more lifting http://blender.stackexchange.com/questions/41539/shoulder-deformations . I have found that rotating the shoulder bone still leaves the arm out to the side but resizing the shoulder bone puts it over the shoulder (but there are still deformations to correct).

I set a driver so the scale of the shoulder bone would be 1 when the arm is rotated between 0 and 90 degrees and 0.7 when rotated 180 degrees (or more) and the scale is between 0.7 and 1 in between 90 and 165 degrees. I used the Python expression min(1,max(0.7,var*1.8/3.14159265+1.45)). Although I am referring to angles as though 0 degrees is arms at the side, 90 is arms out as T pose, and 180 is over the head, I actually have my mesh as a T pose (though I used to have it modeled with arms at the side but changed it to a T pose to simplify deformations), and 90 degrees is an arm rotation at the side of the body, 0 is in a T pose position, and -90 is over the head. I made the driver reach the minimum value of 0.7 at 165 degrees (or -75) because I plan to drive the shoulder to rotate up to 15 degrees when rotating the arm over the head.

Before I begin setting up deformation corrections, I want to be sure how an arm should rotate over the head: should it be out to the side or over the shoulder?

[Credit to BenDansie for the Sintel mesh]

Attachments



It should be just like you see in the mirror. And the collar bone rotates. It doesn’t scale.


To reach it’s fullest extension upward alongside the head, the shoulder joint must rotate on more than one axis, and the collarbone, as shown above and below, also rotates once the arm reaches above a certain level, lifting the entire shoulder girdle along with it.


The upper arm has rotated at the shoulder joint so that the deltoid muscle is positioned more to the rear than with the unflexed arm; which axis rotates for this depends on your rig setup, but is likely the Y axis, pointing along the length of the arm. The farther upright the arm is flexed the more this rotation is required.

NOTE: This model is not 100% anatomically accurate in terms of muscle deformation but does illustrate the multi-axis rotation needed.

Another example, surface anatomy only:


If your really into rigging, you might want to see if Chip can help you use several bones such as in one of his models I saw Nezina. It is complex but if you really think about it, you might be better off hand animating the movements rather than using drivers because you may not be able to account for all the subtle movements of the shoulder with drivers. For instance, the hand going up more towards the front will rotate on different axis as opposed to the sides, etc.

Here’s a vid of an early Nezina model showing shoulder deformations in the round. Looking it over I would probably put more lift in the collarbone than is shown, but it’s still a pretty good example.

password: chipsvids

This illustrates the motion you describe, but as stilltrying wrote, other motions involving rotation that puts the arm out front or behind the torso also introduce new axes of motion. This makes the shoulder joint more problematic because it has a high degree of freedom, able to move on many axes. The really difficult issue is that when dealing with three-axis motion, the order in which the rotations are applied can affect which rotation values are used to achieve a certain arm position. That makes solutions for drivers and constraints more complex.

Since I made Kata, which used pydrivers scripts (python expressions, some quite complex, stored in a referenced text file), I have moved forward to using Transformation constraints (and some other types as well) rather than drivers for the simple reason that joints like the shoulder take complex expressions to link their rotations to helper bones and the like. With Transformation constraints those expressions are transparent, and the constraints are well-designed so that many varieties of using one type of transform to motivate another type on another or the same bone is much more straightforward than driver expressions.

I realize that actual collar bones don’t scale but scaling the shoulder bone in my rig seemed to produce a somewhat realistic pose even though it does not simulate the way actual bones and muscles move.

My experience with rigs is that the behavior is very different when an arm starts at the side of the body and then rotates in front of the body then over the head, as opposed to out to the side (like a T pose) then over the head (out in front I’ve found to be a lot harder to correct shoulder deformations). For an actual arm it seems like the only difference is how it is twisted. When rotating the arm in front first, the thumb ends up pointing backward, but when rotating to a T pose first, the thumb points forward, so changing from the two options is a matter of twisting the arm.

I don’t quite understand. Are you saying the deltoid muscle is more in the back of the shoulder when the arm is lifted?

Yes. It is not a large rotation along that axis, but to get the arm truly vertical it is necessary. This is really only a factor when the arm gets raised well above horizontal when lifted out to the side of the torso, and then up alongside the head.


Note how the deltoid wraps more to the rear of the upraised arm in this example, and the armpit presents more to the anterior of the torso. The rotation of the collarbone also contributes some to the total effect.

I noticed that in the image SkpFX attached the shoulder bone is not connected to the upper arm bone. This would make it possible to move the arm over the shoulder instead of out to the side if I transformed the location of the upper arm.

I have attached three screenshots: the first is when the shoulder is not transformed, the second is when the shoulder is rotated 30 degrees, and in the third the shoulder is rotated 30 degrees and scaled by 0.7. I have not corrected deformations yet and this is visible on the screenshots. The third screenshot with the shoulder bone scaled shows the arm in the natural position above the shoulder instead of out to the side.




One problem I see in your screenshots is that the shoulder joint is not located in the optimal position for naturalistic deformation. The point of rotation is too far out from the body, which is why you have to pull it in using scaling to get a better result. Position it closer in to the torso, around 1/2 to 2/3 of the way between the extremes shown in pics 2 & 3 above (post #8) and I think you will get more consistent results.

Another issue, if you are looking for naturalistic deformation, is overall body proportions. From what I can see above, based on the contour of the lateral thorax (beneath the arm) and the location of the nipple, your torso is much too narrow. This would tend to make the shoulder look out of place when flexed upwards. I found it very useful to gather references of the human skeleton and musculature system to use as templates for my rig construction – can’t go wrong following the natural blueprints :smiley: It also helps prevent egregious errors in human proportions.

I attached a screenshot of my armature without poses. When I move the head of the upper arm bone in edit mode so that it is directly above the armpit, then rotate the arm 90 degrees above the head, the arm is more above the shoulder than out to the side, but when I rotate the arm 90 degrees so it is beside the body the arm intersects the body.

I based my mesh on an 8 head figure. The nipple in my mesh is at a height of 6 heads and most models I’ve seen of 8 head figures put female nipples between a height of 5.75 and 6.25 heads, and male nipples between 5.75 and 6. Down the middle of the body is where x = 0 and the edge of the chest is at x = 0.6 (where one unit is the height of one head). When the arms are down to the side, the edge of the arms are at x = 1, which I think is common for a male but a little too wide for a female. Also, I did not make the breasts move up when the arms move up (I noticed that you did make the breasts move up in the video linked in post #5) so that might make the nipple seem lower on the body than it is.

I attached a screenshot of a full view of my mesh showing the height, with a mirror modifier to show the whole left and right side, and the arms rotated to the side. The shoulders are pointed but that is because of a deformation that I haven’t corrected yet.

Attachments