No puedo encontrar la opción de espejo de hueso.
Cuando usé Blender hace aproximadamente dos años, la opción de espejo estaba escondida los paneles de plataforma / objeto, pero ahora no veo opciones obvias.
¿Cómo puedo reflejar huesos en 2.7+?
Respuesta
Ingrese al modo de edición y luego presione T para abrir el panel de herramientas. En Opciones, encontrará una casilla de verificación que dice X-Axis Mirror .
Esta opción reflejará las acciones realizadas en los huesos a lo largo del eje X. Para configurar una plataforma, simplemente asigne a los huesos un sufijo del lado izquierdo o derecho (por ejemplo, .R / .L, _R / _L o _right / _left …) y asegúrese de que el resto de los nombres coincidan. Los huesos que están centrados no necesitan un sufijo, ya que no se están reflejando.
Comentarios
- Eso es genial. Nunca me di cuenta de esa pequeña pestaña. Él ‘ s solo ¡Esta especie de esconderse en silencio no es ‘ l! TY
- Las pestañas me causan un sinfín de dolor … Se supone que solucionan problemas de usabilidad … 🙁 nunca sucedió.
Respuesta
Blender 2.79b
Acabo de descubrir que si esperas con la opción del eje x en la caja de herramientas, entonces tienes que nombrar cada hueso manualmente para ambos lados. Si estás manipulando un humano, un personaje humanoide o un animal, la mejor manera es NO marcar la opción del eje x, sino seguir los pasos a continuación:
- Modo de edición, seleccione todos los huesos para reflejar en un lado (brazo, pierna, dedos de la mano )
- Asegúrese de que el nombre de cada hueso que se va a reflejar termine con .L que significa IZQUIERDA (por ejemplo: mano. L). ¡Esto es vital!
- Asegúrese de que el cursor esté centrado (Mayús + C).
- Su malla también debe estar centrada para que el cursor se coloque en la base de la misma
- Presione W y seleccione Symmetrize (la duplicación es automática)
- Sus huesos ahora están reflejados y los nombres automáticamente actualizado con extensión .R (que significa derecho).
¡Listo!
Comentarios
- O (en v2.79) puede usar W > Symmetrize, eso sí todo lo anterior a la vez.
- Cuando pruebo la opción Symmetrize, parece duplicarse junto con el eje Y, y no con el eje X. Al principio pensé que esto podría deberse a que mi equipo no estaba ‘ t orientado correctamente con la parte frontal del personaje mirando a lo largo del eje Y (como antes estaba mirando hacia abajo del eje X), pero incluso después de rotar todo, sigue simétricamente en la dimensión opuesta a la que quiero. ¿Alguna idea?
Responder
. … tienes que nombrar cada hueso manualmente para ambos lados …
Sí, eso puede ser una gran molestia,
si resulta que importó un carácter G2f de DAZ,
a través de .fbx o Collada, y, en Blender,
descubre que la armadura de DAZ no resultó impecable.
En mi caso, encuentro que necesito ajustar los huesos de los dedos, lo cual,
después de suficiente diligencia, puedo lograr en, digamos, la mano izquierda;
pero luego, quiero que la computadora repita todo eso ajuste fino
en la mano derecha, automáticamente.
Si pruebo las opciones estándar de Blender, no pasa nada, porque
la armadura DAZ para G2f (ídem V4) sigue la convención de que
los nombres de los huesos izquierdo y derecho usan un prefijo de lo r.
Corrección: V4 siguió esa convención; las figuras de Génesis 1,2,3
usan un prefijo de «Izquierda» y «Derecha» como lo muestra DAZ Studio;
sin embargo, el proceso de transferencia vía Collada o vía .fbx ,
hace que, desde el lado de Blender, lo que veas sea el prefijo lor,
e ídem para los grupos de vértices asociados.
Por supuesto, en aras de la simetrización,
realmente no desea cambiar el nombre de decenas de huesos,
y luego verse obligado a cambiarles el nombre de nuevo,
para que sus nombres coincidir con los grupos de vértices!
Ocasión para desempolvar algo de 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")
Respuesta
Muchas gracias por el guión, me ayudó mucho 🙂 Hice algunos ajustes: para poder usar cualquier parte predefinida del nombre para espaciar la parte izquierda y derecha: en mi ejemplo: Estoy usando «LT» y «RT» (aunque no es mi elección)
aquí está el script modificado:
# # 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")
Espero sería de alguna ayuda 🙂