Nie mogę znaleźć opcji lustra kości.
Kiedy korzystałem z Blendera około dwa lata temu, opcja lustra była schowana panele rig / object, ale teraz nie widzę żadnych oczywistych opcji.
Jak mogę wykonać kopię lustrzaną kości w wersji 2.7+?
Odpowiedź
Wejdź w tryb edycji, a następnie naciśnij T , aby otworzyć panel narzędzi. Pod opcjami znajduje się pole wyboru z napisem X-Axis Mirror . Zaznacz
Ta opcja będzie odzwierciedlać działania wykonywane na kościach wzdłuż osi X. W celu skonfigurowania sprzęt, po prostu nadaj kościom przyrostek po lewej lub prawej stronie (np. .R / .L, _R / _L lub _right / _left…) i upewnij się, że pozostałe nazwy pasują. Kości wyśrodkowane nie potrzebują sufiksu, ponieważ nie są dublowane.
Komentarze
- To wspaniale. Nigdy nie zauważyłem tej małej zakładki. ' s jus ciche ukrywanie się nie jest ' t on! TY
- Karty sprawiają mi niekończący się żal … Mają naprawiać problemy z użytecznością … 🙁 to się nigdy nie wydarzyło.
Odpowiedź
Blender 2.79b
Właśnie odkryłem, że jeśli wykonujesz lustrzane odbicie za pomocą opcji X-Axis w skrzynce narzędziowej, musisz ręcznie nazwać każdą kość po obu stronach. Jeśli tworzysz człowieka, humanoidalną postać lub zwierzęcia, najlepszym sposobem jest NIE zaznaczanie opcji osi X, ale wykonaj poniższe czynności:
- Tryb edycji, wybierz wszystkie kości do odbicia lustrzanego po jednej stronie (ramię, noga, palce dłoni )
- Upewnij się, że nazwa każdej kości do odbicia kończy się na .L, co oznacza LEWĄ (np. ręka.L). Jest to niezbędne!
- Upewnij się, że kursor jest wyśrodkowany (Shift + C).
- Twoja siatka również musi być wyśrodkowana, aby kursor był umieszczony u jej podstawy
- Naciśnij W i wybierz Symetryzuj (duplikacja jest automatyczna)
- Twoje kości są teraz dublowane, a nazwy automatycznie automatycznie aktualizowane przez rozszerzenie .R (co oznacza prawo).
Gotowe!
Komentarze
- Lub (w wersji 2.79) możesz użyć W > Symmetrize, to znaczy wszystko powyżej naraz.
- Kiedy próbuję użyć opcji Symetryzuj, wydaje się, że powielają się wzdłuż osi Y, a nie osi X. Na początku pomyślałem, że może to być spowodowane tym, że mój zestaw nie był ' ustawiony prawidłowo, a przód znaku był skierowany wzdłuż osi Y (tak jak poprzednio był skierowany w dół osi X), ale nawet po obróceniu wszystkiego, nadal symetryzuje w kierunku przeciwnym do tego, który chcę. Jakieś pomysły?
Odpowiedz
. … musisz ręcznie nazwać każdą kość dla obu stron …
Tak, to może być dużym problemem,
jeśli okaże się, że zaimportowałeś znak G2f z DAZ,
przez .fbx lub Colladę, i w Blenderze
odkryjesz, że szkielet DAZ nie przeszedł bezbłędnie.
W moim przypadku uważam że muszę wyregulować kości palców, co
po odpowiedniej staranności mogę osiągnąć, powiedzmy, lewą ręką;
ale potem chcę, żeby komputer powtórzył to wszystko strojenie precyzyjne po prawej stronie, automatycznie.
Jeśli spróbuję standardowych opcji Blendera, nic się nie dzieje, ponieważ
szkielet DAZ dla G2f (jak wyżej V4) jest zgodny z konwencją, że
nazwy lewej i prawej kości używają prefiks l lub r.
Poprawka: Wersja 4 była zgodna z tą konwencją; figury 1, 2, 3 z Genesis
używają przedrostka „Left” i „Right”, jak pokazano w DAZ Studio;
jednak proces transferu przez Colladę lub przez .fbx ,
sprawia, że od strony Blendera widzisz przedrostek l lub r,
i to samo dla powiązanych grup wierzchołków.
Oczywiście ze względu na symetryzację
naprawdę nie chcesz zmieniać nazw wielu kości,
a potem musisz zmieniać ich nazwy ponownie,
aby ich nazwy dopasuj grupy wierzchołków!
Okazja do odkurzenia trochę Pythona:
# # 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")
Odpowiedź
bardzo dziękuję za scenariusz, bardzo mi pomógł 🙂 Dokonałem kilku poprawek: aby móc użyć dowolnej predefiniowanej części nazwy do rozdzielenia lewej i prawej części: w moim przykładzie: Używam „LT” i „RT” (choć nie mój wybór)
Oto zmodyfikowany skrypt:
# # 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")
Mam nadzieję byłoby to pomocne 🙂