Download

3DS Max Bone Link Constraint Help

I’m creating a rig for my characters face using CAT. I have bones set up for the lips; and I linked the lower lip bones to the jaw, as well as the bones for the sides of the lips. Is there a way to set up “percentages” so when I move the jaw bone, the side lip bone only moves at 10% instead of 100%? Basically I want to constraint the amount of movement to give a more realistic animation without having to manually adjust the side lip bones when animating. In the example below I rotated the jaw bone down.

Thanks!

Here is a screenshot of the default face rig in which the jaw bone has not been rotated.

There’s probably a few ways to do this but I’ll show how to deal directly with controllers, which is probably better information for future use of controllers.

Select the bone you want to control, go to the Motion Panel (1) then expand Assign Controller (2) select the Rotation Transform (3) and then click Assign Controller (4)

01_AssignController.jpg

In the list of controllers that open up, choose the Rotation List and click OK. The rotation list allows you to stack some controllers. You’ll see the transform there changes and adds an Available option to the rotation transform.

917a7d99a64390e061522914c2424f9e08cc3766.jpeg

So now you click on the Available slot and then add an Orientation Constraint. So this controller is what you ultimately need to do the weighting between bones. It can be added in a short cut way, but it’s good to know how these things work. So, the list is purely there to allow for stacking which you’ll see why that is a good way to set it up. You could actually just add the orientation constraint and that’ll work on it’s own but I’ll show why it’s good to stack it.

03_OrientationConstraint.jpg

On the rotation list you can now see the Orientation Constraint in the list and when you double click on that you can now get the options for the orientation constraint. Now you can add the bones and when you’ve added the 2 bones you want to weight between (probably the 2 lip bones from top and bottom) you can pick them and type in weights for them. By default it would just be 50/50 weighting. You can actually put more than 2 if you wanted to as well.

You’ll see there’s an option to Keep Initial Offset. This is useful but only really works if you pick one bone to control with. This is mostly used when you set up a rig and you did not have your controlling object match your bone. but either way, this is why I use a list here because when you weight the bones, you’ll see now the bone orientation is based on the weights, so it’s no longer rotated like it used to be, and you can’t manually rotate it.

d70cdc52b3488699e5ece7718efb45fa4fb06e3e.jpeg

So now to get control back you can click on the Available slot and click Assign Controller and pick Euler XYZ. This will add the Euler controller into the list. Euler XYZ is the default rotation controller, it’s what allow you to grab and rotate something.

05_AddEulerController.jpg

You’ll see the Euler controller in the list now and you can double click on it to make it active.

839d045400c07b3c61091d0f39d52b98272eae83.jpeg

Now you can grab and rotate the bone again manually, so you can rotate it back to it’s original position. Because of the list, the bone will also be controlled by the weights you have set on the Orientation Controller. So you have the auto rotation from the weights plus the manual control on top of that.

You’ll see it’s also possible to weight the controllers in the list, so you can see how this can get fairly complex and powerful as a means to set up controllers for rigging.

So, there are other ways to do this, other short cuts to get things in there but it really is good to have a bit of understanding of how the controllers work. So, that’s why I wanted to show this method, though it’s a bit more time consuming. When you know how this works, then using the shortcut scripts will make more sense if you need to make modifications after the fact.

Thanks for the write-up! The problem is that I’m using CAT, so I’m not sure how to expose those parameters.

Sorry man, slight oversight… :slight_smile:

In CAT you can do the same but first you have to at least add an Animation Layer, then you can get access to the controllers and add them the same way I showed. Then to be able to get access to the actual controller options to pick the bones… etc. You need to toggle on animation mode.

I have some minor problems. Originally I had the lower lip bones linked to the jaw bone which wouldn’t allow me to select them when I was in the Orientation Constraint roll-out. So I parented the lower lip bones to the head bone. That allowed me to select them. So I chose the lower lip bone and added an “Add Orientation Target”. That added it to the list but it will not allow me to change the weighting.

Just to test it out, I also added the Euler XYZ and set that as active. When I rotate the jaw bone on the Z axis locally, it rotates side to side instead of up and down, and the lower lip bone which has a 50% default weighting doesnt move at all.

Any thoughts? Thanks for your help!

You’re currently doing the weighting on the wrong bone. From what I understand you want to weight the corner of the mouth between the lips so when you open the mouth the corner also reacts. So you need to apply the weighting on that bone.

Then also, the reason you can’t change the weight or rather the reason why it seems like you can’t is because with only one bone in there, it can only have 100% weight on that one bone. You need at least 2 bones to share the weight and then you can bias it to one or the other.

So here you’ve got bones 1, 2 and 3. You set up the weighting on bone 2, and have bones 1 and 3 in the weight list.

bone_weights.jpg

But I see now in your new shot the way your bones are used are not as rotating control but rather position. The jaw rotates but the lips use position, correct?. Before I thought you just see the tip of the bone used as a rotator to control the lips. In this case the orientation constraint won’t work but rather you need to set up a position constraint. So it’s done in the exact same way, accept you do it on the position transform.

So, you would use a Position List and then a Position Constraint to weight the bone, and for the controller to bring back manual control, you would use a Position XYZ. So you see the setup there is exactly the same but just for position in stead of rotation.

Anyway, if you get stuck on that I can help you out, but the point is that you need to apply the weights to the correct bone. You want to control the corner of the mouth with 2 other bones, that’s the goal. So you setup the weighting on that corner mouth bone.

So having the weighting done on the correct bone shouldn’t interfere with your original linking of the bones as well.

What I’m trying to accomplish is that when I move the jaw bone the lower lip center bone is at a 100% weighting, the two bones next to it are at 50%, and the two side mouth bones are at 20% as an example. So when the jaw bone rotates down you get that “O” shape to the mouth. So you’re right, the mouth bones needs to change it’s position, not rotation.

I’ll give it another shot, thanks again!

So in this screenshot I want to rotate #1; have #2 be weighting 100% to #1, have #3 be weighted 50% to #1, have #4 be weighted 20% to #1, and have #5 be weighted 10% to #1.

So how do I get those constraints to use bone #1?

Ok, yeah, the setup you’re after is pretty much what I explained, but your bones that you choose for weighting is obviously the important part here. It’s not a complex setup. I’m going to try and just say here what should be weighted to what, and see if you get it working like that, and basically take it from there.

So, first thing is to make sure all the linking is correct. It’s pretty simple but needs to be a specific way since you need some anchor points for the blended bones to work from.

First, I’m going to call that one un-numbered bone in the upper middle lip, I’ll call that Bone 0. It’s also going to be used quite a bit.

  • So, for linking, link all bones, including Bone 0 to the head. But link Bone 2 to Bone 1. The way this will end up working is Bone 0 is the “head” anchor and Bone 2 is the “jaw” anchor and the rest of them needs basically a “static” parent, which is the head.

  • Bones 0 and 2 are now going to be your anchors, they’re not getting weighted, for every other bone you are going to set up the Position Constraint. So you go and add the Position List, Position Constraint and Position XYZ to Bones 3, 4 and 5 on both sides.

  • Now, for the weighting on all Bones, 3, 4 and 5, on both sides, you will add Bone 0 and 2 to the weight list.

  • On each bone now you can type in the desired weights. For example, Bone 3 will actually need no change, it will automatically be weighted 50/50. Even though it’ll say 100/100, that translates to a 50/50 weight between the two bones. But Bone 4 you want on 20% towards the jaw, so you would type the weight 20/80 with 20 on Bone 2 and 80 on Bone 0. Then of course Bone 5 will be 10/90 the same way. You may find you wanna tweak those weights and an easy way is to open the jaw and just tweak them and they will shift as you tweak and you can get the exact position you want.

What this will do though is move those bones into those weighted positions, so they won’t be where you placed them anymore, they will be in a new location, based on the weighting information. This is where you use the Position XYZ you added to the controller list, to just move them back to their original locations, based on the jaw being closed, the original pose. So they will still be weighted, but you can place them back correctly and when you then open the jaw, the weights will take care of the positioning. While animating you can also then add manual adjustments on top of the weighted positioning as well having that Position XYZ in the list.

Hope this helps more towards your actual goal than my other attempts… :slight_smile:

Now it’s all making sense! My only problem is getting the bones to be positioned to their original starting points. Right now all the bones are aligning to the center. You mentioned using a Position XYZ added to the controller list which I did, bit it did not moves the bones back to their original position. Thoughts?

No, it doesn’t just move it back to the original position, it allows you to do it manually.

So, usually you’d be creating a rig to control the bones and just snap the rig on the bones. But in this case, you are rigging the bones so you have to move the bone back after setting up the weights. If the bones have very specific placement as you originally placed them, easiest thing is to snap some dummy objects to the bones based on the original positions, as place holders. Don’t link them or anything, just snap their positions. Then when you’ve weighted the bones, snap the bones back to the dummy objects. The shortcut, “Shift A” is for quick snap and pretty useful in these situations.

You can do this after doing the whole setup since you can go back on that list to the top Position XYZ, which is your original placement. This will allow you to get that original placement to place the dummy objects. This is the cool thing about the list controller. It’s like a stack system you can go back and forth. Otherwise you can simply move them into place if it’s not that big of a deal to get them absolutely perfect to the original placement.

When you’re out of Animation Mode the bones are in their original place, so I suppose I could create some dummy objects and snap them to those positions. Digital Tutors had training on how to do something similar, but they had quite a few steps so I thought there must be an easier way. I really appreciate your help on this! Thanks again!!

No problem. I know it seems a bit complex to get some simple stuff to happen but I tried to show a way that teaches you something, rather than pushing some buttons that magically make something. It really is worth knowing how the controllers work. It’s not complex at all, but you can see, not knowing that, you’d never “guess” what’s going on there.

With the re-alignment, it kinda slipped my mind that you may need to snap it back or whatever. I kinda assumed you’d just manually move it since it probably doesn’t need a vertex perfect re-alignment. But I use this dummy snapping trick a lot to “save” positions for later use.

I definitely can see a lot of other uses for this as well. I appreciate the thorough explanation!

Maybe I can ask you another question… :slight_smile:

When animating in CAT, how do I get individual control of the center top and bottom “anchor” bones (0 and 2)? Lets say Im trying to animate a smile; when I try to translate either of those two, the constrained bones move as well.