Best way to mirror a bone system in x-direction only while rigging?

I need the most reliable way to x-mirror a bone set while rigging for precision placement, but after the rig is finished, I want to control them separately.

(I had nightmare-problems in 2.49b when I mirrored complicated arm and foot rigs to the opposite side AFTER I had finished them, I’m not sure what and if such issues have been fixed).

BTW, I can’t figure out how that x-mirror thing works, what exactly does, what are its pros and cons, when somebody must use it and when to avoid it (wiki doesn’t help as usually, it has devoted only 4.5 lines, even this post is longer).

Any suggestions?

So it is not possible to x-mirror a bone system while rigging?

not in the same way that you would mirror a mesh, but you can create your rig on the left side and append a .L to the name of each bone ( hand.L, upper arm.L etc) then once you have everything in place(doesnt apply to central bones like the spine or head) then set your 3D cursor to the center and select all the left hand bones. duplicate (shift-D) then scale on the x-axis negative 1 (-1). then with the bones still selected press W and from the menu choose Flip names, and all the .Ls will be transformed to .Rs.

all you need to do then is to adjust the bone roll as changing the sides tends to flip the roll by 180 degrees. if you have X mirror selected in the Tpanel then grabbing all the left hand bones again and give then a shake before un grabbing them so they go back to their original positions , should set the right hand bones in the right place (though not always)

you can just hover your mouse over the bone roll slider in the N panel and click - on the keyboard ( not - on the numpad) for each bone and that should flip them back to the right direction

Thanks Small Troll for the response.

So it is not possible while rigging.
I just tested this on 4 bones with many constraints and they were mirrored properly. All I did is selecting them in object mode, shift+D, enter, s x -1 enter. I didn’t have to do anything else. I’ll see for sure after I finish the huge bone set.

That didn’t work. After the mirror, they were all renamed to *.001 then I had to select each one and change to pose mode, in order to use the “flip names” function, but the names didn’t change to *.R

BTW, is there a way to make ALL selected bones switch to either pose or object mode instead of changing the mode for each one???

if the bones are name with the suffix .L when you duplicate them blender automatically renames them as 001. once you flip them into position on the righthand side makeing sure they are all still selected choosing flip names from the W menu renames them to .R

from your questions i am wondering if you are adding your bones in object mode? when you tab out of pose mode it takes you out completly, not one bone at a time. if you add bones in object mode you are simply adding a new seperate armature in the same way that if you add a new primitive, it is a seperate object.

rigs need to be built in edit mode.

my previous post was written under the assumtion that Xmirror wasnt working for you for some reason, so figuring that you have been adding bones in object mode. i shall try and give you a quick over view of the rigging features

your first bone is added in object mode, you then need to go into edit mode to make your rig.
build your central core by extruding from the tip of the first bone and name each bone. central bones dont need a suffix, but you may like to have a prefix for your own organisation. lables like DEF for a deformation bone, IK, FK, for those respective functions, they have no affect on the bone but just help you to see what is what on your rig.
once you have your core, place your 3d cursor at the start point of your next bone chain. I.E. the arm.

now select X mirror from the tool bar
once the cursor is in position press shift A to add a new bone as you are still in edit mode, bones are the only thing you can add. then name it, this is where you would use the .L suffix. because of the X mirror you should also have your right hand bone appear automatically. make sure its name corresponds to its opposite, you may need to add the .R yourself on the first bone. once both bones are named the same but with their respective .L/.R blender will know that they are the mirrored bones of each other, not just random bones in the opposite bit of the mesh (you could have several layers of bones doing different things in the same position, only by making the names consistent can blender know which bones are related.)

extrude the bones for the arm and you will see the mirrored bones extruding as well. once you have your arm build name the bones on the left correctly as the extrude will simply add the 001 by default. then select all the right hand bones and press W to open the specials menu and select flip names and all the 001’s on the right will dissapear and the right hand bones will be consistent with the left.
repeat for the leg bones. and once the armature is built parent the bones to the mesh. (this is done in object mode) you can now tab into pose mode and deform your model
use the weight paint on the mesh to clean up the automatic weighting

next go back into edit mode and repeat the above steps for building the IK/FK control bones ( except these are parented to the deform bones not the mesh)

hope this makes sense,

That was a …subtle detail that I missed, so you saved me from adding hundreds of little armatures LOL!
Also now the same rig can be made faster, which even behaves better too and the bones are far more organized, thanks a ton!

So after your last post, I did some extensive testing to find out what works and what doesn’t and I realized that in rigs, the bone name is what counts, so constraints can still work between the bones of the same armature that have the same object and data names (I finally figured out the armature concept).

Actually, I found out that .L won’t work, they must be _L for the “flip names” function to work.

It turns out that your assumption was correct. The bone system I wanted to mirror is not a simple human rig, but a complex mechanism, which has hundreds of bones and even more constraints.

Using the x-mirror while rigging I noticed the following:

  1. Constraints are NOT mirrored (huge turn-off).
  2. Only bones extruded with Shift+E get mirrored (which can be unparented if necessary) and Shift+A doesn’t mirror the added bone -it took me sometime to find out about those and I had to search this info in video tutorials (To developers: Why not mirror everything in order to make the whole process universal, faster and more convenient?)
  3. Auto-naming didn’t work properly. The first extrusion was named _L and _R and the next ones were named .001, .002 and so on.
  4. Weird problems in extrusion, like two bones extruded simultaneously out of one end(BUG!)

So, the best method for me was the after-rig mirror method (which mirrors constraints too) with no problems so far and I finally managed to have the bones properly renamed with your instructions (except that it doesn’t rename the object and data names, but that’s only two names to change). Thanks again!

no, you have it right, the x mirror funtion is pretty much limted to mirroring the translation options (move ,scale ,rotate)
i have never seen _L/_R suggested as bone names. i wonder which version of blender you are using?

the auto naming is designed that way for simplicity sake i guess, the bones remain mirrored though. until you name one side to the proper name for your rig, then you have to do the whole selecting the r-hand side bone and doing the flip names thing. which really is better than having to retype long and descriptive names over and over!
wierd extrusions? ya, BUG!

personally i very rarly use the X mirror for building the rig as it is way simpler to build half a rig and duplicate it.

2.67b - I tried again and this time it worked with .L names too, so I cannot isolate the problem (if any) yet, but I remember I had a similar issue with 2.49b. It might be something I did wrong, or it is triggered under some specific conditions.