Poradnik do modelowania obiektów 3D

Praca dyplomowa – Dawid Tomczyk

Rozdział 5: Teksturowanie

Rozpoczynamy ostatni etap modelowania – Teksturowanie. W tym rozdziale nadamy obiektom właściwy wygląd, poprzez nadanie im materiałów, w rozumieniu reakcji powierzchni modeli na padające na nie światło. Wszystkie właściwości są definiowane poprzez odpowiednie tekstury, bądź mapy. Zaczniemy od omówienia po krótce najważniejszych z nich:

  1. Diffuse/Albedo – Podstawowe mapy odpowiadająca za kolor. Stosowane wymiennie, w zależności od stylu i sposobu prowadzenia materiału. Różnica pomiędzy nimi jest taka, że Albedo to czysty kolor, natomiast Diffuse jest połączeniem kolorów oraz światłocienia.
  2. Normal Map – Mapa Normalnych. W końcu nadszedł czas na szczegółowe wyjaśnienie. W grafice cyfrowej istnieją 3 podstawowe barwy światła – RGB, czyli Red (Czerwony), Green (Zielony) oraz Blue (Niebieski). Podobnie w grafice trójwymiarowej, gdzie mamy do czynienia z przestrzenią, istnieją 3 osie – X, Y, oraz Z. Zauważyliście, że oznaczane są tymi samymi kolorami, co podstawowe barwy RGB?

    Myślę, że już wiecie do czego zmierzam 😀 Normal mapa jest niczym innym, jak graficznym zapisem NACHYLENIA powierzchni modelu HP do powierzchni LP w danym punkcie. Skala nachylenia w stopniach to od -180 do 180 stopni, natomiast w kolorach będzie to wartość od 0 do 256, przy czym brak nachylenia to wartość koloru 128. Wypalając mapę normalnych, wysyłamy promień idący prostopadle do powierzchni Low-Poly, który przechodzi przez High Poly, oraz wylicza tangens kąta nachylenia jego powierzchni, następnie odpowiednio zapisuje rotację trzech osi. Za dużo matmy i brzmi to trochę skomplikowanie, dlatego dołączam rysunek :


    Mam nadzieję, że wytłumaczenie nie pogorszyła sprawy 😀 W najgorszym wypadku wystarczy, że zapamiętamy, że normal mapa służy do zapisywania szczegółów z High-Poly, bądź materiałów (np. drobne nierówności na zardzewiałym metalu itp.)

  3. Ambient Occlusion – tekstura zapisująca cień w zakamarkach i wgłębieniach, dzięki niej model nabiera nieco kontrastu. Format koloru – skala szarości. Biały – brak cienia, Czarny – cień.
  4. Roughness – Mikroskopijna szorstkość materiału, zapisana w odcieniach szarości. Biały – obiekt całkowicie „szorstki”, rozpraszający światło; kolor czarny – obiekt idealnie „gładki”, odbijający całe światło. Dla przykładu, chcąc otrzymać efekt lustra, materiał musi być idealnie gładki, a więc szorstkość ustawiamy na zero. Inną odmianą tej mapy jest Glossiness, w której kolory są odwrócone.
  5. Metalness – Mateliczność obiektu, wpływa na kontrast powierzchni. Zabrzmi to banalnie, lecz metalowe obiekty posiadają wysoki współczynnik metaliczności.
  6. Transparency – tekstura warunkująca, jak bardzo przeźroczysty jest dany materiał. Skala szarości, w której kolor czarny oznacza całkowitą przeźroczystość. Czasami Transparency Map posługuje się także kanałem alfa, czyli przeźroczystością obrazka.

Istnieją oczywiście mapy dodatkowe, oraz inne warianty tych, które podałem, lecz te 6 w zupełności wystarczy, by rozpocząć przygodę z assetami do gier. Czasami zdarza się, że na materiał składają się tylko mapy Diffuse + Normal Map, a nawet samo Diffuse. Jak już wspominałem, wszystko zależy od wybranej stylizacji.

Wszystkie mapy zebrane razem, oraz ich kombinacje nazywamy mapami PBR.

Przechodzimy do właściwego etapu teksturowania, wracamy do Substance Paintera. Beczka, którą wymodelowaliśmy wcześniej zdecydowanie wystarczy do zaprezentowania podstaw, natomiast resztę tradycyjnie zobaczycie w materiale wideo na przykładzie fragmentów scenki z konceptu.

Otwieramy Substance Paintera 2, po rozdziale 4 powinniście już posiadać projekt z zaimportowaną beczką, wyposażoną w dodatkowe mapy, które wypalaliśmy – od tego momentu zaczynamy pracę z naszymi materiałami i teksturami.

Na początek nałóżmy podstawowy materiał na obiekt, w przypadku beczki. Dominującym materiałem będzie drewno, dlatego szukamy drewnianego materiału wśród dostępnych, w oknie „Shelf”, które domyślnie znajduje się w tym miejscu:

W podstawowej wersji Substance Paintera 2.4.1 jest jeden materiał, który spełnia nasze wymagania. Później pokażę gdzie szukać dodatkowych materiałów do użycia w waszych projektach 🙂

Materiał aplikujemy na obiekt przeciągając go z półki na okno z warstwami.

Na pierwszy rzut oka widać, że drewno wydaje się być zbyt połyskujące, bez obaw, każdy materiał dostosować można w tzw. oknie właściwości (ang. Properties).

Nie przeraźcie się 😀 znajduje się tutaj sporo suwaków, każdy z nich spełnia określoną funkcję, ilość oraz rodzaj różnych ustawień jest inny dla każdego materiału, w zależności od tego jak został zaprogramowany. Kilka najważniejszych opcji to:

  • UV Scale, Offset, Rotation – do stworzenia tego materiału użyto, między innymi, zdjęcia drewna. Ustawienia UV służą do zmiany przesunięcia, Skali oraz Rotacji tym zdjęciem, co w przypadku tego materiału zmienia rozmiar, kierunek oraz lokację „słojów” drewna. W przypadku metalu mogą to być nierówności bądź zadrapania które zostały dołączone do materiału.
  • Wood Color – tutaj nie trzeba wyjaśniać, tą opcją zmieniamy kolor drewna, sytuacja analogiczna do każdego innego materiału, którego kolorem można sterować.
  • Wood Roughness – jeśli kojarzycie z opisu map znajdującego się powyżej, opcja Roughness zmienia współczynnik połysku materiału, właśnie tą opcją zredukujemy efekt świecącego drewna, by uzyskać bardziej realistyczny efekt w przypadku naszej beczki.

Cała reszta suwaków zmienia przeróżne właściwości w taki sposób, żeby każdy mógł dostosować swój materiał do własnych potrzeb. Nie ma innej możliwości, niż najzwyczajniej „pobawić się” każdą z opcji i na własne oczy zobaczyć co robią, zachęcam do eksperymentów 🙂 Jak już wspomniałem, to, jakie suwaki znajdują się w oknie właściwości materiału, definiowane jest przez sam materiał.

Zmieniłem nieco ustawienia naszego materiału i uzyskałem następujący efekt:

Teraz nauczymy się nieco o warstwach oraz maskowaniu, otóż beczka posiada 2 oplatające ją metalowe pierścienie. Przeciągając materiał, jak w przypadku drewna, pokryjemy całą beczkę metalem, pod warunkiem, że warstwa z drugim materiałem znajdzie się NAD drewnem. W odwrotnej sytuacji nic się nie zmieni. Substance działa bardzo podobnie do Photoshopa, jeśli chodzi o warstwy.

Przeciągamy zatem metalowy materiał naszego wyboru nad pierwszą warstwę z drewnem.

Czynnością, którą teraz musimy wykonać, jest ukrycie całego materiału za pomocą maski. Maskę dodajemy klikając na wybraną warstwę prawym przyciskiem myszy, oraz wybieramy z menu opcję „Add Mask”. Mamy do wyboru:

  • białą – cała warstwa widoczna,
  • czarną – cała warstwa ukryta,
  • bitmapę – warstwa ukryta, bądź widoczna, w zależości od koloru na obrazku, który importujemy jako maskę,
  • with color selection – wśród dodatkowych tekstur możemy do modelu dorzucić tzw. „ID Map”, czyli teksturę, w której poszczególne grupy ścian modelu są pokolorowane na inny kolor. maska z selekcją koloru bierze pod uwagę kolor, który nas interesuje, natomiast resztę ukrywa.

Na powyższej ilustracji zaznaczyłem również nierówności z drewna odbijające się na warstwie powyżej, jak opanujemy pierścienie z metalu to poradzimy sobie z tym problemem tym samym sposobem 🙂

Teraz musimy operować utworzoną maską, by zdecydować, w których miejscach na modelu chcemy mieć dany materiał.  W tym celu zaznaczamy maskę kliknięciem, a następnie wybieramy narzędzie „Polygon Fill”, które jest jednym z wielu, lecz moim zdaniem bardzo wygodnym 🙂

Po wybraniu zaznaczonego narzędzia, model pokrywa czerwona siatka, która pokazuje nam podział modelu na ściany, czyli jego topologię. Polygon fill pozwala nam wypełnić dane face’y modelu bez potrzeby używania pędzla, który często okazuje się kłopotliwy, gdy potrzebujemy precyzji 😀

Po prawej stronie ekranu zaznaczyłem panel ustawień narzędzia Poligon Fill. Mamy tutaj 4 opcje wypełnienia: Tris, Face, Object, UV Island. Pojęcia Tris oraz Face znacie. Tryb Object wypełnia cały pojedynczy obiekt w rozumieniu przyłączonych elementów – jeśli zaimportowałbym 2 beczki na jednej UV ta opcja wypełni jedną. Uv Island to nic innego jak wyspa UV, to wypełnienie zadziała wewnątrz obszaru oddzielonego seam’ami od reszty.

Suwak poniżej opcji wypełnienia decyduje o kolorze maski, jakim wypełniamy dany obszar, biały – widoczny, czarny – ukryty, szary – półprzeźroczysty. W tej sytuacji używamy białego koloru by pokazać materiał.

Przypominam o zaznaczeniu maski materiału (pokazana na powyższej ilustracji w oknie warstw). Zdecydowałem się na tryb wypełnienia „UV Islands” gdyż seamy umieszczałem w poprzek beczki wzdłuż miejsc, gdzie kończą się metalowe pierścienie.

Klikając we właściwe miejsca na modelu wypełniam maskę białym kolorem. Można również przeciągnąć narzędziem nad obszarem, lecz należy pamiętać, że wypełni od również obszar znajdujący się ZA modelem, tak jakby go prześwietlił.

Teraz zajmę się odbiciami z drewna na metalu, dodaję białą maskę do materiału drewna, a następnie wypełniam kolorem czarnym miejsca, gdzie znajdują się metalowe pierścienie.

Żeby trochę urozmaicić nasz materiał użyjemy Generatorów, o których wspominałem wcześniej. Generatory pozwalają na MODYFIKOWANIE MASEK, nałożonych na różne materiały. Zapamiętajcie, generatory modyfikują maski. Są różne generatory, jak Dirt (brud), Metal Edge Wear (obtarte krawędzie) i inne.

Pozwolę sobie nie pokazywać ponownie czynności, które przeprowadzaliśmy już wcześniej, dlatego postarajcie się zapoznać z wcześniejszymi częściami rozdziału tak, aby rozumieć o czym piszę dalej 😀

Dodamy odrobinę rdzy, której kolor zmienimy na ciemny z domieszką zwykłego pomarańczowego. Materiał rdzy znajduje się w oknie Shelf. Dodaję materiał na warstwie ponad metalowm, zmieniam w jego właściwościach kolor i nakładam na niego maskę.

Oczywiście ilość rdzwy jest zdrowo przesadzona, ale to stan początkowy. Klikam prawym przyciskiem myszy na maskę materiału rdzwy w oknie warstw i wybieram opcję „Add Generator”.

Po prawej stronie pojawia się menu ustawień generatora, najpierw wybieram jego rodzaj,by następnie dostosować jego ustawienia. Opcje każdego z generatorów są inne – również w tej sytuacji trzeba wszystkiego wypróbować, by zrozumieć.

Wśród podanych ustawień pragnę wyróżnić 2 na samym dole: Ambient Occlusion Masking, oraz Curvature Wight. Właśnie to opisywałem wcześniej, generatory korzystają z dodatkowych map, możemy opierać się na nich, by nadawać generatorom pewne ich właściwości. Dla przykładu Ambient Occlusion to tekstura, która w zakamarkach modelu generuje cień. Generator Metal Edge Wear używa tej mapy, by unikać miejsc „schowanych”, które w realnym życiu zazwyczaj nie niszczą się tak jak te, które są widoczne i łatwo dostępne. Opcji z użyciem map jest wiele, dlatego pracę z teksturami powinno się zaczynać od wypalenia map, nawet jeśli nie posiadamy modelu HP.

Ustawiłem parametry generatora i uzyskałem następujący efekt, lecz jedna rzecz się nie zgadza:

Życie nauczyło mnie już wielu rzeczy – jedną z nich jest fakt, iż drewno nie rdzewieje. Otóż nasz generator zadziałał na maskę, ignorując jej wcześniejszy stan. Problem możemy łatwo naprawić stosując prostą sztuczkę:

W oknie warstw dodaję folder, przeciągam materiał rdzy wraz z maską i generatorem. Dodaję maskę do folderu i maskuję niechciane fragmenty modelu. Proste 😀

To, że materiał znajduje się w folderze możemy poznać po oddaleniu kropki, służącej do ukrywania warstw, od lewej krawędzi okna z warstwami.

Procedurę z generatorem powtarzam dla samego drewna, w tym celu skopiuję warstwę z drewnem (prawy przycisk -> Duplicate Layer, lub skrót klawiszowy Ctrl +D), pojaśnię ją w ustawieniach materiału, nałożę na nią generator, a następnie zastosuję trik z folderem. Otarcia na drewnie gotowe. Przy okazji pragnę ostrzec was przed nadmiernym stosowaniem tego typu generatorów, gdyż początkujący często mają taką tendencję 😀

Kolejnym problemem jest zbytnia „regularność” w realnym świecie nie zdarza się, żeby każdy obiekt niszczył się niemal dokładnie tak samo w każdym miejscu. Tutaj z pomocą przychodzi nam kolejne narzędzie. Klikam prawym przyciskiem myszy na generator, odpowiadający a wytarcia na drewnie, a następnie wybieram opcję „Add Paint” z menu.

Ta opcja pozwala na ręczne malowanie i modyfikowanie po masce utworzonej przez generator. Kolejność działania wszystkich modyfikatorów zależy od ich pozycji na liście, w tym przypadku Paint powinien znajdować się nad Generatorem.

Zaznaczyłem na screenie dużo rzeczy, dlatego je ponumerowałem, a teraz opiszę:

  1. Utworzona warstwa paint, znajdująca się nad Generatorem.
  2. Wybieramy narzędzie pędzla z przybornika
  3. Różne rodzaje pędzli znajdują się w oknie „Shelf”, pod zakładką „Brushes”
  4. Po wybraniu pędzla po prawej stronie wyświetlają się jego właściwości, mamy tam między innymi rozmiar, obrót, krycie, wahania krycia i rotacji, twardość pędzla. Substance Painter 2 i Photoshop są do siebie bardzo podobne pod wieloma względami, pędzle są jednym z nich.
  5. W oknie właściwości na dole znajduje się suwak skali szarości, pamiętamy o tym, że cały czas działamy na masce, więc w tym konkretnym przypadku biały będzie oznaczać przetarcie, a czarny brak przetarcia.

Po delikatnym podmalowaniu drewna, by nieco „przełamać generator”, powtarzam procedurę dla metalowych obręczy.

Uznałem, że przetarcia na drewnie są odrobinę zbyt mocne, dlatego zmniejszyłem przeźroczystość warstwy, na której się znajdują, krycie warstwy ustawiamy suwakiem, odpalanym kliknięciem na cyfrę obok warstwy.

Pracę z beczką zakończymy w tym miejscu. To, jak bardzo szczegółowo budujemy nasze tekstury zależy od widoczności modelu na scenie, jego rozmiaru, oraz wymagań projektu 🙂

Istnieją oczywiście inne techniki teksturowania, na przykład z użyciem zdjęć, naklejanych na siatkę UV w programie Adobe Photoshop, ale te metodę zostawimy sobie na filmik.

Nadeszła pora na eksport naszych tekstur, podczas eksportu wszystkie warstwy oraz kanały zostają scalone, a następnie przekonwertowane na tzw. „Texture Set” czyli zestaw tekstur. By rozpocząć procedurę eksportu wybieramy w menu głównym File -> Export Textures.., bądź używamy skrótu klawiszowego Ctrl + Shift + E.

Po wybraniu opcji otwiera się okno eksportu:

Krótki opis:

  1. Ścieżka eksportu, w niej wyląduje folder z paczką tekstur.
  2. Rozszerzenie pliku, oraz format kolorów.
  3. Config – najważniejsza opcja, w niej ustawiamy w jaki sposób mają być wyeksportowane nasze materiały, mamy do wyboru różne opcje, każda z nich wyrzuca inne tekstury, osiągając ten sam efekt. Wybierana konfiguracja zależy od docelowego miejsca uzycia naszego modelu, czy jest to Unreal Engine 4, Unity, czy inny silnk renderujący. Opcja „Sketchfab” pakuje wszystkie tekstury i model do pliku .zip, który po wrzuceniu na serwer Sketchfab sam ustawia wszystkie mapy, jednak użyjemy domyślnej, by samemu ustawić tekstury w następnym rozdziale.
  4. Metoda wypełnienia pustej przestrzeni na teksturach, możemy wybrać całkowite wypełnienie, przeźroczystość i inne. Suwakiem decydujemy o rozmiarze marginesu.
  5. Rozdzielczość wynikowa eksportowanych tekstur – przypominam o zasadzie rozmiarów, jako potęg dwójki.
  6. Lista eksportowanych tekstur.
  7. Przycisk zatwierdzający eksport tekstur

Eksportujemy tekstury i otwieramy docelowy folder.

Zaznaczone tekstury nie są nam potrzebne.

Do folderu z teksturami dołączamy nasz model LP w formacie .fbx (ten, który importowaliśmy do SP), pakujemy do archiwum (albo zostawiamy sam folder) i przechodzimy do ostatniego rozdziału poradnika, gdzie zaprezentujemy nasze dzieło w serwisie Sketchfab!

W materiale wideo poznacie inne techniki teksturowania, oraz dodatkowe instrukcje dotyczące programu Substance Painter 2.

Plik .blend