View Full Version : A good Shoulder setup, weighting tutorial...

11 November 2002, 06:15 AM
Ive been trying to setup a human shoulder in LW and Im about to go nuts. This is by far the hardest thing I have ever tried to do in LW. Does anyone have or know of a good tutorial on this? Have you got a succesful shoulder setup? Let me se it.

Im going insane here...:surprised

11 November 2002, 07:29 AM
This looks good.. It's not a tutorial but you can download the scene (shoulder socket test) and see how it works..

11 November 2002, 07:42 AM
Hey Firelark, I'm working on the same thing right now and I think I can say, I feel your pain. I've been back and forth between Layout and Modeller about a bazillion times and just when I think the changes I've made in one area are working, I see that they adversely affect another.

The variables begin to gang up on you. Between point weighting, bone placement, mesh layout(i.e. edge loops) it's difficult to tell just what needs adjusting.

Right now I've stripped all but the torso and right arm from my model just to speed things up. I'm playing with falloff bones and expressions to try and isolate some of the problems, but things just seem to be getting more complex. Arrrrg.:scream:



11 November 2002, 07:28 PM
The biggest problem for me is when the character is reaching up and behind his back the deformations are so bad. And the whole sholder is twisted deyond recognition. Ive tried using the "Smartskin" technique with bonecontrolled morphmaps that is correcting the geometry. That works fine if you use only one morphmap on a sertain are. If you combine two or more and add the original bone deformation to the eqation the result will become unpredictable and the project will take huge proportions.

I want to keep it as simple as possible. Ive been trying extravagance methods for days now and Im prepared to go back to basic and accept a little less quality in the shoulder region.

Meshbuilder thanks for the link. That was a very usefull link. Often even a simple pictures of other peoples ideas can make the whole differens since it gives you new ideas.:thumbsup:

ub52 I would love to se your setups. Ive just scraped my latest setup so I dont have anything to show yet. Im planning to go back to one of my early simpler setups that Ive found worked best so far. Ill post a sample when Im done with setting it up.


11 November 2002, 07:49 PM
Firelark, no problem, as soon as I get a chance to put something together I'll post it.

Tell me, are you setting up for IK or FK for the arms? IK seems a little unwieldly, but maybe it's just my inexperience animating.

- ub52

11 November 2002, 09:19 PM
I havent really decided yet whether to use IK or FK. Im leaning towards FK since as you say IK a little difficult to get accurate poses. And Ive found that mixing IK and expressioncontrolled bones can cause strange behavior when moving.


11 November 2002, 10:21 PM
OK, I've posted a couple of short avi's, 8 seconds each. One viewing the model from the front and one from the back. They're DIVX 5.02 encoded. Here are the links.

This is all that's on my web site by the way. Just can't seem to find time to get an official one up.

- ub52

11 November 2002, 06:24 AM
That is some real good shoulder deformation. Looks like you've been doing this more than I have:). Im setting up my new shoulder at the moment. Ill hope to have a clip to show you in a few hours. What does that little bone in the armpit do?

11 November 2002, 07:50 AM
Originally posted by Firelark
I havent really decided yet whether to use IK or FK. Im leaning towards FK since as you say IK a little difficult to get accurate poses. And Ive found that mixing IK and expressioncontrolled bones can cause strange behavior when moving.

The decision whether to use IK or not on the upperbody should be based on what the character must do in each shot. There is no such things as a universal character rig. If the character has to have its hand stay locked to a surface or move its hand along a surface then thats a good place to use IK. If the character doesnt have to do any of that then why use IK? You can get accurate poses with IK if its set up properly. I also follow the same idea when using expressions. I dont like expressions that do any kind of autocentering. The reason is that the animator typically has to fight with those rigs to make them work right. A good rig is one that is very poseable and doesnt break in between poses. It also doesnt break its pose when some part is moved. Ive seen many so called "Pro" character setups that are anything but that. Its caused a lot of misconceptions to be passed along to new users. The problem most people have with rigging is that they lack experience animating other peoples rigs. Typically the best riggers are those who have some experience doing actual character animation. If you dont have that experience I would find someone who does and rig for them. There is a whole philosphy behind rigging. Its not based on what is technically right or wrong but on what the character has to do and the challenge is what you have to do to make it easily do that.
These are things I teach as well as how to go about doing it.
you can see student WIPs at

BTW heres an interesting rig that uses no morphing or displacement maps.

11 November 2002, 08:02 AM
Thanks Firelark. I can't tell you how many hours I've spent tweaking and still, I'm not totally satisfied with the results. I suppose we are all our own worst critics.

I'm not exactly sure which bone you are referring to as there is no bone in the arm pit. It must be the angle at which I created the clip. There is a hold bone in the back shoulder blade area which serves to keep the mesh from colapsing in and loosing volume as the arm is rotated forward. It is parented to the shoulder bone. There is also a fan bone also parented to the shoulder bone and protrudes up and out of the shoulder joint. Both it and the shoulder bone rotations are controlled by expressions and channel followers to the first bicep bone, the one closest to the shoulder joint.

There is a problem with the rig in it's current state. With the arms resting at the sides you use the biceps pitch channel to swing the arm forward and back. This channel also drives the pitch channel of the shoulder bone to get the nice deformations when the arm is elevated. However, with the arm at the side, rotating the biceps pitch channel makes the shoulder sway forward and back and really looks ugly. I'll try to put up another clip to show what I mean. What I need to do is rewrite the expression controlling the shoulder pitch to have the effect falloff as the as the arm is lowered to the side.

- ub52

11 November 2002, 08:34 AM
Here is the link to the clip show the arm swing on just the pitch channel and the effect it has on the shoulder. Ugh.


11 November 2002, 04:03 PM
Yes you could use a "Lesser than" expression to remove the shoulder movement expression when the bicep is below a certain angle on the heading. Also you could use maprange expression ( the same expression you would use for "Smartskin" - Morphlink ) to create a falloff effect. I havent tried that last expression but I think it should work.

Have you tried to use IK with this setup together with those expressions? I think Splinegod is right in that IK good to have in certain scenes, like when you'll need the hands to stay put at someplace.

I am just about to fix the weights in the shoulder and then I'll post a sample of my rig.

- Karl:wavey:

11 November 2002, 04:12 PM
Also you could use maprange expression ( the same expression you would use for "Smartskin" - Morphlink ) to create a falloff effect.

I'll have to check that out. Thanks.

I have not rigged the arm for IK, but it's next on the agenda as soon as I get the expressions worked out. I'll post the progress.

- ub52

11 November 2002, 04:37 PM
This is the stage that i am stuck at myself.. I can weigh, and setup every area except the shoulder area.. i think that mine might be how i modeled the shoulder area.. I definetely need to practice more on getting the shoulder to deform right so i can finally get something going..

11 November 2002, 05:37 PM
Originally posted by Infinity3d4life
... i think that mine might be how i modeled the shoulder area.. I definetely need to practice more on getting the shoulder to deform right so i can finally get something going..

This is more important than I had originally thought. I've found that the mesh will deform in a very unattractive fashion anywhere you have more than 4 polys meeting at a point. Try to avoid these at all cost. Superior to this though is haveing your edges flow so they don't fight the deformation, but facilitate it.

- ub52

11 November 2002, 05:57 PM
Hi ub52 here is my setup clip:

They are in Sorenson 3 format. Hope you can watch it.

I got the shoulder to look somewhat OK now. I need to work the weights more and Im not happy with the deformation in the armpit when the arm is hold down by the side. I havent figured out how to fix that yet. Any ideas? Im thinking of doing a hold bone like the one you have made. I havent even started messing with the twisting motions yet, I dont even want to think about them...:hmm:

Short description of my rig:
Ive setup three bones for the shoulder wich is set to follow the motion of the bicep bone via rather simpe expressions. I also used the "Less then" expression to remove the up/down rotation of the shoulder bones if the bicep is less than a certain degree on the Pitch.

The back/forth motion is set to follow bicep H rotation devided by 2.

-Karl :wavey:

11 November 2002, 07:00 PM
Firelark, great modeling job. I love your character. The deformation looks pretty good so far. I think I see the area your talking about. In the front view anim I looks like when them arm folds down the crevice in the underarm has an unnatural looking fold. I think tweaking the weight maps in just that area should fix the problem.


11 November 2002, 07:38 PM
Thanks ub52
Did you get the mapRange expression to work? I tried it but seems like Im missing some thing. Maprange should work like the Morph link does.

Here is my expression:


RBicepHSubexpression= ([Troll2:Layer6.RBicep.Rotation.H]/2)

In my mind this should tell the bones Heading rot to wich this expression is applied to:

When RBicep bone Pitch is between in 0 and 70 degrees it should return number relative to a min ( what ever RBicepHSubexpression returns ) at 0 deg and a max 0 (zero) at 70 degrees.

But this doesnt happends for me. Nothing really happends other than the ([Troll2:Layer6.RBicep.Rotation.H]/2) is applied seemingly equally all the time. Any ideas....?


11 November 2002, 09:11 PM
Hey ub52.

I solved the the problem with the falloff expression. I turns out it was working all along only it continued to scale the value beond 70 degrees where the value should return 0 (zero) and it kept returning decreasing negative numbers in a linjar falloff fasion.

What I had to do was to apply an expression that change the script like this:

Old Expression:
Exp Name: RBicepRotHFollow
Value: ([Troll2:Layer6.RBicep.Rotation.H]/2)

New expression (Greater than):
Exp Name: RBicepHLimiter
Value: [Troll2:Layer6.RBicep.Rotation.P]>70.000?70.000:[Troll2:Layer6.RBicep.Rotation.P]

^This expression returns a value that whont be greater than 70 (deg).

Change expression (mapRange):
Exp Name: RBicepHFalloff
Value: mapRange([RBicepHLimiter],0.000,70.000,[RBicepRotHFollow],0.000)

Now the input value will never be more than 70 wich will keep the shoulder bone H at zero degrees even after the bicep bone passed 70 degrees at Pitch rot.

I hope it make sence...:hmm:

- Karl:wavey:

11 November 2002, 12:45 AM
OK, cool. I got it to work on my end also. Though I had a slightly diffierent approach. I used the lscript expression "clamp" to limit the biceps values to fall between 0 and -90 degrees. Normalized the result by dividing by -90 and subtracted that from 1 which resulted in a percent factor which I could use to drive the pitch of the shoulder. Here are the expressions.

Exp Name: PitchRotFactor
Value: 1 - clamp([ShoulderTest.RBicep1.Rotation.H],-90.000,0.000)/-90

Exp Name: FollowBicepPitch
Value: [ShoulderTest.RBicep1.RotationP]*[PitchRotFactor]

I then selected the ShoulderTest.RShoulder.RotationP channel and applied the FollowBicepPitch expression. Works like a charm. Well, sorta. I think I need a similar expression to have the Biceps picth channel drive the Shoulders bank channel as the arm comes down closer to the side. Without that I'm getting wierd deformations (or maybe a lack of) on the pec's and lat's (i.e. front and back of the shoulder. Oh well, never done.

- ub52

11 November 2002, 06:34 AM
Nice. I would never have thought of the clamp expression.

How are you going to do the shoulder twisting? For example: I want to get my character to reach up and behind his head like he was to throw something very hard. This is a huge problem for me because the shoulder area gets badly twisted. I dont really know how to apprach this problem. It seem to me that when the arm is strait forward and is about to rotate up the shoulder kind of rolls with it in real life. But when the shoulder is rolled back it creates a bad dent in the shoulderblade if you know what i mean. I maight turn to smartskin for this. What do you think? Any ideas?


11 November 2002, 06:52 AM
Something you might try:
Put a null near your shoulder blade. Apply a displacement map using world coordinates to your character and use the null as a reference object. Use the procedural called Value and give it enough falloff to just effect the shoulder blade area. The effect will be that the skin will slide over that area yet still be pushed out.

11 November 2002, 03:53 PM
Thanks for the idea Larry. I will check that out.

In doing my setup I learned a lot from Joe Justice's setup. However, there is one part I find confusing in his setup on this page:

Joe uses a falloff bone in both the upper and lower arm and then uses Follower in the Motions panel to have it track the bank channel of its parent. That just seems reduntant to me and I'm wondering if its my misunderstanding or did Joe not explain his setup correctly. I know what he is try to achieve, but it just doesn't seem like thats goind to do anything.

- ub52

11 November 2002, 04:13 PM
Never mind, I figured it out. It was my lack of understanding of what was going on :surprised .

11 November 2002, 07:02 PM
Thanks ub52 and Larry. You guys have been a great help.


11 November 2002, 12:38 AM
I've been playing around some more with the rig. I setup some IK which it did not like at all. The expressions I had setup were not getting rotation values after IK. So I searched around on Newteks list and found a reference to trying expressions in the Motion Options panel instead via the Graph Editor as there is a check box for After IK. I also saw a reference to using the old syntax. So I gave it a try and it works. I added 3 expressions to my shoulder bone, one for each of the rotation channels and then cut and pasted my expressions from the Graph Editor into the Motion Options Expression Modifier and I changed the notation as follows:

Example of bracketed: [ShoulderTest.RBicep1.Rotation.H]
Example of old style: ShoulderTest.RBicep1.rot(time).h

This worked great and it also works without having to have Auto Key on.

Also don't forget to deleted or disable the expressions in the Graph Editor.

- ub52

11 November 2002, 01:33 AM
Damn.. I'm never gonna get this stuff down.... Oh well practice makes close to insanity...

11 November 2002, 06:01 AM
Well, I guess I was a little eager to post my success. From what I can tell so far this is only working at frame 0. As soon as I move to a frame other than zero either the expressions aren't evaluating or they aren't getting passed IK driven rotation values. Back to the drawing board.:annoyed:


11 November 2002, 06:45 AM
ub52 try to use motion baker, its a motion option plugin. The trouble with expressions in graph editor is that it cant se inderect motion such as IK generated motion. When you use motion baker and select overwrite keys and the channels you want to be baked for the bicep bone. The motion data will become available as a keyframe data and the experession will get the motion requred. Also you can check the extres channel inside the motion baker panel wich will create a new group of channels for that bone called After IK. You are going to have to rewrite your expressions so that they use these channels instead. There is a nother thing about baking the motion you should know that:

Let say you you have one IK generated pose at frame 10 and another at frame 20, using motion baker will NOT automaticly calculate the inbetween frames as usual. You have to run a preview for it to calculate the inbetween frames.

Motion baker creates a keyframe at every frame where the IK is in motion but dont worry the keyframes will be overwritten or updated if you need to change the pose a frame 10. You only need to make a preview or run play the frames for it to be updated inbetween. I havent used the motionbaker that much so I dont know all there is to know about it but it helped me so far.

Hope this helps.

CGTalk Moderation
01 January 2006, 10:00 PM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.