Nemohu najít možnost kostního zrcadla.
Když jsem asi před dvěma lety použil Blender, byla zrcadlová volba zastrčená panely plošiny / objektu, ale nyní nevidím žádné zjevné možnosti.
Jak mohu zrcadlit kosti ve verzi 2.7+?
Odpovědět
Vstupte do režimu úprav a poté stisknutím klávesy T otevřete panel nástrojů. pod možnostmi najdete zaškrtávací políčko s názvem X-Axis Mirror . Zaškrtněte it.
Tato možnost zrcadlí akce prováděné na kostech přes osu X. Chcete-li nastavit návazce, jednoduše dejte kostem příponu na levé nebo pravé straně (např. R / .L, _R / _L nebo _right / _left…) a ujistěte se, že se shodují ostatní jména. Kosti, které jsou vystředěny, příponu nepotřebují, protože nejsou zrcadleny.
Komentáře
- To je skvělé. Nikdy jsem si toho malého záložku ani nevšiml. ' s jus Nějak se tiše skrývá ' t! TY
- Karty mi nepřinášejí žádný konec smutku … Měly by opravit problémy s použitelností … 🙁 nikdy se to nestalo.
Odpověď
Blender 2.79b
Právě jsem zjistil, že pokud zrcadlíte pomocí možnosti Osy x v poli nástrojů, musíte každou kost pojmenovat ručně pro obě strany. Pokud provádíte manipulaci s člověkem, humanoidním znakem nebo zvíře, NEJLEPŠÍ způsob NENÍ zaškrtnutí možnosti Osy x, ale postupujte podle následujících kroků:
- Režim úprav, vyberte všechny kosti k zrcadlení na jedné straně (paže, noha, prsty ruky )
- Ujistěte se, že každý název kosti, který má být zrcadlen, končí znakem .L, což znamená VLEVO (např. hand.L). To je důležité!
- Ujistěte se, že je kurzor vycentrován (Shift + C).
- Vaše síť musí být také vycentrována, aby byl kurzor umístěn na její základně.
- Stiskněte W a vyberte Symmetrize (duplikace je automatická)
- Vaše kosti jsou nyní zrcadleny a jména automaticky maticky aktualizováno s příponou .R (což znamená vpravo).
Hotovo!
Komentáře
- Nebo (ve verzi 2.7.7) můžete použít W > Symmetrize, to ano všechny výše najednou.
- Když zkusím možnost Symmetrize, zdá se, že se duplikuje spolu s osou Y, a ne osou X. Nejprve jsem si myslel, že by to mohlo být proto, že moje souprava nebyla ' t správně orientována tak, aby přední strana postavy směřovala podél osy Y (jak tomu bylo dříve směrem dolů k ose X), ale i po otočení všeho to stále symetrizuje dolů opačnou dimenzi, než kterou chci. Nějaké nápady?
Odpověď
. .. musíte pojmenovat každou kost ručně pro obě strany …
Ano, to může být velké potíže,
pokud se ukáže, že jste importovali postavu G2f z DAZ,
přes .fbx nebo Collada, a v Blenderu zjistíte, že armatura DAZ nepřišla bezchybně.
V mém případě zjistím že musím upravit kosti prstů, které,
po dostatečné péči, mohu dosáhnout například na levé ruce;
ale potom chci, aby počítač opakoval to všechno jemné doladění
na pravé ruce, automaticky.
Pokud vyzkouším standardní možnosti Blenderu, nic se neděje, protože
armatura DAZ pro G2f (stejně jako V4) se řídí konvencí, že
jména levé a pravé kosti používají předpona l nebo r.
Oprava: V4 se řídila touto konvencí; čísla Genesis 1,2,3
používají předponu „Vlevo“ a „Vpravo“, jak ukazuje DAZ Studio;
nicméně proces přenosu, prostřednictvím Collada nebo prostřednictvím .fbx ,
to dělá tak, že na straně Blenderu vidíte předponu l nebo r,
a ditto pro přidružené skupiny vrcholů.
Samozřejmě, kvůli symetrizaci,
opravdu nechcete přejmenovat desítky kostí,
a pak je musíte znovu přejmenovat,
tak, aby jejich jména porovnejte skupiny vrcholů!
Příležitost oprášit nějaký 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")
Odpovědět
Moc děkuji za skript, hodně mi pomohl 🙂 Provedl jsem několik úprav: abych mohl použít jakoukoli předdefinovanou část názvu k uklidnění levé a pravé části: v mém příkladu: Používám „LT“ a „RT“ (není to však moje volba)
zde je upravený skript:
# # 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")
doufám pomohlo by to 🙂