I can't find the bone mirror option.
When I used Blender about two years ago the mirror option was tucked away in the rig/object panels, but now I see no obvious options.
How can I mirror bones in 2.7+?
Blender Stack Exchange is a question and answer site for people who use Blender to create 3D graphics, animations, or games. It only takes a minute to sign up.
Sign up to join this communityEnter edit mode then hit T to open the tools panel. under options, you will find a check box that says X-Axis Mirror. Check it.
This option will mirror actions performed on bones across the X axis. In order to set up a rig, simply give the bones a left or right side suffix (e.g. .R/.L, _R/_L or _right/_left…) and make sure the rest of the names match. Bones that are centered do not need a suffix, since they are not being mirrored.
Blender 2.79b
I've just discovered that if you mirror with the x-Axis option in the tool box, then you have to name each bone manually for both sides. If you are rigging a human, a humanoid character or an animal, the best way is NOT to check the x-Axis option but follow the steps below:
You are done!
...you have to name each bone manually for both sides...
Yes, that can be a big bother,
if it turns out you imported a G2f character
from DAZ,
via .fbx or Collada, and, in Blender,
you discover that the DAZ armature did not come over flawless.
In my case, I find that I need to adjust the finger bones, which,
after enough diligence, I can achieve on, say, the left hand;
but then, I want the computer to repeat all that fine-tuning
on the right hand, automatically.
If I try the standard Blender options, nothing happens, because
the DAZ armature for G2f (ditto V4) follows the convention that
the names of left and right bones use a prefix of l or r.
Correction: V4 followed that convention; the Genesis 1,2,3 figures
use a prefix of “Left ” and “Right ” as shown by DAZ Studio;
however, the transfer process, via Collada or via .fbx,
makes it so that, from the Blender side,
what you see is prefix l or r,
and ditto for the associated vertex groups.
Of course, for the sake of symmetrizing,
you really don’t want to rename scores of bones,
and then be obliged to rename them again,
so that their names match the vertex groups!
Occasion to dust off some Python:
#
# Given: selected armature, with left/right bone names starting with l,r
# (as is the case of DAZ Victoria 4 and Genesis2) or L,R
# (Blender assumes they end in .L,.R)
#
# Does: symmetrizes armature, by copying coordinates of head,tail of each left EditBone
# to corresponding right EditBone, but with x-axis mirrored, and copies roll with opposite sign.
#
# Author, Tom Telos, presents this in June 2017 to the Public Domain, as experimental code, no warranties.
#
import bpy #, bmesh , math , mathutils
Arm = bpy.context.scene.objects.active
if (Arm.type != 'ARMATURE') : raise RuntimeError("Please select your armature; quit().")
bpy.ops.object.mode_set(mode='EDIT') #'EDIT_ARMATURE' not available, implicit.
#print( "Armature name: " , Arm.name , '\n' )
lNames = []
rNames = []
for EdBone in Arm.data.edit_bones :
NamePrx = EdBone.name[0]
if (NamePrx == 'l' or NamePrx == 'L') : lNames.append(EdBone.name)
if (NamePrx == 'r' or NamePrx == 'R') : rNames.append(EdBone.name)
#print( lNames , rNames , '\n' )
NamePairs = []
for iNamePair in range( len(lNames) ) :
lName = lNames[ iNamePair ]
rR = 'r' if (lName[0] == 'l') else 'R'
rName = rR + lName[1:]
if rName in rNames : NamePairs.append([ lName , rName ])
#print( NamePairs , '\n' )
for NamePair in NamePairs :
lName = NamePair[0]
rName = NamePair[1]
Arm.data.edit_bones[rName].head = Arm.data.edit_bones[lName].head
Arm.data.edit_bones[rName].head[0] *= -1
Arm.data.edit_bones[rName].tail = Arm.data.edit_bones[lName].tail
Arm.data.edit_bones[rName].tail[0] *= -1
Arm.data.edit_bones[rName].roll = - Arm.data.edit_bones[lName].roll
#
bpy.ops.object.mode_set(mode='OBJECT')
thank you so much for the script, it helped me a lot :) I made few adjustments to it: to be able to use any pre-defined part of the name to spacify the Left and Right part: in my example: I am using "LT" and "RT" (not my choice though)
here is the modified script:
#
# Given: selected armature, with left/right bone names starting with l,r
# (as is the case of DAZ Victoria 4 and Genesis2) or L,R
# (Blender assumes they end in .L,.R)
#
# Does: symmetrizes armature, by copying coordinates of head,tail of each left EditBone
# to corresponding right EditBone, but with x-axis mirrored, and copies roll with opposite sign.
#
# Author, Tom Telos, presents this in June 2017 to the Public Domain, as experimental code, no warranties.
#
# Updated by Fouad jeniani October 2018:
# to: support any predefined Left Right text anywhere in the bone name
# for now user has to enter manually the names in scripts
#
import bpy #, bmesh , math , mathutils
Arm = bpy.context.scene.objects.active
if (Arm.type != 'ARMATURE') : raise RuntimeError("Please select your armature; quit().")
bpy.ops.object.mode_set(mode='EDIT') #'EDIT_ARMATURE' not available, implicit.
print( "Armature name: " , Arm.name , '\n' )
lNames = []
rNames = []
for EdBone in Arm.data.edit_bones :
if EdBone.name.find("LT") != -1 : lNames.append(EdBone.name)
if EdBone.name.find("RT") != -1 : rNames.append(EdBone.name)
print( lNames , rNames , '\n' )
NamePairs = []
for iNamePair in range( len(lNames) ) :
lName = lNames[ iNamePair ]
rR = 'RT'
rName = lName.replace("LT","RT")
if rName in rNames : NamePairs.append([ lName , rName ])
print( NamePairs , '\n' )
for NamePair in NamePairs :
lName = NamePair[0]
rName = NamePair[1]
Arm.data.edit_bones[rName].head = Arm.data.edit_bones[lName].head
Arm.data.edit_bones[rName].head[0] *= -1
Arm.data.edit_bones[rName].tail = Arm.data.edit_bones[lName].tail
Arm.data.edit_bones[rName].tail[0] *= -1
Arm.data.edit_bones[rName].roll = - Arm.data.edit_bones[lName].roll
#
bpy.ops.object.mode_set(mode='OBJECT')
I hope it would be of some help :)