2013-05-18 12 views
5

Zaczynając od pojedynczej kostki, zmieniłem niektóre właściwości (materiał, kolor, odbicie), a następnie skopiowałem obiekt na kilkanaście kostek, umieszczając je w scenie. Po renderowaniu chciałbym zmienić kolor wszystkich z nich. Jak zrobić to skutecznie?Jak skutecznie zmienić ten sam parametr dla wielu obiektów w Blenderze?

znalazłem wiele sposobów już:

  1. W trybie obiekt, zaznacz wszystkie obiekty (B, następnie prostokątny wybrać), dołącz do siatki ctrl-j, zmienić kolor, tab w trybie edycji, P aby oddzielić obiekty ponownie. Jest to całkiem możliwe, ponieważ siatki wszystkich moich obiektów nie dotykają się. Basics docs
  2. Ktoś napisał skrypt Pythona zrobić podobne rzeczy, here

Numer 1 jest podatny na błędy i zbyt uciążliwe do regularnego stosowania. Numer 2 jest bardziej wyspecjalizowany i znacznie gorszy. Po prostu zaznaczanie wielu obiektów i zmiana wartości nie działa, ponieważ wybory właściwości dotyczą tylko aktywnego obiektu, który jest tylko jednym z wybranych.

Ponieważ jest to typowy przypadek użycia, prawdopodobnie brakuje mi łatwej drogi. Co to jest?

+1

Dla tych z Was, którzy zastanawiać w tej kwestii, jak ja, tutaj jest zaktualizowana wersja: https: // blender. stackexchange.com/questions/6015/applying-numeric-input-attribute-changes-on-multiple-objects-at-the-same-time –

Odpowiedz

9

Chociaż nie znalazłem zbyt preferowanego prostego przycisku lub rozwiązania GUI, okazało się, że zhakowanie własnego kodu Pythona w Blenderze jest łatwiejsze niż mogłoby się wydawać.

Kostki, z którymi pracuję, przypominają bardziej kamienie domina. Następnie wszystkie obiekty wyglądające jak domino mają nazwę zaczynającą się od "Domino". Jest to bardzo proste, aby zmienić wszystkie obiekty w scenie na podstawie ich nazwy:

for o in bpy.data.objects: 
    if not "Domino" in o.name: 
     continue 
    o.rigid_body.mass = 500 
    o.rigid_body.friction = 0.4 
    o.rigid_body.restitution = 0.95 
    o.rigid_body.angular_damping = 0.2 
    o.rigid_body.linear_damping = 0.05 

Aby użyć tego kodu po prostu otwarte nowe okno (pociągnij trochę górną ikonę trójkąta prostokątnego na każdym istniejącym oknie Blender), zmienił typ okna do "Konsola Pythona" (ikona wybierz typ okna po lewej stronie), a następnie wklej do niego powyższy kod.

Kod można edytować w zewnętrznym edytorze tekstu. Alternatywnie można również otworzyć okno edytora tekstów w Blenderze. Po zapisaniu sceny zarówno konsola Python, jak i wewnętrzny edytor tekstu są przechowywane wzdłuż modelu 3D, co zapewnia bardzo przyjemny przepływ pracy.

Wyszukiwanie poprawnych nazw obiektów - takich jak bpy.data.objects["Domino.033"].rigid_body.mass jest bardzo łatwe, ponieważ pokazuje je po najechaniu kursorem na dowolne pole wprowadzania formularza za pomocą wskaźnika myszy. Jeśli ktoś zidentyfikował obiekt, użyj funkcji Pythona dir(), aby uzyskać listę wszystkich znanych metod i atrybutów obiektu. Może być więcej niż gui pozwala modyfikować lub używać.

To było znacznie łatwiejsze niż myślałem. Prawdopodobnie wyjaśnia, dlaczego można pomyśleć o skomplikowanej manipulacji, dla której nie ma elementu GUI - po prostu o wiele łatwiej jest nią manipulować w kodzie. Prawdopodobnie użyję tego do duplikowania i pozycjonowania obiektów wzdłuż linii, okręgów, spiral zamiast używania własnych atrybutów macierzy Blendera. Pozwoli to na łatwiejsze późniejsze korekty pozycji.

1

Jestem ciekawy, dlaczego nie można po prostu nastroić materiału. Blender bardzo ułatwia ponowne wykorzystanie elementów obiektu. Możesz mieć 100 obiektów, które mają wspólną siatkę. Możesz mieć 100 oczek, które dzielą zestaw 4 materiałów.

Wyobrażam sobie, że zestaw domina miałby 21 oczek (dla wszystkich kombinacji 1-6 x 1-6).Siatki te miałyby 2 lub 3 materiały (jeden na pestki i jeden lub dwa na ciało). Jeśli jest prawidłowo połączony, możesz zmienić kolor na wszystkich pestkach, zmieniając jeden materiał używany przez wszystkie siatki.

Używanie python do modyfikowania obiektów luzem jest bardzo potężne i ma zastosowanie do wielu problemów, ale czasami rozwiązanie jest łatwiejsze.

+0

Dziękujemy za powiadomienie mnie o możliwości udostępniania definicji materiałów w różnych obiektach. Będę musiał to przetestować w pewnym momencie. Obecna aplikacja jest o wiele prostsza niż to, co sobie wyobraziłeś, ponieważ są to po prostu pudełka do przewracania domina, a nie czarno-białe domino typu z pipsami na nich. Jednym z problemów z symulacjami jest to, że tarcie zachowuje się inaczej w przypadku obiektów nieruchomych i ruchomych, a to, co symulowałem, jest nieco zbyt odległe od rzeczywistości (prawdopodobnie także błędy użytkownika). W końcu porzuciłem ten konkretny projekt na razie. – cfi

+0

Jak przypisać materiał do wielu obiektów na początku? Jeśli wybrane są różne obiekty, tylko aktywny może mieć przypisany materiał najwyraźniej. – mins

+0

Wybierz wiele obiektów, upewnij się, że ten z materiałami, które lubisz, jest aktywnym obiektem. Użyj Ctrl-L, aby wywołać menu Make LInk i wybierz operator Materials. –

2

Oto Blender 3D Tip : Aby pracować nad kilkoma obiektami na raz, włącz wtyczkę "Kopiuj atrybuty" dołączoną do Blendera, ale domyślnie nie jest włączona: otwórz "Preferencje użytkownika", kliknij "Dodatki", a następnie wyszukaj "Kopiuj atrybuty" na znajdź wtyczkę "Widok 3D: Kopiuj atrybuty Menu". Włącz wtyczkę, a następnie zamknij preferencje.

Aby użyć :, w widoku 3D wybierz jeden lub więcej obiektów TARGET, a następnie wybierz obiekt SOURCE. Naciśnij "Ctrl-C" na klawiaturze i zobacz menu każdego typu atrybutu, który możesz skopiować. Kliknij jedną (np. Skalę), a zobaczysz skalę obiektu źródłowego, która zostanie zastosowana do wcześniej wybranych obiektów.

Oto ręczne wprowadzanie http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/3D_interaction/Copy_Attributes_Menu

Ten w odpowiedzi na:

http://obasandbox.wordpress.com/2011/10/23/cg-blender-setting-properties-on-multiple-objects/

Powiązane problemy