Więcej niż łatka tekstur? (Część 7)


Więcej niż łatka tekstur? (Część 7)

ThielHater | 31 lip 2022 Tłumaczenie Damianut

Ta część jest o nowej funkcji Gothic Reloaded Mod, która jest nadal w fazie rozwoju: pory dnia i pogoda.

Można również mówić o atmosferze, klimacie, nastroju, naturze lub środowisku, ale żadne z tych okfreśleń mnie nie satysfakcjonują. Chciałem, by wrażenia z gry były bardziej realistyczne, bardziej zróżnicowane i bardziej wciągające. Chciałem by gracz poczuł słońce w trakcie dnia, błyskawice i grzmoty kiedy pada, zobaczył mgłę nadciągającą wieczorami, miał ciemniejsze noce i fazy księżyca. Nie było to jednak możliwe przy użyciu tradycyjnych środków modowania Gothica – na szczęście jest teraz Union.

Inspiracją do tego były nowsze gry takie jak Wiedźmin, ale również Atmospheric Mod autorstwa Sand47. Początkowo był opublikowany dla Gothic 2 a potem dla Gothic 1. Podczas badań na potrzeby tego artykułu zauważyłem, że projekt ten wydaje się być zapomniany. Nie mogłem znaleźć wątku dotyczącego wydania, tylko tę recenzję. Pobieranie jest widocznie możliwe tylko poprzez Web Archive. W takim razie nadeszła moja kolej na zaprezentowanie tego projektu.

Tekstury wody są niewiarygodnie trudne do stworzenia. W Atmospheric Mod, struktura, kolorystka i animacja wody są fantastyczne. Masz wrażenie, że faktycznie jesteś na wyspie i patrzysz na morze. Niebo technicznie składa się z górnej i dolnej warstwy. Gothic II używa jednak tylko jednego z nich i wyświetla tam te białe, niemal komiksowe chmury. Z drugiej strony w Atmospheric Mod użyte sa oba poziomy, dzięki czemu niebo wydaje się wyższe i szersze. Kolory chmur są również zharmonizowane.

Nocą niebo robi równie duże wrażenie. W porównaniu do Gothic II gwiazdy są mniejsze i o różnej jasności, czujesz się jakbyś był częścią wszechświata. To interesujący efekt, ale wynika to z faktu, że tekstury nie mają mipmap. Morze jest ciemniejsze i wygląda bardziej tajemniczo. Ale wróćmy do Gothic Reloaded Mod.

Nasz podbój nieba rozpoczął się od dynamicznego generowania chmur. Najpierw musiałem wymyślić, jak zmieniać tekstury w czasie działania gry. Jako punkt startowy wybrałem funkcję zCTextureFileFormatInternal::LoadTexture(), która otrzymuje nazwę pliku, ładuje odpowiednie tekstury i zwraca je. Nadpisałem ją i zwróciła pustą, czarną teksturę dla każdego jej wywołania. Rezultat był imponujący.

Potem spróbowałem przechwycić zawartość ekranu i użyć tego dla konkretnej tekstury. To zadziałało i zaowocowało zabawnym efektem obrazu w obrazie.

Chmury są oparte na losowym szumie (noise), który otrzymuje z biblioteki FastNoise, którą stworzył Jordan Peck. Aby wygenerować chmury, sekcje szumu są pobierane i nakładane na siebie z różnym skalowaniem i kryciem.

Jeśli odpowiednio dobierzesz parametry, pojawią się przekonujące chmury. Funkcja podglądu FastNoise była bardzo pomocna. Jak odkryłem wkrótce potem, kolory zostały zamienione w grze i nadszedł czas, aby zastąpić teksturę nieba zamiast ziemi.

Jednak, jak widać po lewej stronie nad bohaterem, tekstury nie można było "kafelkować". Kafelkowanie polega na niezauważalnym powtarzaniu tekstury na powierzchni. Rozwiązaniem było użycie innego algorytmu, który generuje okresowy szum. Najlepsze rezultaty udało mi się osiągnąć przy użyciu fraktalnego szumu Perlina.

Rezultat nie jest jeszcze doskonały, ale jest przekonujący. Wtyczka ma nie tylko poprawić odwzorowanie pogody, ale także jej kontrolę. Dlatego najpierw nauczyłem Gothica zmieniać pogodę co sekundę, przełączając się między słoneczną i zachmurzoną pogodą, a także dynamicznie generowanym niebem.

Implementacja faz księżyca nie stanowiła większego problemu, ponieważ przeszkody techniczne zostały już przezwyciężone. Najbardziej ekscytującą częścią było określenie fazy księżyca, która powinna odpowiadać bieżącemu dniu. Aby to zrobić, należy obliczyć odległość czasową do minionej pełni księżyca, a następnie można wykorzystać okres księżycowy wynoszący 29,53 dnia, aby określić, w którym miejscu cyklu się on obecnie znajduje. Potem ustawiana jest tekstura dostosowana do odpowiedniej fazy księżyca.

Kolejną funkcją jest przedstawienie nieba jako półkuli, jak w Gothic 2. Jednak nadal występują błędy renderowania, których nie udało mi się jeszcze rozwiązać. Podsumowując, wtyczka jest wciąż na początku swojego rozwoju, wciąż prowadzimy podstawowe badania, że tak powiem.