Grafika 3D

Opis i założenia przedmiotu

Założenia tego przedmiotu są następujące: jest on prowadzony dla osób, które nie znają jeszcze użytkowej strony grafiki komputerowej, oraz dla takich, które nie znają grafiki komputerowej tworzonej w Blenderze. Blender jest programem "wykładowym" i tłumaczone ogólne zasady pracy w grafice przedstawiane są z wykorzystaniem Blendera. Nie są akceptowane inne programy. W trakcie tego kursu studenci poznają podstawowe zasady modelowania oraz tworzenia fotorealistycznych materiałów, a następnie wykonują rendery i aplikują do nich przetwarzanie końcowe. W optymalnym przypadku student, który kończy ten przedmiot, potrafi wykonać całkiem spektakularne prace graficzne, które może umieścić w swoim portfolio.

O czym jest tu mowa

Pełny, "idealny" program przedmiotu i przedstawione zagadnienia wyobrażam sobie tak:

Wstęp

Są to często bardzo intensywne zajęcia, omawiamy uruchomienie, konfiguracja (wraz z wyjaśnieniami) i poruszanie się w programie Blender. Przesuwanie widoku, zbliżanie, oddalanie. Zaznaczanie elementów. Dla początkujących, czyli dla studentów, którzy nie zetknęli się jeszcze z oprogramowaniem tego typu jest to ogromna ilość informacji, które trzeba przyswoić w krótkim czasie. Niektórzy wychodzą z takich zajęć lekko przeciążeni, a wielu wraca do podstaw za jakiś czas, aby sprawdzić, jak się robiło coś podstawowego. Zależnie od zdolności i pojemności mentalnej grupy czasami ograniczam ten wstępny materiał do podstawowych, elementarnych rzeczy. Są to:

Praca w Trybie Obiektowym

Dodawanie, organizacja, przesuwanie i zarządzanie obiektami na scenie 3D. Podstawowe operacje zaznaczania (czasami o tym nie mówię na tym etapie). Widoki, osie, transformacje podstawowe: przesuwanie, obrót oraz skalowanie, manipulatory. Na tym etapie często budujemy domki z klocków, ustawiamy te klocki np. w idealnym kole, lub tworzymy podobne struktury z wielu obiektów, aby praca w programie, obracanie widoku i klawiszologia stała się dla uczestników trochę bardziej znajoma.

Tryb Obiektowy i transformacje GRS

Jeżeli jest czas na drugie zajęcia z tego trybu, pokazuję zmiany ośrodka transformacji (są to operacje na pivot), podsuwanie, wyrównywanie i kontrola wielu obiektów jednocześnie. Pokazuję, że obrót oraz skalowanie także mogą wywoływać przesunięcie (często wywołuje to wielkie zdziwienie). Poznajemy opcje trybu wyłączające działanie transformacji na ściany, tłumaczę, czym jest centrum obiektu. Czasami także wspominam o kolekcjach, ukrywaniu obiektów i ustawieniach oraz pozycjonowaniu kamery. Na tym etapie często tworzymy bałwanka, parasol ze słomy (tutaj pokazuję jak zrobić losową dystrybucję obiektów), drewniane wózki dla dzieci lub inne obiekty, które można złożyć z wielu prostych obiektów. Czasami proponują zbudowanie domu z cegieł. Na tym etapie w grupach zazwyczaj pojawiają się dążenia do wyrenderowania swojej pracy w postaci grafiki, zatem pokazuję także jak ustawiać i pozycjonować kamerę oraz światło, i jak wyrenderować i zapisać obrazek.

Praca z modyfikatorami

Na tym etapie pokazuję jak działa niedestrukcyjne modelowanie parametryczne za pomocą modyfikatorów. Tworzymy na zasadzie studium przypadku i wykładu problemowego takie obiekty jak: studnia, łańcuch, śmigło, beczka lub inne, które tworzone są z podstawowych obiektów prymitywnych takich jak kwadrat, sześcian itp. Zachęcam tutaj do eksperymentów i odkrywania możliwości jakie daje modelowanie niedestrukcyjne.

Praca w Trybie Edycji

Zaczynamy pierwsze podejście do modyfikacji obiektów prymitywnych. Zmiana położeń wierzchołków, krawędzi, ścian, zaznaczanie i usuwanie fragmentów siatki. Edycja prostych modeli - stolika, krzesła i innych obiektów z bezpośredniego otoczenia studenta. Następnie, często na kolejnych zajęciach poznajemy operacje edycyjne: Extrude, Spin, Inset, Bevel, Fill, Subdivide, oraz dodatkowe operacje potrzebne podczas modelowania: Rip, Yank, Slice, Slide, LoopCut oraz dodatkowe bardziej zaawansowane tryby zaznaczania i odznaczania, np. Rings, Checker Deselect, itp. Na tym etapie pokazuję czasem, jak wycinać koła z różnych zakrzywionych powierzchni, jak zrobić butelkę lub talerz (bryły obrotowe), rury, domki różnego kształtu lub bardziej skomplikowane krzesło.

Praca z krzywymi

Ten temat czasami pomijam ze względu na brak czasu. Jednak gdy ten czas jest lub grupa o to zapyta, wprowadzam inne elementy niż praca z meshami: pracę z krzywymi, z metakulami lub z powierzchniami parametrycznymi. Pokazuję jak wstawić powierzchnie generowane przez funkcje matematyczne. Tworzymy także układ dwóch krzywych w modelu Bevel Object, gdzie jednak krzywa jest prowadzona po innej krzywej aby utworzyć powierzchnię. W ten sposób możemy modelować np. naczynia, używając ich obrotowej symetrii. Wspominam także o tworzeniu i obsłudze tekstu, jednak na to jest bardzo mało czasu. Zwykle odsyłałem do odpowiednich kursów na YT, aby zainteresowane osoby mogły sobie zobaczyć o co chodzi. Bo tak, w Blenderze można pisać własnoręcznie zrobionymi przez siebie czcionkami... oprócz zwykłych czcionek z systemu lub ładowanych na żądanie.

Praca z modyfikatorami w Trybie Edycji

Ten temat także poruszam rzadko, a studenci sami często odkrywają podstawy modelowania hard-surface, które jest w tym modelu dość efektowne. Pokazuję jak modelować siatkę wraz z nałożonymi modyfikatorami, a następnie robimy przegląd wtyczek, które takie modelowanie usprawniają - pokazuję np. add-ony takie jak Fluent, MeshCutter lub BoxCutter, z oferty Blender Market.

Tryb Rzeźbienia

Jest to tryb pracy z wielkimi siatkami, których rozmiar w wierzchołkach może przekraczać miliony. Dlatego ten osoby tryb wnosi wiele nowego - pojęcia takie jak retopologia, dynamiczna topologia, multiresolution i rzeźbienie na warstwach, oraz ogólne podstawy korzystania z pędzli i workflow. Zwykle pokazuję i omawiam większość pędzli oraz ich przydatność do specyficznych zastosowań, a potem tłumaczę jak zmieniać opcje pędzli - jak np. pracować z siłą nacisku, teksturami modyfikującymi własności pędzla, zanik, rozproszenia, wygładzanie i różne inne specyficzne operacje. Na zakończenie pokazuję rzeźbienie detali za pomocą rzutowania Stencil (oraz czasami Rake lub ViewPlane), ale to jest tylko dla tych grup, które są w stanie to ogarnąć. Mówimy także o maskowaniu. Rzadko wspominam o FaceSetach i rzadko pracujemy z Multiresem (przyczyną było też to, że przez wiele lat nie działał on za dobrze, teraz jest już doskonały, tylko nie ma czasu o tym mówić).

Światło

Omawiam zasady działania światła, wychodząc od fizyki barw, tłumaczę czym są kolory, badamy koło kolorów oraz modele addytywne i substraktywne. Uczymy się jak analizować barwę i jak przewidywać jakie będą kolory po zmieszaniu dwóch barw w różnych modelach. Dla niektórych jest też nowością sposób kodowania koloru na stronach WWW w postaci liczb szesnastkowych, więc sposoby takiego kodowania także omawiam (modele RGB oraz HSV także). Jeżeli starcza czasu, robimy eksperymenty ze światłem. Pokazuję także na czym polega światło środowiskowe w postaci tekstur generujących oświetlenie otaczające (wyjaśniam też skrót HDR), pobieramy mapy światła ze strony HDRi Heaven, oraz pokazuję jak w Blenderze ustawić światła na scenie do podglądu i do renderowania. Poznajemy także matcapy (chociaż często wspominam o nich już na etapie rzeźbienia). Na tym etapie studenci dowiadują się także jakie są typy oświetlenia i jak wielkość światła wpływa na miękkość cienia. Jeżeli starcza czasu, to pokazują także pierwsze zastosowania Nodów i ładuję opisy fizycznych lamp z plików IES, tłumacząc ich zastosowanie. Gdy nadal jest czas, pokazuję jak działa mechanizm zbierania światła w oknie (tzw. Portal), które umożliwia poprawne renderowanie scen gdzie światło otoczenia wpada przez niewielki otwór do zamkniętego pomieszczenia (sytuacja gdy promień światła wpada do pokoju przez okno). Zadania na tym etapie polegają na stworzeniu oświetlenia podsuniętej sceny w sposób zgodny z wytycznymi.

Materiały podstawowe

Omawiam podstawowe sposoby pracy z materiałami - zarządzanie, dodawanie, zmienianie, usuwanie, oraz pokazuję jak tworzyć wiele materiałów na jednym obiekcie. Wykorzystuję w tym celu model Kostki Rubika, który tworzę w trakcie. Następnie przechodzę do omawiania i pokazywania podstawowych shaderów liczących za pomocą funkcji BSDF własności światła wchodzącego w interakcje z powierzchnią. Tłumaczę też jak biegnie światło w modelu Diffuse, Specular, Subsurface Scattering, Transluency, Transparency, itp. Jest to pierwszy wykład w którym oficjalnie pojawiają się kolorowe, bardzo ładne rzeczy. Często studenci dopominają się wcześniej, aby zrobić coś kolorowego, jednak czekam aż do tego momentu z większością wyjaśnień, bo dopiero na tym etapie są w stanie swobodnie zarządzać sceną, tworzyć i oświetlać obiekty. Na wcześniejszych etapach ta wiedza byłaby im nie do końca przydatna. W trakcie tych zajęć tworzymy materiały dla obiektów zbudowanych wcześniej lub tworzonych ad-hoc w trakcie zajęć. Dobrym przykładowym zadaniem jest tutaj szybkie wymodelowanie kubka z uszkiem, który w środku jest np. biały a na zewnątrz czerwony. Inny dobry pomysł to zbudowanie obiektów jednorodnych, takich jak szklanki, dzbanki, wazony, itp. Mogą być także metaliczne sztućce lub elementy maszyn. Na tym etapie nie wiadomo jeszcze jak tworzyć tekstury i szczegóły powierzchni, dlatego nie wchodzę w tworzenie bardziej złożonych rzeczy. Oprócz tego pokazuję jak działa rozpraszanie podpowierzchniowe światła (Subsurface Scattering) i od tego momentu studenci wiedzą już co charakteryzuje rzeźby z drewna a co żywych ludzi. Pokazuję także różnego rodzaju obiekty i analizujemy ich własności powierzchniowe, próbując dopasować do nich najlepsze szadery.

Tekstury proceduralne

Ten temat jest naturalnym rozwinięciem poprzedniego. Materiały na powierzchni obiektów nie zawsze są jednorodne, a pojawiające się na nich zabrudzenia, plamy, rysy lub warstwy zmieniają własności powierzchni. Uczymy się zatem o teksturach takich jak Voronoi, Noise, Gradient, Marble, Wave i innych. Tekstury te są bazą do definiowania bardziej zaawansowanych tekstur. Omawiamy także krótko przestrzenie wektorowe w których tekstury są układane na obiektach, aby potem przy mówieniu o teksturach bitmapowych ten trudny temat był bardziej zrozumiały. Na tym etapie tłumaczę także jak zmieniać własności powierzchni takie jak mikronierówności, omawiamy zatem działanie BumpMap oraz NormalMap, tłumaczę jak kodowana jest w plikach informacja o wzniesieniach i nachyleniach powierzchni, i wszystko testujemy na jakichś przygodnych modelach tworzonych ad-hoc. Ten temat jest dość duży, dlatego czasami pokazuję na kolejnych zajęciach jak można za pomocą tekstur zmieniać inne tekstury, używając ich do modyfikowania przestrzeni współrzędnych, tworząc naprawdę zaawansowane materiały o dużym stopniu skomplikowania.

Tekstury bitmapowe

Gdy temat tekstu jest już mniej-więcej rozpoznany, wskazuję na pewne trudności w zarządzaniu układem tych tekstur, to znaczy np. trudnością w obróceniu danej tekstury proceduralnej na tylko jednej ze ścian obiektu. Wyjaśnienia prowadzą nas do tekstur bitmapowych, których nakładanie na materiał leżący na obiekcie pokazuję zwykle na przykładzie Sześcianu, Walca oraz Kuli. Analizujemy różne rodzaje mapowania tekstury: Generated, Object, Normal, oraz inne. Uświadamiam studentom, że to jak tekstura jest nałożona na obiekt zależy od nas, i pokazuję jak zmienić współrzędne. W przypadku tekstur bitmapowych przechodzimy następnie do rozwijania siatki UV i metod pracy z siatką. Tłumaczę jak rozwijać siatkę ręcznie i automatycznie, jak kontrolować szwy i wielkość oraz ilość wysp. Pokazuję UVPackMakera - addon który polepsza pakowanie przestrzeni UV dla większej liczby wysp niż chcielibyśmy samodzielnie układać. Studenci po tym etapie mają lekkie zawroty głowy od możliwości, które się przed nimi otwierają i muszą ten temat trochę przetrawić, dlatego potem do tego wracamy.

Projection Painting

Pokazuję jak można malować obiekt 3d w przestrzeni 3d używając pędzli, tekstur oraz różnych narzędzi, które częściowo przypominają narzędzia poznane podczas rzeźbienia. Mowa jest tutaj o pędzlach, teksturach, oraz o wielu różnych rozwinięciach siatki UV, wg. których wykonywane są rzuty projekcyjne. Następnie pokazuję jak można klonować teksturę nałożoną w projekcji na inną teksturę z użyciem innego rozwinięcia UV. Dobrym przykładem na takie zajęcia jest teksturowanie gruszki, a jeszcze lepszym teksturowanie swojej głowy na podstawie kilku zdjęć. Są to już dość zaawansowane zajęcia i dość trudne, dlatego tutaj więcej czasu zostawiam na pracę samodzielną.

Baking

Omawiam w jaki sposób można przeprowadzić częściowe renderowanie sceny 3D i wypalenie w materiałach odpowiednich dla danej sytuacji tekstur. Takie tekstury mogą zawierać informacje o cieniach, emisji światła lub wśród wielu innych - o nierównościach powierzchni. Omawiam wypalanie NormalMap oraz różne przypadki gdy ze względu na skomplikowanie obiektów nie chce to działać i trzeba posługiwać się technikami zaawansowanymi - np. wysyłaniem promieni lub stosowaniem klatki (ang. Cage). Pokazuję także, jeżeli starcza czasu jak bardzo można przyspieszyć render, gdy wypali się część lub całość tekstur, a silnik nie musi liczyć części lub całości światła. Typowo, proste sceny które renderują się w czasie kilkudziesięciu sekund można przyspieszyć do paru sekund. Ma to duże znaczenie podczas tworzenia animacji oraz w grach komputerowych.

Rendering, Global Illumination i CrazyShader

Rzadko mam czas na ten temat, ale gdy mam, to pokazuję opcje renderowania i możliwości redukcji szumów oraz przyspieszenia całego procesu. Podczas tych zajęć omawiam tematy takie jak Global Illumination oraz tłumaczę jak działa silnik renderujący posługujący się metodą Light Path Tracking. Następnie, gdy podstawowe opcje silnika są zrozumiałe, uczymy się jak ograniczać szumy np. w materiale z prawdziwą dyspersją światła przechodzącego przez diament. Gdy jest więcej czasu pokazuję tzw. Crazy Shader, czyli wykorzystanie informacji o ścieżkach światła, które daje nam silnik i stworzenie materiału, który wygląda normalnie, dopóki nie patrzy się na niego przez szkło, lub gdy nie zacznie się odbijać w lustrze (wtedy zmienia swoje właściwości). Taki materiał może mieć kolor czerwony gdy odbija się od gładkiej powierzchni, a jednocześnie posiadać kolor fioletowy (na przykład), gdy odbija się od powierzchni matowej, itp. Na tworzenie takich zaawansowanych materiałów pozwala silnik Cycles.

Post-processing

Jest to końcowy etap kursu. Pokazuję tzw. Render-Passy, czyli możliwość ingerencji post-factum w to, co zostało wyrenderowane i zmiana niektórych własności końcowego obrazka. Uczymy się tutaj jak dodać efekty takie jak rozmycie ostrości, rozmycie ruchu lub kontrast, jak zmieniać kolory po wyrenderowaniu sceny oraz jak usuwać szum za pomocą Bilateral Blur i odszumiania algorytmami OptiX. Pokazuję jak stworzyć efekt winietowania, jak połączyć warstwy renderowanie w render-passach, jak dodać do siebie obrazki bazując na głębi obrazu i wiele innych rzeczy. Te zajęcia przechodzą czasami w osobny przedmiot - Efekty Specjalne SFX, gdzie w rozbudowany sposób pracujemy z Greeen Screenem lub innymi technikami.