Dla aktualnej wersj Blendera (2.8) pobierz ten plik wtyczki Handle Panel.
Do szybkiego tworzenia obiektów bazowych uchwytów możesz użyć tego dodatkowego narzędzia (dla Blendera 2.8). Wstawia ono obiekt Empty jako "rodzica" (ang. parent) wskazanego obiektu (w tym przypadku: uchwytu). Resetuje ono także lokalny układ współrzędnych uchwytu, umożliwiając bardziej intuicyjne ustawienia ograicznika "Limit Location".
Dla Blendera 2.7 i 2.6 pobierz plik ten plik wtyczki Handle Panel opisanej w sekcji 4 tego poradnika.
Dla Blendera 2.4, pobierz plik skryptu HandlePanel.py opisany w sekcji 3 tego poradnika.
Owiewka kabiny Ła-5 otwierała się poprzez odsunięcie do tyłu, wzdłuż szyn (patrz Fig. 1.1).
Możesz ją "ręcznie" przesunąć wzdłuż tych szyn. Będziesz jednak musiał zawsze uważać, by nie odsunąć jej za daleko - byłoby to nierealistyczne. Czy jest coś w Blenderze, co automatycznie ograniczy ruch tej części, by nie mogła "wypaść ze swoich torów"?
Tak, coś takiego istnieje. To ograniczniki (constraints) - jedne z wielu dostępnych w Blenderze modyfikatorów obiektu. Zdecydowałem nie zastosować ich bezpośrednio do osłony kabiny. Czasami to może być trudne, wybrać ją spośród innych elementów modelu. W istocie jest to zespół, zbudowany z czterech części: szkieletu ze stalowych rurek, zewnętrznej ramki z blachy duralowej, umieszczonego pomiędzy nimi szkła organicznego, i małej klamki. To wszystko jest odwzorowane w w modelu. Szkielet z rur stalowych jest "rodzicem" (parent) pozostałych elementów. Jeżeli nie "wcelujesz" w niego podczas selekcji, możesz niechcący zaznaczyć obiekt modelujący szkło. Przesuń go, a efekt będzie daleki od tego, co zamierzałeś. Lepszym pomysłem jest stworzenie sztucznego "uchwytu", który będzie umieszczony w łatwo dostępnym miejscu. Taki uchwyt byłby "rodzicem" całej owiewki. Fig. 1.2 i 1.3 pokazują rozwiązanie:
Dodałem do owiewki kabiny uchwyt – 019.Hood.Handle. Jest "rodzicem" (parent) całego zespołu, który będzie podążał za jej ruchami. Aby ułatwić zaznaczanie, Hood.Handle umieściłem daleko od "chmury" pozostałych obiektów modelu.
W zamyśle, użytkownik powinien używać obiekt Hood.Handle do przesuwania owiewki. Należy go umieścić na oddzielnej warstwie, która będzie ukryta podczas renderowania. Aby ograniczyć jego możliwość ruchu do przesunięcia wzdłuż szyn, dodałem drugi, pusty obiekt – 019.Handle.Pos. Jet to nieruchoma “baza” dla Hood.Handle. Obiekt Handle.Pos jest "przymocowany" do kadłuba samolotu. Obiekt Hood.Handle otrzymał ogranicznik, który pozwala mu na ruch po prostej wzdłuż odcinka odpowiadającego szynom. Ustawienia ogranicznika pokazuje Fig. 1.4.
Przyjrzyjmy się ustawieniom z Fig. 1.4. (Fig. 1.4 pokazuje, jak to wyglądało w Blenderze 2.45. Zakres ruchu był wtedy wyrażany we współrzędnych względnych w stosunku do "rodzica" uchwytu. Uważam, że na takich współrzędnych najlepiej widać ideę działania tego modyfikatora. Jego nowszą wersję pokazuje Fig. 1.5). Jedyny dozwolony ruch dla obiektu Hood.Handle jest wzdłuż osi Y. Ponieważ przełącznik Local jest włączony, odległości minY .. maxY są mierzone od "rodzica" Hood.Handle – obiektu Handle.Pos. Jest to jedyna przyczyna istnienia Handle.Pos – wyznacza "neutralne" ("spoczynkowe"?"domyślne"?) położenie uchwytu. Czasami mogłoby byc trudnym lub niemożliwym użyć do tego jakiejkolwiek innej części modelu – mają swoje środki w innych miejscach, i nie zawsze można je przemieścić. Dlatego zdecydowałem się użyć do tego celu obiekt Empty.
W późniejszych wersjach Blendera uległa zmianie konwencja określania zakresów w ograniczniku Limit Location. Obecnie należy tam wpisywać położenie uchwytu odczytane z okna Transform Properties (Fig. 1.5):
Tak więc – oto pierwszy efekt. Możesz łatwo "złapać" uchwyt, w jakiejkolwiek projekcji, nie martwiąc się o kierunek i odległość przesunięcia. Uchwyt “zna” swą jedyną możliwą drogę, i nigdy nie przekroczy granic przypisanej ścieżki:
Sterowanie owiewką było prostym przypadkiem. Poznasz prawdziwą "moc" takich rozwiązań, analizując system, jaki opracowałem do odwzorowania systemu chłodzenia silnika. Jego elementy pokazuję na Fig. 2.1:
W prawdziwym samolocie wszystkie części, pokazane na Fig. 2.1, były sterowane oddzielnie. Z zaskoczeniem stwierdzili to Niemcy, badając w Rechlinie zdobyczny Ła-5. Na pewno nie ułatwiało to pilotażu. Nie jest to jednak wyjątek: we wczesnych F4U Corsair każda z kilkunastu klapek wokół osłony silnika miała w kabinie swoją własną dźwignię! Mimo to położenie zasłon układu chłodzenia było zawsze mniej więcej zsynchronizowane: otwarte przy małej prędkości (lub na ziemi), i niemal zamknięte przy dużej prędkości. Byłoby najlepiej, gdyby wszystkie te części poruszały się, sterowane pojedynczym uchwytem. Lecz jak uzyskać taki efekt? Zasłony wylotu obracają się wokół ukośnych osi. Klapa chłodnicy oleju ma dwa popychacze, które powinny podążać za jej ruchem. I w dodatku z przodu znajdują się dwa pierścienie klapek zasłaniających wlot powietrza. Każda z klapek (zasłon) obraca się wokół własnej osi - jeden pierścień zgodnie z kierunkiem zegara, drugi - w przeciwnym. Jak powiązać te wszystkie ruchy z przesunięciem pojedynczego uchwytu?
No cóż, rozwiązanie to coś w rodzaju "wirtualnego mechanizmu", którego elementy pokazuje Fig. 2.2:
Przesunięcie uchwytu jest ograniczone przez więzy Limit Location, względem swego "rodzica" – pustego obiektu Handle.Pos. To rozwiązanie już znasz z poprzedniej sekcji tego poradnika. Przesunięcie uchwytu porusza inne pomocnicze (puste) obiekty. (Są do niego "przymocowane" relacją "parent"). Obiekty te są śledzone, za pomocą ogranicznika Locked Track, przez “przekładnie”, umieszczone pomiędzy zasłonami wylotu. Cylinder, znajdujący się za nimi, symetrycznie przenosi ruch lewej zasłony wylotu na prawą (za pomocą ogranicznika Stretch To). Podwójne koła przekładni używają ogranicznika Locked Track do zamiany przesunięcia uchwytu w obrót - jedna przekładania na zgodny z kierunkiem zegara, druga - na przeciwny. Ich obrót jest powtórzony przez koła umieszczone wewnątrz pierścieni zasłon wlotu. Do tych kół są promieniście przymocowane puste obiekty - "cele" dla poszczególnych klapek zasłaniających wlot. Każda klapka obraca się wokół własnej osi, śledząc swój "cel" za pomocą ogranicznika Locked Track.
Ta "wirtualna maszyna" używa ograniczeń, które były dostępne w Blenderze 2.43 (w tej wersji wykonywałem ten model). W nowszych wydaniach Blendera Aligorth (programista odpowiedzialny za ten zakres funkcji) dodał więcej nowych typów. Jednym z nich jest ograniczenie Transformation, którego możesz używać jako "uniwersalnej przekładni". Gdyby go użyć, mechanizm okapotowania silnika Ła-5 byłby prostszy. (Przykład zastosowania ograniczeń Transformation możesz zobaczyć w moim kolejnym modelu P-40B)
Co więcej, w Blenderze 2.43 ograniczenie Limit Location działało tylko wzdłuż osi globalnego układu współrzędnych. (Nawet wtedy, gdy miało włączoną opcję Local!). Gdy próbowałem obrócić model, "rozjeżdżały" mi się z tego powodu ruchome części osłony silnika... To było pierwszym impulsem do napisania skryptu Pythona, który umożliwiłby pokonanie tych problemów. W efekcie, stworzyłem uniwersalną "panel sterowania" do pozowania modelu. Nazwałem ją Handle Panel. I choć ograniczenia Limit Location już dawno naprawiono, zdecydowanie łatwiej jest sterować wszystkimi ruchomymi częściami za pomocą jego paneli, zamiast wyszukiwać w modelu uchwytów, które mogą się czasami kryć w dość zaskakujących punktach przestrzeni.
Skrypt Pythona, którego można użyć do ustalania położenia wszystkich ruchomych części. nosi nazwę HandlePanel.py, i można go pobrać stąd. Zapisz go do folderu skryptów Blendera. Powinien się pojawić w oknie skryptów (Scripts Window), jako polecenie menu Scripts=>Misc=>Handle Panel. Ten skrypt jest także zawarty w modelu Ła-5, jako jeden z bloków danych edytora tekstów. Możesz go uruchomić także stamtąd, naciskając [Alt]-[P].
Dla modelu Ła-5 ekran Handle Panel w Blenderze 2.4 wygląda jak na Fig. 3.1:
Skrypt wyszukuje w modelu każdy istniejący uchwyt, i tworzy dla niego pojedynczy panel, który zawiera trzy zakładki: Pos, Cockpit, Label. Na Fig. 3.1 widać dziesięć takich paneli.
Używam tego dodatku do wygodniejszego sterowania ruchomymi częściami modelu. Jego plik nosi nazwę scene_handle_panel.py, i jest udostępniony tutaj. Pobierz go, i dodaj do Twojego Blendera. (Tutaj znajdziesz opis, jak to zrobić).
Gdy włączysz ten dodatek, w edytorze właściwości, zakładce Scene ujrzysz jego panel (Handle Panel - Fig. 4.1):
Gdy naciśniesz przycisk Show/Refresh na tym panelu, skrypt przeszuka Twój rysunek i wyświetli dla każdego znalezionego uchwytu odrębną panel sterowania (Fig. 4.2):
Każda z paneli sterowania zawiera trzy kontrolki: Pos, Reset, Label. Pokazuje je Fig. 4.2.
Przy uruchomieniu, skrypt Handle Panel szuka w aktualnej scenie obiektów - uchwytów, które mogą być pokazane na panelu. Oznacza to, że możesz go użyć do dowolnego modelu. Na panelu powstanie zespół zakładek dla każdego obiektu, który:
Obiekt 019.Canopy.Handle, którego zespół jest pokazany szczegółowo na Fig. 1.2 – 1.4, jest przykładem uchwytu. Stwórz podobne obiekty w swoim modelu. To zależy od Ciebie, jaki ruch będzie do nich “podpięty”. Stwórz odpowiednie "mechanizmy" i sprawdź je, przesuwając uchwyt wzdłuż predefiniowanego toru, z aktywnym ogranicznikiem Limit Location. Skrypt Handle Panel jest w stanie użyć informacji z tego więzu do poruszania uchwytem.
Obiekty “uchwytów” są także przydatne w animacji: wystarczy podłączyć je do zbioru krzywych IPO. Użyj Handle Panel.py aby ustawić uchwyt we właściwej pozycji dla każdej klatki kluczowej. Zauważ, że wiele uchwytów na Ła-5 (steru kierunku, ster wysokosci, śmigło, lotki i sloty) ma juz przypisane krzywe IPO. Ich klatki kluczowe zostały stworzone za pomocą skryptu Handle Panel.py, a o klatki przejściowe zadbały już IPO.
Fig. 6.1 pokazuje krzywą IPO, która steruje obrotem śmigła. Klatki kluczowe dla tej krzywej zostały wstawione za pomocą Panelu Uchytów. Ten ruch jest używany także podczas renderowania pojedynczych obrazów w locie. Wywołuje wrażenie rozmycia łopat smigła. Wystąpi, gd włączysz w ustawieniach Renderera przełącznik MBLUR.