I’ve got a mesh that is rigged and split up into multiple vertex groups, think kind of like a robot. When I move a bone, I want one group to move at 1.0 weight (which currently works fantastic), and I want other groups to move at 0.5, 0.4, 0.3, 0.2, and 0.1. I even select the vertex, press NKEY and set the weight to 0.1, but that particular vertex still moves like it’s 1.0. I’ve also tried changing the weight on the vertex group and reassigning. Is there a setting I’m missing somewhere?
P.S. I do not want to use weight paint. This character is robot-like and needs rigid, not organic, movement.
Any one vertex needs at least two weight values (i.e., it belongs to more than one vertex group) in order to work at less than full influence. Put simply, this is because Blender normalizes the weights when the animation is run – total weight on any one vertex is adjusted to equal 1.0. with the different weights adjusted proportionally. So if only one weight is applied to a vertex, it will always act as if it has weight = 1.0.
One way to insure that the weights act as expected is to add a value for a “neutral” bone – one which deforms but does not actually move. Then any other weights applied from bones that do move will be relative to this base weight.
Thanks, although I’m a little foggy on how to do this exactly. Right now the vertices are assigned to two groups - one being the vertex group and the other being the bone group. Even if I set both groups to have a weight of 0.1, the vertices still move like 1.0. Are there any video tutorials out there that cover this WITHOUT weight painting?
You can animate objects as objects… so if every piece were a different mesh, you could move them separately and key them. You can also use envelopes or deform meshes… but those are no less “organic” than bones
You mention you want to have “other groups to move at 0.5, 0.4, 0.3, 0.2, and 0.1.” Generally this means that for any one bone, different vertices or groups of them will move differentially depending on the weight assigned. If the groups given these differential weights are all part of the same mesh you can get an “organic” movement, with the mesh likely stretching to some degree due to the various influences. If you want rigid (robotic) motion, then it seems you’d want a group of individual bones, each fully-controlling a single part of the model, a part that is a separate mesh.
If you are instead looking for a single bone to move separate mesh parts, and for each part to move at a slightly different “rate”, then you’ll need to assign weights for at least two bones. One is a “static” bone that does not move. The other let’s call a “dynamic” bone. If the dynamic bone is to control a mesh 100%, then give that mesh a weight for 1.0 for the dynamic bone’s vertex group.
For a mesh to be influenced only 50% by the dynamic bone, you need to assign the dynamic bone weight to 0.50, and also assign 0.50 to the static bone weight, in the same mesh. This insures that the dynamic influence is kept proportional when Blender normalizes the weights internally.
This can be continued for other meshes: if dynamic weight = 20% (0.20), then static weight should = 80% (0.80) – total weight on any vertex still = 1.0 (“normalized”), but the dynamic bone has less influence than the static bone.
To keep these differential weights from getting “organic,” just assign them to all the vertices of any one mesh, either in the Object Data>Vertex Groups section, or in the Edit Mode: Properties Panel>Vertex Groups listing. This will avoid any painting of weights.
I hope this is relevant to what you’re wanting to do, which isn’t 100% clear to me.
Think about the back of a pill bug. Made out of 5 different quarter-spheres put together to make the ‘shell’. When the bug moves its head bone, I want the top shell piece to move at 0.5 weight, the next one down to move at 0.4, next at 0.3, and so on and so on to give the impression of a ‘twist’. What’s the best way to approach this?
Still not sure exactly what you’re trying to get in terms of actual motions, but in order to have a single bone contribute to the operation of all 5 shells, you could do differential weighting as I’ve described in post #5, or, and this is the approach I would take, have each shell have its own bone that controls it 100% (weight for that bone = 1.0), then use constraints to have the head bone drive the operation of the shell bones. By varying the Influence value of each constraint you can vary the level of control the head bone has over each.
Example: Shell01 bone has a Copy Transforms constraint with the Head bone as the target, Influence 0.50. When the Head rotates 30deg in X, Shell01 rotates 15deg in X. If Shell02 has the same kind of constraint, but at 0.3 influence, then Shell02 will only move 30% as much as the head – AFAIK Influence is linearly proportional. For shells under partial constraint (Influence <1.0), other constraints can be used as well, or manual adjustments can be made to the various transforms.
The constraint to use, and how they are set up, depends on the response the shells should have to the head, but they are very flexible, allowing for a wide range of control options.
Yeah, I get what you’re saying, although as a test, I changed the weights of the head to 0.5, even checked the color was green with weight paint, and the head still moves at a 1.0 ratio to the head bone when I enter pose mode and rotate the bone. I must be just missing something really stupidly simple here. Any thoughts?
Look, I don’t know how many times I have to say this – if only one weight is applied to any vertex, it will act as if that weight = 1.0 no matter what the actual value. So to get proportional influence, you need to have a minimum of two weight values on any one vertex. If you want only one bone to control a vertex (or vertex group), but you want that control to be proportional (not 100%), then you have to add weight for a bone that does not move as well as for the bone that does. The static bone weight acts sort of like a “brake” on the dynamic bone weight, keeping it proportional. The static bone needs to be set to Deform like the dynamic bones, but because it never moves, it doesn’t cause any vertices to move. Only the dynamic bone does that.
But the constraints approach is a lot more efficient and easier to implement, though it may be puzzling at first if you haven’t used constraints before.
Sorry I’m being so frustrating, but thanks for your patience.
I created a ‘Dummy’ bone separate from the skeleton and now translation works properly, however during rotation, the shell kind of shrinks in on itself, getting smaller on the X and Y axii as it is rotated. Googling says that this is an issue when you have vertices assigned to more than one bone. I just want it to rotate slower than the head! Can’t this normalization !~@#$ just be turned off??!?
Forget a 2nd bone for deformation. What you need is 1 bone to deform (your initial bone) and a new one to control.
Create a 2nd bone on the exact same location. Uncheck Deform in Bone properties.
On the first bone (which deforms) put a ‘Copy Rotation’ bone constraint and set the influence to 50%. The target is the new control bone.
Place the deform bone in a hidden layer.
Perhaps you might need to change the bone parenting of those 2 bones. Maybe add a ‘Copy Location’ on the deform bone.
Yeah, Sago, that’s what I was suggesting with the constraints, for more automatic control based on the head transforms. But the O.P. seems to insist on using proportional weights, so I told him how to do that. I agree it’s not the best way for his purposes, but it is the way to get proportional weighting to work as he seems to want it to, though maybe not exactly as he expected.
@ Spaddlewit: Normalization isn’t the problem, it’s your insistence on using proportional weighting for this task. One weight value on a vertex would be fully controlling even without normalization. Here’s an analogy:
Sam_Bone is a gangster who heads up a 'hood gang, the Verts. He’s not a really strong leader, not 100% ruthless, doesn’t throw his full weight around at every opportunity. The local cops call him second rate, maybe a 5 on a 10-point scale. But since he’s the only game in town, the Verts follow him absolutely.
Along comes Jangle_Bone, who’s a mean mofo that the cops rate about 8.5. He starts influencing the Verts and they move to his tune faster and farther than for poor ol’ Sam_Bone. Sam don’t rule the 'hood no more, though he does still carry some weight. Jangle_Bone tolerates him 'cause then the 'hood moves better than ever.
Yeah, I already get the normalization concept, chipmasque, but thanks for the colorful analogy. (I’ve done a lot of work with normalizing vectors) I think most of my issue just stems from learning to use Blender.
I think your idea of making a separate bone is best, and I gave it a Copy Rotation constraint. Seems to work GREAT, but for one small snag - when I apply the constraint, the shell piece instantly moves. I’m guessing this is due to the shell piece or head previously being a UVSphere that I inserted and then rotated and deleted vertices from, and the original rotation information is being remembered by blender.
For many of the constraints like Copy Rotation & Copy Location, there is an option button called Offset that allows you take the initial orientation of the constrained object into account. You can give a local transform to the constrained object that will be the starting point for any constrained transforms.
Glad you have it working better. A general rule to keep in mind is that if you want rigid rotation, binding the mesh completely to the bone is best, and then you can use methods like constraints that control that bone instead of the mesh itself. With partial Influence values you can have more than one constraint control the same bone. This allows for more complex levels of interactivity & control.
One more snag… Everything is awesome when I move the head bone, but if I move a bone that is a parent of the head, the shell doesn’t follow. What constraint can I use to have it follow the head in all cases?
It’s appearing as if I want to parent bone Shield1 to Head at 0.5, then Shield2 to Shield1 at 0.5, Shield3 to Shield2 at 0.5, etc. (less influence as you go down the back). Tried that and set the weight of the Shield bones to 0.5 each but I think I’m running into the normalization again. What vert groups should be parented to which bones?
Copy Rotation constraint – works great when I rotate the Head bone!
Whoops! But when I rotate a parent of the head bone, it doesn’t follow the head…
Tried parenting Shield1 to Head, Shield2 to Shield1, etc. with a weight of 0.5, but it acts like a weight of 1.0. Since all verts have the same weight on each Shield bone, I would think I just need to set a weight on the bone. If Head moves, Shield1 moves half of Head, Shield2 moves half of Shield1, Shield3 moves half of Shield2, etc.
First question: No way to tell without knowing how you’ve rigged everything, how the armature is constructed, and what constraints you are now using. Would also need to know how you want the model to move, compared to how it is moving. General help is one thing. Thoroughly troubleshooting your setup from a slim description and a few screenshots is quite another.
Second question: The answer to the first question also applies somewhat, since I can’t see what’s actually going on, but if you have separate bones for each shell, then those bones should control that shell completely for rigid motion. If you’re using constraints, you shouldn’t need to use proportional weighting, so give the shell meshes weight 1.0 for their respective shell bones, applying this to a single vertex group named for the controlling bone. Then use the constraint setup to govern how these bones & their shells move.
Also, you’re not “parenting” the bones at 0.5. Parenting is all or nothing, cannot be weighted. If you’re trying to use parenting in this fashion then that’s likely a problem. Maybe you mean that the bones are constrained and that the Influence is set to 0.5, but unless you describe it that way, there’s really no telling how you have things set up.
First picture has each shell with its own bone. The shell bones are parented to nothing and control each shell 100%. Copy Rotation constraint is applied on each, with the Target set to be the Head bone. Movement is as desired when the head bone is moved, but when a parent of the Head bone is moved, the shell does not follow the rotation of the head. Do I need to have another Copy Rotation on each Shell piece that also Targets any desired parent bones of the Head?
I understand that grasping my desired movement may be difficult. The first image might help give you a better idea. His ‘back’ is made of flexible plates, kind of like pieces of armor. Think of how a pill bug’s back might respond to his body movement if he was anthropomorphized.
They currently do.
Yep, that’s how I have it set up. The problem is in how the constraint is not causing the shell to follow the Head bone when a parent of the Head is moved.
What I was describing was this:
If Head bone rotates 90 degrees, I want Shield1 to rotate 45 degrees; Shield2 to rotate 22.5 degrees, Shield3 to rotate 11.25 degrees, etc. I thought doing that and also parenting the Shield bones to the Head might fix my issue of the shield not following the Head bone when one of the Head’s parents are moved.
Again, I can’t say for sure unless I could look at the rigging in detail. It sounds like everything except the parenting part is as it should be. Which bones should be parent of which other bones depends a lot on how you’ve got the armature designed, which isn’t easy to determine from your images. Maybe post the .blend, or a stripped-down version of it that has only the relevant objects?