Não consigo encontrar a opção de espelho ósseo.
Quando usei o Blender cerca de dois anos atrás, a opção de espelho estava escondida em os painéis rig / objeto, mas agora não vejo opções óbvias.
Como posso espelhar bones no 2.7+?
Resposta
Entre no modo de edição e pressione T para abrir o painel de ferramentas. em opções, você encontrará uma caixa de seleção que diz Espelho do eixo X . Marque .
Esta opção irá espelhar as ações realizadas nos ossos ao longo do eixo X. Para configurar um rig, basta dar aos bones um sufixo do lado esquerdo ou direito (por exemplo .R / .L, _R / _L ou _right / _left…) e certifique-se de que o resto dos nomes coincidam. Ossos que estão centralizados não precisam de um sufixo, já que eles não estão sendo espelhados.
Comentários
- Isso é ótimo. Eu nunca tinha percebido aquela pequena guia. Ele ' s jus t meio que se esconder silenciosamente não é ' ele! TY
- As guias me causam uma dor infinita … Elas deveriam corrigir problemas de usabilidade … 🙁 nunca aconteceu.
Resposta
Blender 2.79b
Eu acabei de descobrir que se você espelhar com a opção do eixo x na caixa de ferramentas, você terá que nomear cada osso manualmente para ambos os lados. Se você estiver manipulando um humano, um personagem humanóide ou um animal, a melhor maneira é NÃO marcar a opção do eixo x, mas siga os passos abaixo:
- Modo de edição, selecione todos os ossos para espelhar em um lado (braço, perna, dedos das mãos )
- Certifique-se de que cada nome de osso a ser espelhado termine com .L que significa ESQUERDA (por exemplo: mão.L). Isso é vital!
- Certifique-se de que o cursor esteja centralizado (Shift + C).
- Sua malha também deve ser centralizada para que o cursor seja posicionado na base dela
- Pressione W e selecione Simetrizar (a duplicação é automática)
- Seus ossos agora são espelhados e os nomes automáticos atualizado automaticamente com a extensão .R (que significa direita).
Pronto!
Comentários
- Ou (na v2.79) você pode usar W > Symmetrize, que faz tudo acima de uma vez.
- Quando tento a opção Simetrizar, parece duplicar junto com o eixo Y, e não o eixo X. No início, pensei que isso pudesse ser porque meu equipamento não estava ' t orientado corretamente com a frente do personagem voltada para o eixo Y (como estava anteriormente voltada para baixo no eixo X), mas mesmo depois de girar tudo, ele ainda simetriza a dimensão oposta à que eu quero. Alguma ideia?
Resposta
. ..você tem que nomear cada osso manualmente para ambos os lados …
Sim, isso pode ser um grande incômodo,
se descobrir que você importou um personagem G2f do DAZ,
via .fbx ou Collada, e, no Blender,
você descobre que a armadura DAZ não ficou perfeita.
No meu caso, eu acho que preciso ajustar os ossos dos dedos, que,
depois de bastante diligência, posso atingir, digamos, a mão esquerda;
mas então, quero que o computador repita tudo isso ajuste fino
à direita, automaticamente.
Se eu tentar as opções padrão do Blender, nada acontece, porque
a armadura DAZ para G2f (idem V4) segue a convenção de que
os nomes dos ossos esquerdo e direito usam um prefixo de l ou r.
Correção: V4 seguia essa convenção; as figuras do Genesis 1,2,3
usam um prefixo “Left” e “Right” conforme mostrado pelo DAZ Studio;
no entanto, o processo de transferência, via Collada ou via .fbx ,
faz com que, do lado do Blender, o que você veja é o prefixo l ou r,
e idem para os grupos de vértices associados.
Claro, para simetrizar,
você realmente não quer renomear muitos ossos,
e então ser obrigado a renomeá-los novamente,
para que seus nomes combine os grupos de vértices!
Ocasião para tirar a poeira de algum 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")
Resposta
muito obrigado pelo script, ele me ajudou muito 🙂 Fiz alguns ajustes nele: para poder usar qualquer parte pré-definida do nome para espaçar a parte esquerda e direita: no meu exemplo: Estou usando “LT” e “RT” (mas não é minha escolha)
aqui está o 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 seria de alguma ajuda 🙂