Mehr als nur ein Texturpatch? (Teil 7)


Mehr als nur ein Texturpatch? (Teil 7)

ThielHater | 31.07.2022

In diesem Teil geht es um ein neues Feature der Gothic Reloaded Mod, welches sich allerdings noch in der Entwicklung befindet: Die Tageszeiten und das Wetter.

Man könnte auch von Atmosphäre, Ambiente, Stimmung, Natur oder Umwelt sprechen, wobei ich mit keinem dieser Begriffe zufrieden bin. Die Spielerfahrung sollte wirklichkeitsnäher, abwechslungsreicher und immersiver werden. Ich wollte, dass der Spieler tagsüber die Sonne spürt, dass es bei Gewittern blitzt und donnert, dass man abends den Nebel aufziehen sieht, dass die Nächte düsterer sind und es Mondphasen gibt. Mit den traditionellen Mitteln des Gothic Moddings war dies jedoch nicht machbar – zum Glück gibt es nun Union.

Die Inspiration dazu kam von neueren Spielen wie The Witcher, aber auch von der Atmospheric Mod von Sand47. Diese wurde zunächst für Gothic 2 und dann für Gothic 1 veröffentlicht. Bei meiner Recherche für den Artikel musste ich feststellen, dass dieses Projekt wohl in Vergessenheit geraten ist. Ich konnte keinen Release-Thread finden, bloß dieses Review. Der Download ist anscheinend nur noch über das Web Archive möglich. Dann ist es nun also an mir, dieses Projekt vorzustellen.

Wassertexturen sind unglaublich schwer zu erstellen. Bei der Atmospheric Mod sind Struktur, Fargebung und Animation des Wassers fantastisch. Man hat das Gefühl, tatsächlich auf einer Insel zu sein und auf's Meer zu blicken. Der Himmel besteht technisch gesehen aus einer oberen und einer unteren Ebene. Gothic 2 nutzt davon jedoch nur eine und stellt dort die weißen, fast comicartigen Wolken dar. Bei der Atmospheric Mod hingegen werden beide Ebenen genutzt, sodass der Himmel höher und weiter wirkt. Die Wolken sind zudem farblich abgestimmt.

In der Nacht überzeugt der Himmel ebenso. Im Vergleich zu Gothic 2 sind die Sterne kleiner und verschieden hell, man fühlt sich als Teil des Universums. Ein besonderer Effekt ist zudem, dass sie bei Bewegungen der Kamera glitzern. Ein interessanter Effekt, welcher allerdings daher rührt, dass die Texturen keine Mipmaps haben. Die See ist dunkler und wirkt geheimnisvoller. Doch zurück zur Gothic Reloaded Mod.

Mit der dynamichen Generierung der Wolken begann unsere Eroberung des Himmels. Zunächst musste ich rausbekommen, wie man die Texturen zur Laufzeit verändern kann. Als Einstiegspunkt wählte ich die Funktion zCTextureFileFormatInternal::LoadTexture(), welche einen Dateinamen erhält, die entsprechende Texturen lädt und zurück gibt. Sie habe ich überschrieben und für jeden Aufruf eine leere, schwarze Textur zurückgeben. Das Ergebnis konnte sich sehen lassen.

Als nächstes versuchte ich, den Bildschirminhalt abzugreifen und für eine bestimmte Textur zu nutzen. Das funktionierte und führte zu einem unterhaltsamen Bild-in-Bild-Effekt.

Die Wolken basieren dabei auf einem zufälligen Rauschen (Noise), welches mir die Bibliothek FastNoise von Jordan Peck geliefert hat. Zur Generierung der Wolken werden Ausschnitte aus dem Rauschen genommen und mit unterschiedlicher Skalierung sowie Deckkraft übereinander gelegt.

Wenn man die Parameter geschickt wählt, kommen überzeugende Wolken heraus. Die Preview-Funktion von FastNoise war dabei sehr hilfreich. Wie ich feststellen musste, waren die Farben im Spiel verkehrt herum und es war an der Zeit, anstatt der Textur des Bodens die des Himmels zu ersetzen.

Wie man links oberhalb des Helden sehen kann, war die Textur allerdings nicht kachelbar. Von Kachelbarkeit spricht man, wenn die Textur sich auf einer Fläche wiederholt, ohne dass man dies wahrnimmt. Die Lösung bestand darin, einen anderen Algortihmus zu nehmen, welcher ein periodisches Rauschen erzeugt. Die besten Ergebnisse konnte ich dabei mit fraktalem Perlin-Noise erzielen.

Das Ergebnis ist noch nicht perfekt, kann allerdings überzeugen. Über das Plugin soll nicht nur die Darstellung des Wetters verbessert werden, sondern auch dessen Steuerung. Daher habe ich Gothic zunächst beigebracht, sekündlich das Wetter zu wechseln und dabei zwischen sonnigem sowie stark bewölktem Wetter und unserem dynamisch generierten Himmel zu wechseln.

Die Implementierung von Mondphasen war kein großes Problem, da die technischen Hürden dazu bereits überwunden waren. Das spannendste dabei war die Bestimmung der Mondphase, welche als kleines Gimmick im Spiel der tagesaktuellen Mondphase entsprechen sollte. Dazu muss man den zeitlichen Abstand zu einem vergangenen Vollmond berechnen und kann dann über die Umlaufzeit des Mondes von 29,53 Tage bestimmen, wo er aktuell in seinem Zyklus steht. Anschließend wird die für die jeweilige Mondphase angepasste Textur gesetzt.

Ein weiteres, teilweise entwickeltes Feature, ist die Darstellung des Himmels als Halbkugel im Stil von Gothic 2. Allerdings kommt es dabei noch zu Darstellungsfehlern, welche ich bisher nicht lösen konnte. Insgesamt steht das Plugin aber noch am Anfang seiner Entwicklung, wir betreiben sozusagen noch Grundlagenforschung.