Hi everyone, I’m trying to put together a single(!) rig that drives multiple characters. Each character uses the same base mesh, and I can switch between them using driven material nodes and shape keys etc., however each character has different proportions. Obviously, that’s a problem because if I wanted to switch between characters at the moment I’d have to go into edit mode and reposition the bones… completely impractical.
So does anybody know of a way to drive the actual head/tail values of the bones in a rig?
Obviously the neatest way to do that would be to have blendshapes available to an armature object, but that’s not possible so far. I’ve tried adding drives to the values but that doesn’t seem possible, at least throught GUI (I haven’t looked at doing it with a script), and I’ve looked for some sort of hook modifier-esque setup with no luck. If this is impossible, could someone confirm as such?
Of course, I know I could do this with one rig for each character but I want to try something more advanced, see if it’s possible. Setting things up this way would mean that later if I want to make a change to all characters, say add or tweak a corrective blendshape, I can do it efficiently.
To change the origin of a bone, sandwich in a new parent in same orientation (incl. roll), give original bone copy local->local position, invert all axes. Rotate the new bone instead of the old bone; move the new bone to change the origin of rotation without deforming the mesh, just like moving it in edit mode.
“Moving tails” shouldn’t be something you have to do. Tails don’t really mean anything in terms of straight deformation.
You don’t want blendshapes for armatures. But if you did, they’re possible. Copy position constraints from vertex groups on a mesh object, then shapekey that mesh.
Hi Bandages, thanks for your response. I’d like to clarify that what I’m trying to do does not take place in pose mode, therefore constraints and offset bones can’t be used. This would mess up the model as the mesh is already contrained and should not be altered in the process.
To re-iterate what I’m trying to acheive is changing the rest position of the armature, not the pose space location of the bones. Please let me know if there’s some way to add bone constraints in edit mode that I’m not aware of - ie, constraints that affect the head/tail transforms of the bones, not the pose values - the bone constraints tab is, of course, missing in edit mode.
Why are you trying to change the rest position of the armature? Is it in order to make an armature with limbs that rotate about differently placed heads, as you would have with characters with different proportions? You don’t have to change the rest pose of the armature to do that, and what I said to do would do nothing to change the mesh of the armature-deformed object… Is it to recalculate autoweights? You would have to change the edit mode position to do that. (However, you can always apply a constrained/posed/driven/whatever position to a rest position.)
My apologies Bandages, the first time I followed your method I didn’t do it properly as I was unclear on which bone should be parented to what. I’ve now got it to work and it’s really quite clever, thank you. I didn’t imagine that was possible in pose mode.
If anyone else is confused here’s how I got my head around it: you’re using an offset bone to create a new “dummy” rotation centre around which your deform bone will rotate. The inverted copy location contraint essentially “undoes” any translation you add to the offset bone, then since it’s a parent of the deform bone, rotating it still moves the deform bone properly. Very nice. Naturally this won’t work for bones which will be translated by the animator, but that can be done with additional offset bone.