Hand rig woes, mirroring wrecks it!

I’ve made a new hand and accompanying armature that I’m gonna slap onto an existing model. When I mirror the armature, though, things are never the same. If I Shift D and Ctrl M (X) while in edit mode of the armature, the axes go crazy. I can fix most of them, but not the thumb. If I copy and mirror the armature in object mode, I have to Ctrl A(Scal to Obdata) to invert the inside out look(don’t understand that as well), and parts are still not working right.Again, I can roll some bones to correct alot of it, but I can never get the thumb righted again. Once, I thought I’d gotten everything right , but as soon as I joined that new hand with the original hand armature, boom, thumb went stupid again. I’d appreciate anyone who could tell me how to work this out(hope I explained it well enough:). 3 days of frustration!

http://www.mediafire.com/file/x85ecuy3d2fgdd4/Handrig .blend

I do not know why you are duplicating your armature object to attempt this. Did you see that done somewhere? Stick with one armature object per character as much as possible (which is always).

So “how do I do this” I hear you asking…? Well there are several approaches I’ve seen. One is to place the cursor at the center of the rig, duplicate the bones, and then scale them negatively around the cursor. Another is to use the shift+e mirrored extrude option (with x-mirror option enabled on the armature settings) and extrude the bones mirrored as you work (yikes!). But I have not used either of these techniques in many many moons, as I have since discovered a new and supreme way to mirror bones that beats all other ways! A way so incredibly awesome that it has never before been posted online for fear that any and all who viewed it may go blind from over-exposure to pure awesomeness! Are you ready? Sunglasses on to protect you from the awesome-rays? :cool:

Let’s begin…

  • Finish the side of the rig you are working on, and name all of the bones with the proper .L / .R or _L / _R extension (as you have already done).
  • Select all the bones in edit mode that you want to mirror over and duplicate them with shift+d. Move them anywhere.
  • With those bones still actively selected press w>>flip names to auto-rename them to be the mirrored side (L becomes R)
  • Select inverse using the menu Select>>Inverse (I recommend the menu because I have had the program crash or simply not respond to the hotkey ctrl+i).
  • Enable the X-mirror option of the armature temporarily and then press ctrl+r and watch the bones jump to where they belong with the correct mirrored roll and orientation!

That is an awesome way of mirroring, thanks! I was trying to duplicate the armature in object mode because I was just trying everything to make it work. When all is well, the hands will join the rest of the body rig already done. Of course, when this is worked out, as it isn’t. I did exactly as you said and, wouldn’t you know, the thumb is still wonky:(. I think I’ve tracked down which bone(s) are to blame, but I have no idea how to fix it.

http://www.mediafire.com/file/qr7kq2ddy4hc6do/Handrig1.1 .blend

Well if by ‘wonky’ you mean that the thumb is not rotating at the angle you would like it to, you can fix that fairly easily by changing the roll of the bones in edit mode using ctrl+r. Just enable the axes display in the armature options so you can see the bone coordinates, and roll them so their axes face the proper directions.

You can also move the joints around to make sure the pivot locations are correct. For example, the base bone ‘thumb1’ should start much closer to the wrist. You can check on your own hand to see where the pivots should be (where the joints are).

The thumb can be tricky because it extends at an angle. But once you get the pivot points in the right place, and the roll angles facing the right direction it should behave properly for you.

hey me again,

I was playing around with the file a bit and I now understand clearly what problem you are referring to.

In a nutshell the problem is being caused by the limit rotation constraint on the finger spread control bone. But the problem isn’t directly from the constraint itself, the problem is from the orientation of the finger spread bone.

Open up that file and enable the axes display for the armature so you can see the bone orientations. Notice that the X axis of the finger spread bone is pointing in the same direction for each hand. That is the problem, they should actually be inverse of eachother.

To prevent this from happening in the future my recommendation is to make sure that the X axis is always used as the primary rotation axis. Since the finger spread control only rotates in one direction, that direction should definitely be an X rotation.

  • Select the finger spread bone for the right side, in edit mode
  • With X-mirror option enabled press ctrl+r and type 90

Now the Z axis for each side should be facing towards the fingers, and the X out the side - opposite eachother.

This now means the controller will rotate side to side, and I’m afraid you won’t be able to change that unless you want to completely reconfigure your setup. But that is up to you. For now, if you want to keep it as is you will need to manually reconfigure the constraint for the other hand, to reverse the limits from [min -20, max 8] to [min -8, max 20].

By the way, instead of using the limit rotation constraint to lock an axis (min 0, max 0) just open the transforms window (n key) and lock the unused channels in there by pressing the little lock button next to each unused channel. It is much cleaner that way. Also, enable the ‘for transform’ button on the limit constraint whenever you are using it on an animation controller. That prevents the transform values from extending beyond the limits, which means what you see is what you get.

Once you have done these things, you can go back and read my previous post because it will now be more relevant to your interests :eyebrowlift:

Dude… You’re easily the most helpful person on the internet. I’m gonna rework the controls heeding your advice along the way. It’ll only involve a few bone rolls(rotate on X!) and rethinking some constraints, so better to do it now than live with it later. 1st thumb joint moved, I feel stupid for that one. Thank you very much for giving me a course of action and all sorts of tips:D.

I decided the easiest route to get what I wanted was with action constraints(I love them now:)). I have fingerspread and fist actions on what used to just be the Spread controller. I was having problems with spreading and contracting, looked up a hand bones pic, and realized my mistake. Now the metacarpals don’t all converge in the same place, as well as one less thumb bone(Anatomy, always look at it first, he tells himself). I have an IK controller for the thumb now too as it’s the best solution to a saddle joint I could think of. Aaaand to top it off, I have both hands done with all of it in working order! Thank you very much again(!) , as I wouldn’t have figured all of this out on my own anytime soon if ever.

The finished product(until I think of something more, endless cycle:evilgrin:):

Looks good! I’m glad my advice worked for you :slight_smile:

Here are a few more tips I’ve learned for using the action constraint:

  • All constraint action constraint animations for all bones can be contained in the same action node. There is no need to create a new action node for each action set. I like to create an action node for all actions called “ARMATURE” which contains all action constraint animations for the entire armature, and the animator knows very clearly not to touch it.
  • Always set your key type to ‘linear’ for all action constraint animation. You don’t want any ease in and ease out here, leave that up to the animator. Otherwise you will end up doubling up that behaviour, and it leads to abrupt unpredictable speed changes and jerky motions while animating. To do this select all the channels in the action editor by hovering your mouse over the channel names and pressing ‘a’. Then press shift+t and choose ‘linear’.
  • Space your action keys generously and evenly, to give them greater and smoother range of movement (this does not determine their speed, speed is determined by the movement range of the controller, and the speed of it’s animation). I like to space them 20 frames each.
  • Always unhook the constraint action from the armature once you have finished adding to it. Just select the armature in pose mode with the action editor open. If you see the action visible in the action editor then it is connected to the armature. Make sure the ‘F’ is enabled to preserve the action, and click the little X to unhook it.

There may be more but that’s all I can think of right now. I’m glad you’ve decided to go with the action constraint, that is currently my weapon of choice as well :eyebrowlift: With it you could simplify your control setup much further, without losing any functionality.

For an example, you may be interested in checking out the way I built the hand controls on my latest rig if you haven’t already.

Cheers!