Modelowanie w Maya - NURBS

 

Niniejszy artykuł opisuje podstawowe narzędzia do modelowania powierzchni typu NURBS w programie Maya. Całą pracę wykonałem za pomocą trzeciej wersji programu, jednak użytkownicy starszych wersji nie powinni mieć problemów z przerobieniem ćwiczenia.

Pracę nad projektem zaczynamy oczywiście od koncepcji. Potem, w miarę własnych możliwości, przygotowujemy wstępną wizualizację, np. zdjęcie lub szkic (rys. 1).

Często przy wykonywaniu bardziej skomplikowanych modeli dobrze jest wspomóc się płaszczyzną obrazu (Image Plane), czyli rzutem obiektu (najcześciej z przodu i boku) widocznym w oknach kamery. Aby stworzyć taki rzut, należy uruchomić Window -> Multilister. W zakładce Cameras dwukrotnym kliknięciem myszy na odpowiedniej kamerze otwieramy okno Attribute Editor. Tam w rozwinięciu Environment znajduje się przycisk Create Image Plane. Po kliknięciu na nim pojawią się opcje dotyczące płaszczyzny obrazu. Klikamy na Browse przy Image Name i wybieramy odpowiednią bitmapę.
Na potrzeby artykułu wymyśliłem postać ufoludka, nie jest to na tyle skomplikowany obiekt bym potrzebował dodatkowych materiałów referencyjnych w postaci płaszczyzny obrazu. Dzięki temu nie jestem również zmuszony do nadmiernej dbałości o szczegóły i podobieństwo, tak jak w przypadku modelowania realistycznych obiektów organicznych. Jednak z pewnością „ufok” wystarczy, by wytłumaczyć, „o co chodzi”.

Rozpoczynamy modelowanie. Po uruchomieniu Maya przechodzimy do trybu Modeling (klawisz [F3]). Zaczniemy od stworzenia głowy bohatera poprzez odpowiednią modyfikację wierzchołków kuli komendą Create -> NURBS Primitives -> Sphere. By zaoszczędzić sobie ewentualnych kłopotów przy przyklejaniu oczu do głównej bryły głowy, kulę umieszczamy tak, by bieguny były na osi Y lub Z (w zależności od ustawień: wysokość. u mnie jest to oś Z), a pierwszy izoparm (najgrubszy) znajdował się z tyłu (rys. 2).

Klawiszami [1], [2] i [3] kontrolujemy szczegółowość wyświetlania zaznaczonego obiektu, nie ma to wpływu na faktyczną geometrię obiektu, a jedynie na komfort pracy.
Zaczynamy zmieniać położenia punktów kontrolnych CV (przytrzymujemy prawy przycisk myszy [PPM] na wcześniej zaznaczonej kuli i wybieramy Control Vertex). Przesuwając [w] punkty, skalując [r] i obracając [e] ich grupy, tworzymy bardzo ogólną bryłę głowy ufoka (rys. 3).

Na pewno przyda się szybka manipulacja kamerą (persp): trzymając wciśnięty klawisz [ALT] + [LPM] obracamy obraz, [ALT] + [ŚPM] - przesuwamy go, a kombinacją [ALT] + [LPM] + [ŚPM] przybliżamy lub oddalamy.
Klikając [PPM] na kuli i wchodząc w tryb Isoparm (południki i równoleżniki), jesteśmy w stanie dodać ich kilka. Aby to zrobić, należy kliknąć na którymś z równoleżników (u mnie Isoparm V) i nie puszczając, przesunąć mysz w górę lub dół, po czym puścić. Wtedy zostanie na żółto podświetlone miejsce, gdzie po wydaniu komendy Edit Surfaces -> Insert Isoparms powstanie nowy Isoparm V. Analogicznie można dodać południki Isoparm U. Posługując się klawiszem [SHIFT], można wyznaczyć więcej niż jeden nowy Isoparm U czy Isoparm V. Jednak nie jednocześnie U i V. Pamiętajmy, aby oszczędnie korzystać z tego dobrodziejstwa, ponieważ późniejsza kontrola wierzchołków CV może okazać się niemożliwa. Po dodaniu odpowiedniej ilości izoparm możemy dalej edytować nasz obiekt w trybie Control Vertex.
Tą metodą można by było wykonać cały obiekt. Jest to jednak trudne ze względu na komplikacje wynikające z dużej ilości punktów kontrolnych, w których bardzo ciężko jest się potem zorientować. Dlatego też skorzystamy z możliwości sklejania ze sobą obiektów i tworzenia gładkich połączeń między nimi, najpierw dokleimy oczy, a z powstałego połączenia wykonamy powieki.

Rozpoczynamy od stworzenia kul, czyli gałek ocznych, do nich będziemy dopasowywać powieki. Jedną kulę możemy odbić lustrzanie, korzystając ze skali, w celu stworzenia drugiej. Aby to zrobić, musimy zduplikować (Edit -> Duplicate[]) sferę, skalując ją w osi X o -1 (rys. 4).

Wcześniej jednak trzeba przesunąć odpowiednio Pivot (punkt skalowania). Mając włączone narzędzie do skalowania [r], klawiszem [Insert] włączamy tryb edycji Pivot, a trzymając [x] (przyciąganie do siatki), przesuwamy Pivot w odpowiednie miejsce.
Teraz narysujemy krzywą, do której dokleimy oczy. Mając zaznaczoną bryłę głowy, włączamy Modify -> Make Live. Obiekt stanie się zieloną siatką. Rysujemy odpowiednią krzywą na głowie, korzystając z narzędzia Create -> CV Curve Tool. Pamiętajmy, aby krzywa była zamknięta (można skorzystać z polecenia Edit Curves -> Open/Close Curves (rys. 5).

Jest jeszcze inny sposób na stworzenie takiej krzywej na obiekcie: można skorzystać z polecenia Project Curve On Surface. W tym celu tworzymy koło Create -> Nurbs Primitives -> Circle, które umieszczamy w odpowiednim położeniu do projekcji. Zaznaczamy koło i bryłę głowy. Aktywujemy widok z przodu, po czym korzystamy z Edit Surfaces -> Project Curve On Surface (rys. 6).

Krzywą powstałą z tyłu głowy i koło możemy usunąć.
Ograniczając detale obiektów [1] i przechodząc w tryb wyświetlania Wireframe [4] ([5] tryb Shade, [6] Shade + tekstury, [7] uwzględnia światła), włączamy narzędzie Edit Surface -> Surface Fillet -> Fillet Blend Tool, wybieramy jedną z izoparm oka i [ENTER] (niekoniecznie musi być to jedna z widocznych izoparm, można również wykorzystać jeszcze niewidoczną, nawet jej nie tworząc, jedynie zaznaczając). Potem wybieramy krzywą, którą utworzyliśmy na bryle głowy, [ENTER] (rys. 7).

Powinno zostać stworzone gładkie przejście między okiem a głową. Gdyby przejście wydawało się skręcone, należy zaznaczyć krzywą na głowie lub izoparmę oka i odwrócić ją za pomocą narzędzia Edit Surface -> Reverse Surface Direction(rys. 8).


Obiekt łączenia czy krzywe, do których dołączyliśmy oczy, można dowolnie edytować, dodając izoparmy i zmieniając pozycje punktów CV. W ten sposób z łączenia łatwo jest zrobić okalające oko powieki „teleskopy” (rys. 9).

Gdy jesteśmy już zadowoleni z łączenia, możemy skasować [DEL] krzywe na głowie lub je ukryć [CTRL] + [h] ([CTRL] + [H] - pokaż ostatnio ukryte).

Teraz stworzymy czułki. Wykorzystamy do tego narzędzie Loft. Mając zaznaczoną bryłę głowy wybieramy polecenie Modify -> Make Live. Po narysowaniu owali na głowie (pamiętajmy o poleceniu Open/Close), w miejscach, skąd wyrastać będą czułki, możemy wyłączyć opcję Live dla obiektu głowy. Następnie po zaznaczeniu obu przed chwilą stworzonych krzywych korzystamy z polecenia Edit Curves -> Duplicate Surface Curves. W ten sposób zduplikowane krzywe posłużą nam do stworzenia czułków (rys. 10).


Jednak dla lepszej przejrzystości obiektu lepszym materiałem będą krzywe leżące na jednej płaszczyźnie. Na widoku od frontu lub z boku zaznaczamy wszystkie wierzchołki CV jednej z nowo powstałych krzywych i trzymając klawisz [x] (przyciąganie do siatki), przesuwamy wierzchołki na osi Z (góra) aż do wyrównania wszystkich punktów na płaszczyźnie (rys. 11).

Teraz tak przygotowaną krzywą możemy duplikować, tworząc przekroje czułka. Każdy z przekrojów możemy dowolnie edytować, pamiętając, aby nie zwiększać ilości punktów kontrolnych (choć jest możliwe wykonanie Lofta z różniących się pod tym względem przekrojów).
Ponieważ chcemy, aby czułki były zakończone ostro, ostatni przekrój należy przygotować tak, aby wszystkie punkty leżały dokładnie w tym samym miejscu. Aby to zrobić, trzeba skorzystać z przyciągania np. do punktu. Zaznaczamy wszystkie CV prócz jednego i naciskamy [v] (który włącza i wyłącza tryb przyciągania do punktu), teraz wystarczy ruszyć zaznaczone punkty w kierunku niezaznaczonego i powinny one zostać przyciągnięte (rys. 12).


Po zaznaczeniu wszystkich przekrojów (w kolejności dół - góra) wywołujemy okno opcji polecenia Surfaces -> Loft[] i upewniając się, że opcja close nie jest aktywna, klikamy na Apply (rys. 13).

Następnie, korzystając z polecenia Fillet Blend Tool, łączymy czułki z krzywymi na głowie.
Specjalnie nie tworzyłem już wygiętych czułków, ponieważ łatwo można to zrobić za pomocą deformacji kratownicy Lattice. Zaznaczamy czułek i przechodząc w tryb Animation [F2], wybieramy polecenie Deform -> Create Lattice[], w opcjach ustawiamy sobie ilość podziałów i tworzymy kratownicę. Następnie, wchodząc do trybu edycji Lattice Point ([PPM] na kratownicy) wykrzywiamy czułki (rys. 14).


Aby zatwierdzić na stałe zmiany wykonane za pomocą kratownic, mając zaznaczone czułki, korzystamy z Edit -> Delete by Type -> History, kasując w ten sposób historię konstrukcji obiektu. W ten sposób udało mi się wykonać całą głowę (rys. 15).

Pamiętajmy, że włączone Construction History daje nam możliwość „nieliniowego” modelowania, np. po wykonaniu polecenia Loft wszystkie krzywe tworzące są połączone z obiektem wynikowym i zmieniając je, zmieniamy również obiekt. Dopiero wykonanie polecenia Delete by Type -> History usuwa nam te połączenia.

Teraz zajmiemy się tułowiem naszego stwora. Skorzystamy z metody modyfikacji obiektu podstawowego. W tym wypadku zrezygnuję z dokładnego opisu krok po kroku. Wykorzystując wskazówki z opisu tworzenia głowy, bez problemów można stworzyć korpus. Ja ponownie posłużyłem się kulą (rys. 16).


Jeżeli chcemy, by obiekt był doskonale symetryczny, można wykonać następujące czynności: zaznaczyć izoparmy środka kuli i użyć opcji Edit Surfaces -> Detach Surfaces, aby rozdzielić połówki. Następnie kasujemy jedną z nich. Aby widzieć efekt modyfikacji na obu połowach jednocześnie, poleceniem Edit -> Duplicate[] odbijamy lustrzanie połówkę. W parametrze Scale odpowiedniej osi (u mnie Z) wpisujemy „-1”, co spowoduje odbicie względem tej właśnie osi, a w Geometry Type zaznaczyć Instance, aby wszystkie zmiany były dokonywane również na duplikacie. Po skończonych modyfikacjach można ponownie połączyć obie części, zaznaczając je i korzystając z polecenia Edit Surfaces -> Attach Surfaces.

Robaczek nie ma jeszcze rąk. Na ich przykładzie trochę dokładniej omówię zasady tworzenia połączeń Fillet Blend. Najpierw, modyfikując cylinder, tworzymy bryłę ręki. Ilość podziałów możemy zwiększyć, nie tylko stosując opisane wcześniej polecenie Insert Isoparms, lecz modyfikując parametry wejściowe Inputs -> makeNurbCylinder1 -> Spans i Sections w Channel Box (rys. 17).

Kiedy już nasza ręka będzie miała zadowalający kształt (rys. 18), możemy zabrać się za dłoń.


Tworzymy kulę, z której modelujemy dłoń wraz ze środkowym palcem. Zwracamy uwagę, by początek kuli (najgrubsza izoparma) przecinał środkowy palec z góry lub z dołu, a biegun znajdował się na czubku tegoż palca (rys. 19).

W pobliżu bieguna bardzo ciężko jest narysować zamkniętą krzywą należącą do obiektu (np. za pomocą Make Live), tak by miała zadowalający kształt (rys. 20).

Oczywiście można sobie pokombinować z izoparmami, ale zawsze to o jedno łączenie palca więcej i w dodatku jest to trudniejsze łączenie.
Teraz stworzymy pozostałe palce, duplikując ten już stworzony. Zaznaczamy na dłoni izoparmę, w której ma być przeprowadzone cięcie, i poleceniem Edit Surfaces -> Detach Surfaces odcinamy palec od dłoni. Robimy to na duplikacie naszego obiektu bądź włączamy wcześniej w opcjach Detach Surfaces[] Keep Original (rys. 21).

Po stworzeniu dodatkowych palców ich modyfikacji i odpowiednim umieszczeniu powinniśmy uzyskać coś podobnego do rys. 22.


Następnie, korzystając z narzędzia Modify -> Make Live, rysujemy w odpowiednich miejscach krzywe, do których będziemy przyklejać palce (rys. 23).

W widoku szkieletowym z włączonym narzędziem Edit Surfaces -> Surface Fillet -> Fillet Blend Tool wybieramy jedną z krzywych, następnie klawisz [ENTER], po czym wybieramy izoparmę palca i [ENTER] (rys. 24).


Wynik może nie być satysfakcjonujący nawet przy najwyższych detalach wyświetlania [3], wtedy jednak mamy kilka możliwości jego poprawy. Po pierwsze po wciśnięciu klawisza [t] powinny się pojawić dwa niebieskie manipulatory. Jeżeli łączenie wydaje się być skręcone, możemy, zaznaczając krzywą na dłoni lub izoparmę palca i wydając polecenie Edit Surfaces -> Reverse Surface Direction, naprawić to. Możemy również zmodyfikować kształt krzywej na dłoni lub palec tak, by osiągnąć zamierzony efekt. Zawsze można zmienić samo połączenie.
Aby łączenia podczas animacji nie rozpadały się, nie wolno ich przypisywać do szkieletu, chyba że wcześniej wykasujemy im historię konstrukcji Delete by Type -> History. Dobrze jest też pociąć obiekty narzędziem Edit Surfaces -> Trim Tool tak, by końcówki obiektów nie wychodziły spod łączeń w trakcie zginania kończyn. Po połączeniu wszystkich elementów powinniśmy uzyskać efekt podobny do rys. 25.

Powyższy artykuł przedstawia tylko jedną z metod wykonania obiektu. Maya posiada również wspaniałe narzędzia do modelowania polygonami, tzw. Subdivision Surfaces, czy modelowanie na łatach. Nawet w obrębie samych NURBS-ów jest to tylko wierzchołek możliwości programu Maya.


Krzysztof Kamrowski

Tutorial umieszczony na www.maya3d.users.pl za zgodą autora