Ten wpis powinien powstać znacznie wcześniej, najlepiej na samym początku mojego tworzenia strony-bloga o tematyce graficzno-motoryzacyjnej. Postaram się tutaj opisać krótko najważniejsze zagadnienia związane z grafiką 3D i programem Blender 3D.
Tak na wstępie…
O samej grafice 3D i programie Blender 3D powstało mnóstwo publikacji i filmów osób znacznie bardziej kompetentnych ode mnie w tej materii i moją rolą nie jest kogokolwiek czegokolwiek nauczyć. Ten wpis powstał, żeby osoby nieobeznane z pojęciami grafiki 3D i geometrii wykreślnej wiedziały ogólnie o co w tym chodzi. Wpis powstawał bardzo długo, bo wymagał dużego nakładu pracy i zastanowienia się jak to napisać, żeby było zrozumiane.
Interfejs użytkownika programu Blender 3D
W celu opisu podstawowych części składowych programu posłużę się zrzutem ekranu (wersja 3.6 – ułożenie różnych przycisków i opcji zależne jest od wersji programu).
Podstawowe opcje programu;
Układy okien (layout) ułatwiające poszczególne procesy (modelowanie, rzeźbienie, edycję siatki UV, teksturowanie, cieniowanie, animację itd.);
Widok 3D (można wybrać inną funkcję tego okna);
Przycisk trybu (w zależności nad czym się pracuje dostępne są różne tryby):
Tryb obiektowy – umożliwia operacje dla całego obiektu (przesuwanie, obracanie, skalowanie);
Tryb edycji – umożliwia zmianę kształtu (wierzchołków, krawędzi, ścian) siatki 3D wewnątrz bryły;
Tryb rzeźbienia – umożliwia edycję siatki przy pomocy specjalnych narzędzi „rzeźbiarskich”;
Tryb malowania wierzchołków – umożliwia malowanie wierzchołków bryły przy pomocy pędzla – dane zapisane są wewnątrz pliku i mogą być wykorzystane do różnych operacji;
Tryb malowania wag – umożliwia malowanie wag (czyli wartości) dla danych wierzchołków w obrębie grup vertex-ów, np. przy rigowaniu z użyciem wag – określa się wówczas wpływ danej kości (tworzącej grupę vertex-ów) na dane wierzchołki w skali od 0 do 1;
Tryb malowania tekstury – umożliwia malowanie tekstur na modelach 3D.
Typ zaznaczania w trybie edycji (wierzchołki/krawędzie/powierzchnie);
Dodatkowe opcje dla danego okna;
Orientacja przekształceń – wybór układu odniesienia:
Globalne – współrzędne zdefiniowane jako globalne – domyślnie dla Blendera: x – oś podłużna (przód-tył), y – oś poprzeczna (lewo-prawo), z – oś pionowa (góra-dół);
Lokalne – układ współrzędnych wynikający z obrotu obiektu w trybie obiektowym – np. jeżeli obiekt został obrócony o 90° wzdłuż osi z, oś lokalna x odpowiada osi globalnej y – i odwrotnie – oś lokalna y odpowiada osi globalnej x;
Normalne – układ współrzędnych utworzony w oparciu o średnią normalną do zaznaczonych obiektów (o normalnych piszę trochę później);
Gimbal – wytłumaczenie tego jest skomplikowane, ale chodzi tu o efekt „Gimbal lock” – czyli utratę stopnia swobody.
Widok – układ współrzędnych wynikający z obecnego widoku – oś y – góra-dół, oś x – lewo-prawo, oś z – bliżej-dalej;
Kursor – układ współrzędnych w oparciu o obrót kursora 3D (piszę o nim później);
Parent – dotyczy struktury obiektów powiązanych ze sobą, współrzędne obiektu nadrzędnego;
Punkt obrotu przekształcenia – punkt, względem którego wykonywane są przekształcenia – środek obwiedni, kursor 3D, indywidualne środki obiektów (w przypadku zaznaczenia kilku), mediana (średnia z zaznaczonych) lub aktywny element (wyróżniony białym kolorem – w tym przypadku biały wierzchołek);
Przyciąganie (włącz/wyłącz) i do czego (punkty siatki, wierzchołki, krawędzie, projekcje płaszczyzny, najbliższej płaszczyzny, objętości, środków krawędzi i prostopadłych do krawędzi);
Edycja proporcjonalna – czyli przekształcenie (przesunięcie, obrót lub skalowanie) w pewnym promieniu i jej charakter (łagodny, sferyczny, liniowy, stały itd.);
Sposób wyświetlania – typy obiektów, pokaż gizma, pokaż „nakładki” (dodatki takie jak siatki, osie, kursor 3D, dane krawędzi i płaszczyzn – ich znaczniki, wymiary itd.), tryb rentgenowski (robi wszystko półprzezroczyste), 4 ostatnie przyciski z kulkami to cieniowanie (siatka, widok „zwykły”, podgląd materiału, renderowany) i rozwijane menu dodatkowych opcji cieniowania;
Symetria (według osi), automatyczne łączenie wierzchołków i dodatkowe opcje z nimi związane;
Gizmo umożliwiające przy pomocy myszy wybór widoku, przybliżanie/oddalanie, przeciąganie, widok z kamery i zmianę perspektywy na widok ortogonalny;
Boczny pasek z informacjami o zaznaczeniu i dodatkowymi opcjami narzędzi, widoku (ogniskowa, przycinanie widoku itd. opcje kursora 3D – jego lokalizacja i obrót względem układu współrzędnych globalnych) i używanych wtyczek do programu;
Wykaz obiektów – pokazuje strukturę kolekcji i obiektów na scenie, określa możliwość zaznaczania, widoczność i renderowanie obiektów;
Właściwości – jedno z najważniejszych okien:
Narzędzie – opcje wybranego narzędzia;
Render – opcje związane z renderowaniem, takie jak silnik graficzny, urządzenie obliczające, ilość próbek i wiele innych opcji;
Dane wyjściowe – rozdzielczość otrzymanego obrazu/filmu, ilość klatek filmu, stereoskopia, format zapisu i jego jakość, metadane i post-procesing;
Warstwy – zaawansowane opcje dotyczące warstw, w tym dodawanie mgły, głębi i innych efektów;
Scena – opcje dotyczące sceny, jednostki, grawitacja i inne;
Świat – zestaw parametrów określających otoczenie występujące poza obiektami modelowanymi, dodawanie tła itd.;
Kolekcje – ustawienia zaznaczonej kolekcji – możliwość zaznaczania, jej widoczność w oknie widoku i renderze itd.;
Obiekt – ustawienia zaznaczonego/edytowanego obiektu min. jego nazwa, położenie, obrót, skala, relacje z innymi obiektami, przynależność do kolekcji, widoczność itd.;
Modyfikatory – czyli operacje na danej bryle (opisuje je szczegółowiej w tym poście);
Cząstki – umożliwia dodane systemu cząstek – takich jak włosy, dym, ogień itd.;
Fizyka – umożliwia przeprowadzenie różnych symulacji z danym obiektem (pole siłowe, miękkie ciało, kolizje, płyny, ubrania itd.);
Ograniczniki – operacje wpływające na zachowanie obiektu (np. ograniczenia przemieszczania, obracania, skalowania);
Dane – zakładka zawiera dane geometryczne obiektu takie jak: grupy vertex-ów, Shape keys (różne warianty geometrii obiektu, które można miksować ze sobą tworząc jeszcze coś innego), mapy UV i inne;
Materiały – opcje materiałów wykorzystanych w danym obiekcie.
Boczny pasek narzędzi do modelowania – od góry:
Zaznaczanie;
Ustawianie kursora 3D;
Ruszanie;
Obrót;
Skalowanie;
Przekształcenie (ruszanie, obrót i skalowanie w jednym narzędziu);
Adnotacje;
Mierzenie;
Dodawanie bryły (z listy);
Wyciąganie (różne opcje);
wstawianie płaszczyzn;
fazowanie;
Loop cut – cięcie przez pół pętli czworobocznych płaszczyzn z możliwością przesuwania linii cięcia;
Nóż – dowolne wycinanie płaszczyzn;
Budowanie wielokątów;
Spin – tworzy nową, obróconą geometrię zaznaczania w oparciu o zdefiniowany układ współrzędnych i kursor 3D jako punkt obrotu;
Wygładzanie/losowe zniekształcanie zaznaczenia;
Przesuwanie krawędzi/vertex-ów wzdłuż krawędzi;
Pogrubianie/zmniejszanie („nadmuchiwanie” bryły), pchanie/ciągnięcie (odpychanie i przyciąganie vertex-ów);
Ścinanie (tak w sumie to powinno być pochylanie zaznaczenia w określonym kierunku) lub „Do sfery” (zmienia w miarę możliwości zaznaczenie w kulę);
Odrywanie regionu/krawędzi – odseparowuje zaznaczenie lub krawędź.
Dodatkowe opcje narzędzia zaznaczania;
Edytor nod-ów (w tym przypadku shader-ów).
To co jest powyżej to bardzo ogólnikowe opisanie okna programu i dosłownie wierzchołek góry lodowej, jaką jest Blender. Program jest bardzo rozbudowany i dlatego zainteresowanych odsyłam do filmów na YouTube o tym programie. Ja też nie jestem w stanie wytłumaczyć wszystkiego i przypuszczam, że nawet Blender Guru, który od bardzo wielu lat tworzy filmy o tym programie nie umie go w 100% wykorzystać.
Pojęcia związane z grafiką 3D
Poniżej postaram się opisać kilka wybranych najważniejszych terminów związanych z grafiką 3D. Oczywiście nie jestem wybitnym ekspertem w tłumaczeniu działania poszczególnych terminów, bo ich wytłumaczenie jest dość skomplikowane, ale postaram się opisać je w sposób najbardziej przystępny.
Armatura/rig/szkielet – są to pojęcia stosowane przeze mnie zamiennie. Jest to obiekt, który posiada kości jak szkielet. Poszczególne kości powiązane są ze sobą różnymi zależnościami. Każda kość składa się z główki o ogona. Pozycję, rozmiar, rodzaj i hierarchię kości ustala się w trybie edycji. Dodatkowe właściwości kości i zależności między nimi ustawia się w trybie pozy. Szkielet umożliwia poruszanie bryłami (poprzez parentowanie) lub ich częściami (modyfikator Armature Deform) w sposób nieinwazyjny. Przypisanie vertex-ów do danej kości odbywa się przez dodanie ich do grupy vertex-ów o nazwie kości. Wierzchołki można wybierać ręcznie lub poprzez malowanie wag w trybie Weight Paint.
Szkielet jest niezbędny do rigowania, które jest jednym z etapów tworzenia postaci. Ja najczęściej stosuję szkielet w celu złożenia razem wszystkich części składowych auta z możliwością poruszania elementów ruchomych (drzwi, maska, koła itd.) w określonych osiach i zakresach ruchu. Czasem wspomagam się szkieletem w celu dopasowania części i ustawienia ich punktów charakterystycznych (wspominałem o tym we wpisie o prefabrykacji).
Cieniowanie – najprościej, jest to sposób w jaki wyświetlany jest obiekt. W programie do wyboru są 3 rodzaje cieniowania:
Cieniowanie gładkie (Smooth) – renderuje i wyświetla płaszczyzny gładko, używając interpolowanych normalnych wierzchołków;
Cieniowanie automatyczne gładkie (Auto Smooth) – bazuje na kątach między sąsiednimi płaszczyznami. Określa się kąt pomiędzy ścianami, poniżej którego krawędzie określane są jako ostre (domyślnie 30°, ja stosuję 60°). Dodatkowo krawędzie zdefiniowane jako ostre, są tak traktowane.
Cieniowanie płaskie (Flat) – renderuje i wyświetla płaszczyzny jednorodnie używając normalnych do płaszczyzn.
Kursor 3D – jest to punkt odniesienia w przestrzeni programu. Służy jako punkt odniesienia przy: dodawaniu nowych brył, niektórych operacjach (spin) i przekształceniach (gdy układem odniesienia jest kursor 3D). Służy też do określenia punktu początkowego obiektu (Origin). Można go zdefiniować na kilka sposobów:
Shift + PPM (prawy przycisk myszy) – ustawia się wtedy na płaszczyźnie, która jest w miejscu kliknięcia obrócony zgodnie z rotacją widoku z danym momencie;
wybierając narzędzie Cursor z lewego paska narzędziowego – wtedy przyciskając LPM (lewy przycisk myszy) otrzymujemy efekt jak powyżej;
Mając zaznaczony obiekt lub element geometrii, komenda Shift + S, z menu kołowego wybiera się Cursor to selected;
Wpisując jego współrzędne i obrót w bocznym menu (Rys. 1 punkt 14) pod zakładką Widok (View).
LoD (Level of Detail) – są to wersje modelu 3D różniące się szczegółowością. Numeruje się poszczególne poziomy od LoD0 (obiekt najbardziej szczegółowy), poprzez kolejne liczby odpowiadające kolejnym zmniejszającym się poziomom szczegółowości danego modelu 3D. Kolejne poziomy LoD najczęściej uzyskuje się poprzez redukcję geometrii modelu. Różne poziomy szczegółowości stosuje się w przypadku, gdy kamera w grze oddala się od obiektu (jest definiowany zakres danych LoD), żeby silnik graficzny gry nie musiał obliczać całej geometrii obiektów, które widzimy daleko i nie muszą być super dokładne.
Mapa normalnych (Normal map) – tekstura obrazująca zmiany normalnych w obrębie danej bryły. Ma kolor niebiesko-fioletowy. Wynika to z obrazowania normalnych. Kolor niebieski odpowiada za normalną oś z, zielony za oś y, a czerwony za oś x. Z kombinacji tych kolorów powstają różne odcienie. Program rozpoznaje na podstawie koloru i jego wartości kierunek i wielkość zmian normalnych i w ten sposób zmienia rozkładanie się światła na obiekcie. Mapa służy do dodawania szczegółów na powierzchniach brył. Mapę się „wypieka” (Bake) z obiektu o wyższej geometrii/szczegółowości (high-poly) lub z map wypukłości podłączonych do danego obiektu.
Mapa UV/Siatka UV – siatka bryły rozłożona na płaszczyznę w celu zastosowania na niej tekstury. Można ją zobrazować jako diagram papierowego modelu, który po wycięciu, zgięciu i sklejeniu staje się trójwymiarowym obiektem.
Mapa wypukłości (Bump map) – czarno-biała tekstura obrazująca zmiany wysokości na danych powierzchniach. Im jaśniejszy kolor tym wyżej, ciemniejsze obszary są poniżej umownego poziomu. Ma podobne zastosowanie jak mapa normalnych – służy do dodawania szczegółów na powierzchniach brył. Można ją stworzyć bez większych problemów w zewnętrznym programie. Nie jest obsługiwana wszędzie i efekt wyświetlanych detali jest bardziej „kanciasty” (z powodu voxel-owego wyświetlania wypukłości) niż w przypadku mapy normalnych.
Materiał – zbiór parametrów opisujący to z czego zbudowana jest bryła. Obiekt może składać się z wielu materiałów. Materiały wykorzystują różne parametry, które czasami mają wartości liczbowe, kolor lub teksturę. Najbardziej podstawowymi parametrami są:
kolor (jednorodny RGB lub tekstura);
chropowatość/szorstkość – ilość światła odbijana od obiektu – im wyższa wartość tym bardziej matowy materiał. Odwrotnością tego parametru jest połyskliwość (glossiness), używana w niektórych programach. Definiuje się ją jako wartość liczbową (0-1) lub jako czarno-białą teksturę, gdy ulega lokalnym zmiennościom;
metaliczność – określenie czy materiał ma charakter metalu lub nie. Wartość może być liczbowa (gdy jest jednakowa dla całego materiału) w przedziale 0-1, lub czarno-białą teksturą, gdy jest zmienność;
mapa normalnych – w celu zobrazowania zmian padającego światła na dane powierzchnie, w ten sposób dodając detale powierzchni.
Kombinacja co najmniej tych czterech parametrów zobrazowanych teksturami daje materiał fotorealistyczny (PBR).
Modyfikator – polecenie wykonywane przez program poza trybem edycji, efekt zazwyczaj wyświetlany jest w czasie rzeczywistym. Do zaakceptowania modyfikatora niezbędne jest przejście w tryb obiektowy. Stosowane przeze mnie modyfikatory opisuję szczegółowiej w tym poście, ale tutaj w skrócie:
Mirror – tworzy lustrzane odbicie bryły;
Subdivision surface – dzieli siatkę bryły i wygładza geometrię;
Boolean – wycina lub dodaje bryłę jedną do drugiej;
Shrinkwrap – naciąga siatkę obiektu na stworzone wcześniej „prawidło”;
Array – tworzy duplikaty obiektu liniowo lub obrotowo;
Screw – śrubowo wyciąga dany obiekt; przydatne przy tworzeniu sprężyn;
Armature deform – umożliwia zastosowanie szkieletu.
Normalna, układ współrzędnych normalnych, orientacja płaszczyzn – Normalna jest to wektor leżący na prostej prostopadłej do danej płaszczyzny. Według geometrii wykreślnej jest to parametr opisujący tylko i wyłącznie płaszczyzny, nie istnieje normalna do odcinka lub punktu. Wykładowca z „Kresek” (tak na studiach nazywaliśmy przedmiot o nazwie „Geometria i grafika inżynierska”) zabiłby śmiechem delikwenta, który powiedziałby, że istnieje normalna do punktu lub odcinka. Ale w tym programie coś takiego jest możliwe. O ile jeszcze ma to sens w przypadku bardziej złożonej geometrii (Rys. 2, 3 i 4), bo istnieje jakiś kontekst, o tyle w przypadku oderwanych elementów są prawdziwe cuda na kiju (Rys. 5 i 6).
Bo na jakiej podstawie te kierunki są obliczane? Wracając do układu współrzędnych normalnych. Kierunek normalnej to oś z (niebieska), dłuższy wymiar obliczony ze średniej geometrycznej płaszczyzny to oś y (zielona), krótszy wymiar (prostopadły do pozostałych) to oś x (czerwona). Z racji tego, że normalna jest wektorem, posiada dwa kierunki. Dlatego płaszczyzny posiadają dwie strony: „przednią” (face) i „tylną” (backface). „Przednia” strona jest traktowana jako zewnętrzna i transformacje od niej liczone są jako dodatnie, a od wewnętrznej, „tylnej” strony liczone są jako ujemne. Orientacja płaszczyzn jest istotna, bo umożliwia tzw Backface culling (usuwanie tylnej powierzchni), jest to opcja wyświetlania, która powoduje, że tylne ścianki stają się przejrzyste. Orientacja jest istotna także przy używaniu modyfikatorów, ponieważ czasem wynikają z tego problemy. Generalnie jest wiele modyfikatorów wrażliwych na zmienione kierunki normalnych płaszczyzn i dlatego należy uważać, by nie mieszać różnych kierunków płaszczyzn ze sobą. Orientację płaszczyzn można sprawdzić używając opcji Face Orientation w rozwijanym menu Viewport Overlays – płaszczyzny o orientacji zewnętrznej wyświetlane są na niebiesko, a płaszczyzny o odwróconym kierunku na czerwono. Na rysunku 7 zmieniłem kierunek jednej płaszczyzny (czerwona, odbita symetryczne przez modyfikator Mirror) i spowodowało to dziwne zachowanie modyfikatora Subdivision Surface. Kierunki normalnych płaszczyzn można zmieniać używając komendy Alt + N → Flip.
Parentowanie – nie wiem czy taki termin istnieje i jak to przetłumaczyć, ale jest to ustalanie hierarchii obiektów. Obiekt nadrzędny (Parent) wpływa na obiekty podrzędne. Przemieszczenie, obrócenie i skalowanie obiektu nadrzędnego powoduje analogiczne przekształcenie obiektu (lub obiektów) podrzędnych. Najłatwiej zobrazuję to przykładem (Rys. 8): pusty obiekt F_Wheel.L (zaznaczony na niebiesko w outlinerze po prawej stronie) posiada przypisane 2 bryły Brake Disc FL i Wheel FL, a sam jest przypisany do kości szkieletu F_Wheel.L. Obrót kości powoduje obrót pustego obiektu, a ten powoduje obrót brył przypisanych. Kiedy obraca się bryły przypisane obiekt nadrzędny nie rusza się.
Początek układu współrzędnych obiektu (Origin) – punkt odniesienia, względem którego rozpatrywany jest lokalny układ współrzędnych danego obiektu. Służy modyfikatorom do określenia symetrii, punktu obrotu itd. Domyślnie wyświetlany jako pomarańczowy punkt.
Shape keys – są to różne warianty geometrii jednego obiektu. Na początku tworzy się Bazę (Basis), względem której będą wykonywane przekształcenia. Następnie tworzy się poszczególne „klucze” i modyfikuje się ich geometrię. Shape keys umożliwia robienie miksów różnych „kluczy”, co daje możliwość tworzenia różnych wariantów przejściowych między nimi. Dość dokładnie opisałem działanie we wpisie o prefabrykacji, gdzie zobrazowałem zastosowane na przykładzie opony samochodowej.
Tekstura – obraz dwuwymiarowej grafiki rastrowej służący do zobrazowania zmian danego parametru na obiekcie trójwymiarowym. Najprostszą do opisania jest tekstura koloru, która wskazuje gdzie jest jaki kolor. Można ją porównać do pozłotka z czekoladowego zajączka lub Mikołaja, które po rozłożeniu jest płaskie.
Topologia – ogólnie, jest to rozłożenie siatki na bryle 3D. Można by bardzo długo opisywać zasady poprawnej topologii (być może powstanie o tym wpis w przyszłości). Generalnie chodzi o to, by siatka była rozłożona równomiernie i utworzona najlepiej z czworokątów stykających się po cztery w każdym wierzchołku siatki (oczywiście nie zawsze się tak da). Ja osobiście uznaję, że stosowanie trójkątów i wieloboków nie jest tragedią, o ile wie się dlaczego i jak to powinno być stosowane.
Voxel – trójwymiarowy piksel, czyli sześcian element składowy modelowania bryłowego opartego na voxel-ach.
Wielokąt/n-gon – powierzchnia składająca się z więcej niż 4 kątów. Trójkątów i czworoboków nikomu nie będę tłumaczył. Wielokąty i czworokąty mogą być wypukłe lub wklęsłe. Każdy trójkąt jest figurą wypukłą. Wszystkie powierzchnie przetwarzane są przez program na siatkę trójkątów w wyniku triangulacji.
To chyba na razie tyle, jeśli chodzi o podstawowe terminy. Jeżeli coś jeszcze uznam za potrzebne, zamieszczę w tym wpisie.



