Więcej niż łatka tekstur? (Część 6)
Szósta część będzie o oświetleniu w Gothicu – o świetle, cieniu i kolorze. Punktem wyjścia było pytanie, które sobie wtedy zadałem: Dlaczego nasze tekstury wyglądają w grze inaczej, niż mi się wydawało?
To nie była duża różnica, raczej subtelna. Tekstury wyglądały na mętne tak, jakby został na nie nałożony filtr koloru, szczególnie dotyczyło to jasnych pikseli. Czy było to spowodowane kompresją? To redukuje przestrzeń koloru, ale chciałem wiedzieć więcej. W ramach testu chciałem użyć tekstury, która składała się w połowie z czystej bieli i głębokiej czerni i została umieszczona na tej rozpadającej się chacie.
Cieniowania można było się spodziewać, ale dwa jasne obszary w górnej części obrazka dały mi do myślenia, ponieważ były cieplejsze niż czysta biel. Porównałem wartości kolorów tekstury przed i po kompresji z ich reprezentacją w grze:
Kompresja miała wpływ, ale był on znikomy. To było oczywiste, że Gothic renderuje tekstury inaczej, niż można oczekiwać. Ale z jakiego powodu, jak to działa i czy możemy wykorzystać to w naszym projekcie?
Po pierwsze za oświetlenie odpowiada edytor świata Gothic o nazwie Spacer. W nim umieszczasz obiekty, tworzysz sieć dróg dla NPC-ów, dodajesz dźwięki otoczenia, tworzysz ruchy kamery i tak dalej – prawdziwy cud technologii. Obliczenia światła są wyzwalane za pomocą następującego okna dialogowego:
Oświetlenie jest obliczane przy użyciu metody śledzenia promieni, która symuluje wpadające światło słoneczne i określa dla każdego wierzchołka siatki poziomu, jak mocno jest on oświetlony. Technika ta nazywana jest również oświetleniem wierzchołków; intensywność światła jest normalizowana do interwału od 0 do 255. Gothic może również kalkulować mapy światła w różnych poziomach jakości. Jest to struktura danych, która łączy informacje o oświetleniu dla kilku twarzy.
Obliczenia światła są wykonywane raz dla każdego poziomu, dla jednej pozycji źródła światła i jednego kąta padania światła. Odpowiednio, oświetlenie w Gothicu jest w zasadzie statyczne. Nie ma wpływu na to, czy słońce wschodzi, jest wysoko na niebie, czy zachodzi, czy pada deszcz, czy świeci księżyc. Widać to dobrze w cieniu pozostałości ściany:
Jeśli więc oświetlenie w zasadzie się nie zmienia, dlaczego istnieją wyraźnie rozróżnialne pory dnia? Odpowiedź brzmi: Gothic nakłada wartość koloru na teksturę podczas rysowania twarzy, która jest pobierana z Poly Light Color Lookup Table lub w skrócie CLUT. Jest to tabela, która jest przeliczana z każdą klatką i zawiera 256 różnych gradacji bieżącego koloru globalnego źródła światła. Jasność danego wierzchołka, która została wcześniej obliczona przez Spacer, służy jako wartość wyszukiwania. W ten sposób świat jest zabarwiony na żółto w południe, czerwonawo wieczorem i niebieskawo w nocy.
W celach testowych nadpisałem CLUT czystą bielą:
TSprawiło to, że jasne kamyki w stosie gruzu lepiej się wyróżniały, ale z drugiej strony zniwelowało cieniowanie. Kolejnym krokiem w kierunku poprawy byłoby zatem dostosowanie wartości kolorów obliczonych przez Gothic dla CLUT w taki sposób, aby były bogatsze w kontrast i mniej nasycone. W następnym kroku można by użyć pluginu Union do obliczania oświetlenia podczas uruchamiania gry. Jednak tak się jeszcze nie stało, zamiast tego wypełniłem CLUT losowymi wartościami. 😂
Dzięki łatce do siatki Gothic I 3D+ autorstwa davied uświadomiłem sobie później, że na oświetlenie w Gothicu można wpływać również na inne sposoby. Jak widać na zrzutach ekranu, cienie obiektów są renderowane bardziej delikatnie. Ale jak mu się to udało?
To, co jeszcze nie zostało wspomniane w żadnym z artykułów to tak zwane materiały. Tekstura zawiera tylko dane o obrazie, właściwości są przechowywane w powiązanych materiałach. Jednakże Gothic I ma tylko parę właściwości w porównaniu do współczesnych silników i większość z nich nie jest ważna. Grupa materiałowa (matGroup) na przykład kontroluje, który dźwięk jest odgrywany, kiedy gracz chodzi po powierzchni z tym materiałem. Specjalnym przypadkiem jest grupa materiałowa WATER. Jeśli go użyjesz, powierzchnia będzie półprzezroczysta, kontrola kolizji zostanie wyłączona, a gracz będzie mógł po niej pływać. Wśród innych właściwości animowanych tekstur pozostaje jedna interesująca: Kąt wygładzania (smoothAngle).
Jest to wartość progowa kąta między dwiema powierzchniami, która wpływa na renderowanie cieni. Jeśli odpowiedni kąt jest poniżej progu, krawędź jest renderowana łagodnie. Jeśli jest powyżej, jest renderowana twardo. W Gothicu domyślnie jest to 60°. Następujące sfery są geometrycznie całkowicie identyczne, tylko cienie są renderowane odmiennie:
Jak możesz zobaczyć, różnica jest znacząca. Ponieważ nie kosztuje on również wydajności, wykorzystamy go także w Gothic Reloaded Mod. Następujące porównanie ze Starej Kopalni całkiem dobrze prezentuje efekt w Gothicu, zwłaszcza w prawej połowie obrazu. Delikatnym cieniom towarzyszy jednak utrata kontrastu, co widać na nieciekawie wyglądających półkach skalnych. Ogólnie rzecz biorąc, Stara Kopalnia wydaje się bardziej klimatyczna, ale będziemy musieli wypróbować różne wartości kąta wygładzania.
Jeśli chcesz dowiedzieć się więcej o szczegółach technicznych, to wideo od GuerillaCF jest warte zobaczenia