Modyfikatory

Kolejny wpis o tematyce stricte graficznej. W tym poście pochylę się nad modyfikatorami, które najczęściej stosuję w swoich projektach.

Uwagi ogólne

Jak wspominałem w poprzednim poście, modyfikatory są poleceniami wykonywanymi przez program poza trybem edycji, efekt zazwyczaj wyświetlany jest w czasie rzeczywistym. Do zaakceptowania modyfikatora niezbędne jest przejście w tryb obiektowy. Operacje wykonywane są najczęściej w oparciu o lokalny układ współrzędnych danego obiektu i dlatego istotne jest odpowiednie ustalenie tego układu (położenie, obrót skala). Błędy w funkcjonowaniu modyfikatorów najczęściej wynikają z transformacji wykonanych w trybie obiektowym. Ważna jest też kolejność wykonywania operacji.

Poniżej postaram się opisać kilka najczęściej używanych przeze mnie modyfikatorów. Nie jestem wybitnym znawcą tematu i nie potrafię pewnych rzeczy wytłumaczyć w sposób prosty, dlatego zainteresowanych odsyłam do poszukiwań tutoriali na YouTube u osób bardziej obeznanych i kompetentnych niż ja.

Mirror

Najczęściej używany przeze mnie modyfikator. Służy do stworzenia lustrzanego odbicia bryły. W razie potrzeby, parametry muszą być włączane od góry, tj w kolejności od Axis, później Bisect i na końcu Flip (np. nie można zaznaczyć dwusiecznej na Y bez zaznaczenia wcześniej osi symetri na Y). Axis określa wzdłuż której osi ma być symetria, Bisect odpowiada za przycinanie przez płaszczyznę lustra, a Flip odwraca te przycinanie. Mirror object pozwala na stworzenie lustrzanego odbicia w oparciu o inny obiekt wykorzystując jego lokalny układ współrzędnych. Clipping zapobiega przemieszczaniu się wierzchołków przez lustro podczas transformacji. Merge łączy wierzchołki o obu stronach lustra (podaje się odległość poniżej której wierzchołki mają się połączyć). Bisect distance działa, gdy jest aktywna któraś z opcji Bisect i określa odległość od płaszczyzny dwusiecznej, w której wierzchołki są usuwane.

Rozwijając zakładkę Data uzyskuje się dodatkowe opcje związane z mapowaniem UV, UDIM i grupami wierzchołków. Ja z reguły poprzestaje na takich ustawieniach jakie widać poniżej. Czasem trzeba zmniejszyć odległość łączenia wierzchołków.

Subdivision surface

Jest to operacja, która dzieli wszystkie krawędzie i płaszczyzny bryły. Algorytm podziału może być: Prosty (Simple – dzielenie bryły bez wygładzania, lub Catmull-Clark (podział i wygładzenie). W opcjach podaje się poziom podziału w oknie widoku (Viewport) i renderze (Render). Poziom podziału jest potęgą liczby 2 (poziom 0 – bez podziału, poziom 1 – dzielone na 2, poziom 2 – dzielone na 4 itd.). Dodatkowo można zaznaczyć Podział adaptacyjny dla renderowania i Optymalne wyświetlanie (wyświetla siatkę tylko „krawędzi podstawowych”).

W zaawansowanych opcjach można zmienić ustawienia płaszczyzny ograniczającej, jakość wygładzania, opcje mapowania UV i zastosowanie Crease-ów i niestandardowych normalnych.

Prosty podział bryły. Wyłączone optymalne wyświetlanie.
Podział bryły algorytmem Catmull-Clark. Włączone optymalne wyświetlanie.

Jak widać algorytm tworzy coś na kształt kuli. Jednakże w trybie edycji dalej dysponujemy sześcianem. Dodając nową geometrię zmienia się kształt bryły, ale ciągle jest ona wyoblona. Kiedy chcemy zrobić jakąś ostrą linię, lub chcemy spłaszczyć którąś ze ścian używa się Crease-ów. Są to dane krawędzi (w przedziale 0-1) informujące program, który rodzaj podziału ma być zastosowany. Na przykład chciałbym zrobić płaską górę i wtedy wybieram górną płaszczyznę klikam Shift+E i wpisuję 1.

Spłaszczenie górnej powierzchni.

W skrajnym przypadku kiedy wszystkie krawędzie będą miały Crease = 1, uzyska się podział Prosty, mimo iż wybrany jest Catmull-Clark.

Boolean

Jest to modyfikator wykonujący operacje logiczne Boole’a – sumę (Union, łączącą dwa obiekty), odejmowanie (Difference – wycinający jeden obiekt w drugim), przecinanie/mnożenie logiczne (Intersect – wycinanie fragmentów, które są poza częścią wspólną obiektów). Można wybrać „rozwiązywacz” (Solver) szybki lub dokładny.

Jako prosty przykład posłużę się sześcianem i sferą.

Sześcian i sfera przed operacjami Boole’a.
Odejmowanie/różnica (Difference) sfery w sześcianie.
Dodawanie (Union) sfery i sześcianu.
Mnożenie logiczne/przecinanie (Intersect) sfery i sześcianu.

Modyfikator działa w sposób nieniszczący i istnieje możliwość modyfikacji efektu końcowego tej operacji w czasie rzeczywistym przed zaakceptowaniem operacji (w trybie obiektowym). Przemieszczając lub zmieniając kształt brył zmienia się końcowy wynik operacji.

Sfera podniesiona w trybie obiektowym. Wynik różnicy uległ zmianie.

Po zaakceptowaniu modyfikatora trzeba oczyścić topologię, bo operacje tego typu bardzo ją niszczą (pisałem o tym we wpisie o Mustangu GT500 Eleanor i dawnych metodach modelowania).

Shrinkwrap

Jest to modyfikator pozwalający nałożyć obiekt na inny (zwany przeze mnie „prawidłem”). Jest to szczególnie przydatne w przypadku, gdy modelowany obiekt posiada wycięcia, jak np. drzwi lub maska samochodu, i chcę, żeby przepływ płaszczyzn był taki sam po obu stronach szczeliny drzwiowej. „Prawidłem” z reguły jest obiekt high-poly posiadający modyfikator Subdivision Surface (o którym pisałem wcześniej), żeby modyfikator Shrinkwrap miał się do czego „doczepić”. „Obiektem naciąganym” jest z reguły obiekt low-poly, z którego powstał high-poly, lub jego pierwsza iteracja podziału, żeby móc go lepiej spasować z „prawidłem”. Następnie w „obiekcie naciąganym” zwiększam ilość geometrii, przemieszczam wierzchołki bez obawy o możliwość zrobienia jakichś zagnieceń na powierzchni.

Modyfikator może być stosowany w celu retopologii skanów 3D, które posiadają ogromną ilość wierzchołków i chaotyczną topologię. Używa się ich jako „prawidła” i tworzy się model o znacznie mniejszej ilości geometrii i czystej topologii. Ja tak robiłem tworząc modele do jednej z firm, od której otrzymywałem skany 3D części samochodowych i na ich podstawie tworzyłem modele o czystej topologi, które projektant dalej obrabiał.

Zielony „obiekt naciągany” na czerwonym „prawidle”.

Na powyższym przykładzie zielony obiekt naciągany jest na czerwone „prawidło”. Zastosowane jest oddalenie 0,5mm żeby zobrazować o co chodzi. Jak widać czerwony przebija się miejscami, co wskazuje, że w tych miejscach „prawidło” bardziej odstaje, ale i tak obiekt dobrze na nim leży.

Jeśli chodzi o same opcje modyfikatora to można wybrać metodę rzutowania obiektu na „prawidło” (najbliższy punkt powierzchni/projekcja/najbliższy wierzchołek/ projekcja po normalnych), tryb przyciągania (na powierzchni/ wewnątrz/zewnątrz/zewnątrz powierzchni/ponad powierzchnią), cel (czyli „prawidło”), odsunięcie (o ile jest potrzebne) i grupę wierzchołków (tę operację można wykonać na jakiejś grupie wierzchołków, nie koniecznie na całej bryle). W zależności od wybranej metody i trybu przyciągania wyświetlają się dodatkowe opcje. Najbardziej złożoną metodą jest projekcja. Pojawiają się wtedy opcje dotyczące projekcji, orientacji płaszczyzn, przycinania i „pomocniczego celu”. Metody projekcyjnej używa się w celu nałożenia obiektu wymodelowanego płasko na obiekt 3D.

Kształt drzwi wymodelowany w płaszczyźnie X = 2 m.
Kształt drzwi nałożony na „prawidło” metodą projekcyjną.

Array

Modyfikator tworzący duplikaty obiektu. Mogą one być ustawione w rzędzie lub obrócone. Szczególnie przydatne przy tworzeniu powtarzających się elementów, opon i felg. Wystarczy stworzyć jedno z pięciu ramion felgi, użyć modyfikatora i gotowe.

Stworzenie połówki ramienia i 1/10 obręczy felgi.
Odbicie lustrzane ramienia i fragmentu obręczy – 1/5 felgi.
Zastosowanie modyfikatora Array – cała felga.

W tym przypadku modyfikator odczytuje transformację z pustego obiektu – Rot 5×72 (przemieszczenie względem początku felgi = 0 obrót 72° po osi globalnej X).

Screw

Wyciąganie śrubowe obiektu. Punktem obrotu jest początek lokalnego układu współrzędnych obiektu. Przydatne przy tworzeniu sprężyn śrubowych. Podaje się:

  • Kąt poszczególnej iteracji – domyślne 360° to pełen obrót, wartość dodatnia jest prawoskrętna, wartość ujemna jest lewoskrętna; można podać np. 180° i wtedy ilość segmentów i skok przeliczany jest na każdą połowę obrotu;

  • Skok – czyli prostopadła odległość między początkiem i końcem danej iteracji;

  • Ilość iteracji;

  • Oś obrotu – są to osie lokalnego układu współrzędnych obiektu;

  • Obiekt osiowy – korzysta z danych innego, wskazanego obiektu;

  • Kroki” – czyli ilość segmentów poszczególnej iteracji osobno dla okna podglądu (Viewport) i Renderu;

  • Łączenie – można zaznaczyć i podać poniżej jakiej odległości wierzchołki mają się łączyć ze sobą;

  • Naciąganie siatki UV;

  • Dodatkowe opcje normalnych – cieniowanie gładkie, przeliczanie i odwracanie.

Koło, które posłuży do stworzenia sprężyny.
Sprężyna utworzona przy pomocy modyfikatora.

Armature deform

Jest to deformacja kształtu przy użyciu szkieletu, który jest niezbędny przy tworzeniu postaci. Moje wykorzystanie szkieletu zazwyczaj sprowadza się do zebrania do siebie poszczególnych części auta, przypisania kościom odpowiednich elementów i ustawienia pozy. Obecnie pracując nad poprawieniem prędkości i wydajności swojej pracy kombinuję nad wykorzystaniem tego modyfikatora podczas prefabrykacji części.

Żeby wytłumaczyć ogólnikowo na czym polega ten modyfikator posłużę się starą, dobrą Kariną 🙂 (tutaj jest wpis o niej). Może nie jest moim najlepszym projektem, ale jest jedyną dokończoną postacią. Zrobiłem ją wiele lat temu i wiem, że obecnie bym zrobił ją o wiele lepiej, ale teraz nie zajmuję się postaciami. Poniekąd z powodu niej – uświadomiłem sobie, że nie potrafię tego robić tak jak należy i dałem sobie spokój z postaciami i skupiłem się na modelowaniu samochodów i innych pojazdów.

Po stworzeniu modelu postaci trzeba ją jakoś animować. Służy do tego opisywany wyżej modyfikator. Najpierw tworzy się szkielet składający się z kości. Każda kość ma dwa końce główkę i ogon ich rozmieszczenie powinno odpowiadać stawom tworzonej postaci.

Domyślny wygląd modelu ze szkieletem.
Sam szkielet w trybie edycji.

Po rozmieszczeniu i nadaniu kościom odpowiednich nazw nadchodzi czas, żeby połączyć szkielet z postacią. Robi się to następująco: zaznacza się postać, później szkielet i używa się komendy Ctrl+P i wybiera się Armature Deform, najlepiej opcja: With Automatic Weights, ponieważ program automatycznie ustawia wagi, czyli wpływ poszczególnych kości na wierzchołki.

Łączenie postaci ze szkieletem.

Po połączeniu ze sobą ciała i szkieletu powstają grupy wierzchołków odpowiadające (deformującym) kościom. Wagi czyli wpływ kości na bryłę można ustawić na kilka sposobów: można je przypisać ręcznie w trybie edycji do poszczególnych grup lub „malując” w trybie malowania wag (Weight Paint). W tym trybie posługując się pędzlem dodaje/odejmuje się wpływ danej kości z malowanego obszaru.

Tryb malowania wag. Zaznaczona grupa lewego przedramienia – im bardziej czerwony kolor tym większy wpływ kości na dany wierzchołek.

Po tym zakończonym etapie można ustawiać pozy korzystając ze stworzonego szkieletu. Poruszając kośćmi porusza się wierzchołkami przypisanymi do nich w stopniu zdefiniowanym przez wagi.

Tryb pozy (Pose Mode).
Schowany szkielet.

Skin

Na koniec postaram się krótko opisać modyfikator, który zamienia krawędzie w prostopadłościany. Stosuję go gdy chcę zrobić jakąś konstrukcję z rurek np. ramę przestrzenną samochodu Mercedes-Benz 300 SL. W tym celu tworzy się odcinki rurek konstrukcji jako osobne linie (czasami zakrzywione lub łamane), żeby nie doszło do rozgałęziania, bo na łączeniach powstają zgrubienia. Wymiary poprzeczne każdej belki/rurki określane są w wierzchołkach komendą Ctrl+A. Żeby uzyskać okrągły przekrój stosuję modyfikator Subdivision surface. Przed zaakceptowaniem modyfikatora Subdivision surface trzeba zredukować ilość geometrii, bo Skin sieka geometrię i tworzy mnóstwo pomniejszych przecięć na belkach/rurkach.

Same wierzchołki i krawędzie, na których wykonywana jest operacja.
Działający modyfikator na krawędziach połączonych ze sobą w rogach, grubość przeskalowana komendą Ctrl+A.
Działający modyfikator na krawędziach nie połączonych ze sobą w rogach.
Gęste cięcie wynikające ze stosowania modyfikatora Skin.
Model „konstrukcji rurkowej” podzielony przy pomocy Subdivision surface.
Przewijanie do góry