Programowanie gier komputerowych Tomasz Martyn Wykład 3. Cykl produkcyjny wytwarzania gry (2): Tworzenie geometrii levela Content Browser i Assety w UDK
Tworzenie geometrii levela Assety małe... W wyniku wstępnego etapu działalności level designerów, graficy (Environment artists) otrzymują zadanie wymodelowania w formie siatek trójkątów (triangle meshes) wraz z pokrywającymi je teksturami: mniej lub bardziej drobnych elementów geometrii modularnej, której przeważająca część będzie istniała w levelu w wielu kopiach i pełniła funkcję głownie dekoracyjną;
Tworzenie geometrii levela...i DUŻE geometrii dużej, na ogół niepowtarzalnej, odgrywającej rolę bazy dla gameplaya, której układ, proporcje i rozmiary zostały przetestowane w fazie prototypowania levela: - budynki, - układy pomieszczeń - tereny.
Dychotome consensus geometricus czyli dualizm sieciowo-teksturalny assetu W assetach geometrycznych (in-game geometry) dąży się do tego, aby składały się z jak najmniejszej liczby trójkątów, przy jednoczesnym zachowaniu odpowiednio wysokiego poziomu postrzeganych detali. Silniki gier wykorzystują w tym celu reprezentację hybrydową assetów geometrycznych: - siatki trójkątów reprezentują obiekt w sposób przybliżony, - informacja o detalach kodowana jest w nakładanych na obiekt teksturach 2D i odpowiednio wykorzystywana w procesie renderowania obiektu.
Szczególne zaburzenia teksturalne (te normalne i nienormalne) Tekstury służące do reprezentowania detali geometrycznych obiektu, to: normal maps przechowują informację o wektorach normalnych powierzchni i służą do udawania nierówności poprzez modyfikowanie jasności pikseli obliczonej przy wykorzystaniu stosowanego modelu oświetlenia (lighting model); displacement maps przechowują informację o nierównościach w postaci wartości przemieszczeń, przy użyciu których bazowa siatka trójkątów jest fizycznie modyfikowana w procesie renderowania: - geometria może być modyfikowana na poziomie wierzchołków (w vertex shaderze) poprzez translacje wierzchołków siatki bazowej (starsze rozwiązanie); - geometria może być modyfikowana poprzez translacje wierzchołków istniejących oraz, dodatkowo, wierzchołków nowych utworzonych przy wykorzystaniu mechanizmu sprzętowej teselacji (shader model 5).
Tworzenie geometrii levela Be high or not to be high, Poly? Do modelowania geometrii graficy stosują na ogół jedno z dwóch podejść: Low-poly - tworzona geometria przez cały czas modelowania (3D Studio, Maya,...) składa się z jak najmniejszej liczby trójkątów; - tekstury detali geometrycznych (normal lub displacement mapy) tworzone są przez grafików Texture artists przy wykorzystaniu odpowiednich aplikacji do grafiki 2D (Photoshop, GIMP) lub po prostu pobierane z istniejących bibliotek. High-poly - geometria wraz ze wszystkimi detalami modelowana jest jako siatka trójkątów (np. w 3D Studio średni poziom szczegółowości, po czym uszczegółowianie w Z-Brushu); - następnie na podstawie tej geometrii generowana jest w sposób półautomatyczny tekstura nierówności (tzw. baking texture process), zaś sama geometria upraszczana do low-poly.
Tworzenie geometrii levela Czasem trzeba ukręcić LODy nawet z Mozarta W zależności od stopnia złożoności utworzonej siatki trójkątów oraz zakresu odległości, w którym obiekt będzie widziany w toku gry, niekiedy wskazane jest utworzenie jeszcze dwóch lub więcej siatek o mniejszej liczbie trójkątów, przybliżających oryginalną geometrię. Wówczas cały ciąg takich siatek będzie wchodził skład assetu i będzie wykorzystywany przez funkcjonalność Level Of Detail silnika gry. Klasycznym przykładem obiektów, dla których zwykle tworzy się poziomy LOD, są modele drzew.
Aby nałożyć jakąkolwiek teksturę na siatkę trójkątów należy wierzchołkom siatki przyporządkować współrzędne UV tekstury, czyli stworzyć tzw. UV mapping. W tym celu często dokonuje się (przy wykorzystaniu programu do modelowania) rozłożenia siatki trójkątów na płaszczyźnie tekstury, czyli tworzy się tzw. UV unwarp. Tworzenie geometrii levela Ultrafioletowy tatuaż W zależności od geometrii siatki, jej UV unwarp składa się z jednego lub (zwykle) więcej niż jedno kawałka. W ten sposób utworzony UV layout zwykle jest jeszcze dodatkowo ręcznie modyfikowany, np. kawałki mogą powiększane i przemieszczane w celu optymalnego wykorzystania przestrzeni tekstury, niektóre kawałki mogą zostać na siebie nałożone jeśli mają nosić ten sam wzór tekstury, itp. UV layout stanowi często szablon, na którym tworzone są tekstury przez grafików texture artists w programach do grafiki 2D.
Tworzenie geometrii levela Narodziny assetu W efekcie działania grafików: environment aritsts i texture artist otrzymywane są obiekty 3D reprezentowane przez siatki trójkątów oraz tekstury, przy czym te ostatnie, w klasycznym przypadku, zwykle 3 rodzajów: diffuse map specular map normal map Siatki trójkątów wraz teksturami importowane są do silnika gry. Tekstury wykorzystywane są w tworzonych następnie assetach materiałów, które są programami shaderów obsługiwanymi przez system materiałów silnika gry. Ostatecznie siatki trójkątów wraz z przypisanymi do nich materiałami uzyskują status assetu geometrycznego reprezentującego obiektu 3D.
Assety w UDK Assety geometryczne wykorzystywane do tworzenia geometrii levela w UDK należą do kategorii Static meshes. Geometria BSP, która posłużyła do prototypowania geometrii levela, może być w automatyczny sposób przekonwertowana do assetu typu Static mesh przy użyciu edytora UDK i ew. następnie wyeksportowana w celu dalszej obróbki przy użyciu zewnętrznych narzędzi graficznych. Oprócz Static meshes, w UDK istnieje wiele innych typów assetów, m.in. Skeletal meshes, Particle systems, Animation sets, Sound cues... Wiele typów assetów jest typa złożonymi, w których wykorzystuje się assety innych typów: np. Static mesh zawiera zwykle co najmniej jeden asset typu Material, zaś asset materiału zawiera zwykle co najmniej jeden asset typu Texture. Dzięki temu, dany asset może być wykorzystywany wielokrotnie do budowy innych assetów.
Aktorzy w UDK Obok pojęcia assetów, w terminologii UDK funkcjonują pojęcia Actor oraz Actor Class. Aktorem jest każdy obiekt dodany do levela, który odgrywa jakąś funkcję w gameplay u. W szczególności każda kopia assetu dodanego do levela jest odrębnym aktorem. Jednakże pojęcie aktor jest znacznie szersze niż kopia assetu, ponieważ istnieje wiele rodzajów aktorów, które nie mają odpowiedników w typach assetów. Przykładem są aktorzy reprezentujący źródła światła czy mgłę w levelu, ale również aktorzy nie mający bezpośredniego przełożenia audio-wizualnego w grze, jak np. miejsca respawnów, czy węzły scieżek dla botów. U podłoża rodzajów aktorów leżą klasy aktorów wywiedzione z hierarchii klas UDK zaimplementowanej w C++ lub/i UnrealScripcie. UWAGA: W UDK aktorami, ale nie assetami, są również obiekty reprezentujące teren: landscape i terrain.
Content Browser
Content Browser Zarządzanie assetami w UDK Rola Content Browsera polega na możliwości m.in.: przeszukiwaniu zbioru dostępnych assetów względem różnych kluczy wyszukiwania, m.in.: nazwy, typu i tagów; interaktywnego dodawania wybranych assetów do levela; umieszczania assetów w pakietach (packages) i następnie w grupach (groups) oraz tworzenie tematycznych kolekcji assetów; usuwania assetów oraz tworzenia kopii assetów istniejących; edycji parametrów assetów za pośrednictwem dedykowanych edytorów sprzężonych z Content Browserem; tworzeniu nowych assetów niektórych typów przy wykorzystaniu dedykowanych edytorów; importowania assetów utworzonych poza UDK oraz eksportowanie assetów z UDK na zewnątrz w wybranych formatach; tworzeniu tagów oraz przypisywanie ich assetom.
Content Browser Zarządzanie assetami w UDK (cd) Dodatkowo Content Browser: zapewnia wczytywanie aktualnie wykorzystywanych assetów z pamięci zewnętrznej; dba o zachowanie integralności wewnętrznej assetów złożonych, w których istnieją odwołania do innych assetów,w szczególności zapobiega omyłkowemu usunięciu assetów, które wchodzą w skład innych assetów.
Content Browser Pakiety W UDK assety grupowane są w pakiety, zaś pakiet może zostać dodatkowo podzielony na grupy (np. grupujące assety różnych typów). W systemie plików, pakiety są reprezentowane przez pliki *.upk. Z punktu widzenia Content Browsera pakiety dzielą się na wewnętrzne i zewnętrzne. Pakiety wewnętrzne są to pakiety zawarte w podfolderach folderu UDKGame/Content i są one widoczne od razu po uruchomieniu Content Browsera. Pakiety zewnętrzne, to pakiety znajdujące się gdziekolwiek indziej i żeby z nich skorzystać należy je wczytać do Content Browsera. W sekcji Packeges Content Browsera widoczna jest hierarchia folderów zawierających pakiety oznaczane jako lub w zależności od tego, czy zawartość pakietu została wczytana, czy nie. Grupy w obrębie pakietu oznaczane są jako.
Content Browser Pakiety (cd) Dobrym zwyczajem jest umieszczanie całego contentu gry w swoich pakietach, nawet wówczas jeśli korzysta się z assetów wytworzonych przez osoby trzecie (np. tych dostarczanych z UDK) wówczas należy w pakiecie utworzyć kopie tych assetów. Zalety takiego postępowania to: - łatwe przenoszenie rezultatów pracy pomiędzy kolejnymi aktualizacjami UDK oraz stanowiskami; - uniezależnienie od pakietów osób trzecich; - wszelkiego rodzaju modyfikacje dokonywane są na wersjach assetów zawartych w naszym pakiecie, bez ew. modyfikowania assetów oryginalnych.
Content Browser Pakiety i pliki leveli Dodatkowo w hierarchii pakietów Content Browsera widoczne są pakiety reprezentowane przez pliki *.udk, przy czym są one nierozróżnialne na podstawie oznaczeń od plików *.upk. Pliki *.udk reprezentują opis tworzonego levela i tworzone są z poziomu edytora leveli UDK. Pliki te zawierają zwykle co najwyżej assety natury technicznej związane z konkretnym levelem (np. tekstury lightmap wygenerowane przez system globalnego oświetlenia Lightmass), które nie są przeznaczone do wielokrotnego wykorzystania. W zw. z tym, choć możliwe jest przeglądanie assetowej zawartości plików *.udk z poziomu Content Browsera, plików tych zwykle się tym narzędziem nie modyfikuje.
Następny wykład: Cykl produkcyjny wytwarzania gry (3) Prototypowanie gameplaya i Kismet