Werbung
Die Darstellung von Wasser und dessen Verhalten ist auch heute noch eine große Herausforderung bei der Entwicklung von Spiele-Engines. Mit GameWorks hat NVIDIA mehrere APIs entwickelt, auf die Entwickler zurückgreifen können, um die Physik von Gegenständen besser erfassen und darstellen zu können. Ein Teil davon ist WaveWorks, wo es um die Darstellung von Wasseroberflächen und vor allem Wellen geht. Dabei hat NVIDIA mit den Entwicklern von War Thunder zusammengearbeitet. Die Ergebnisse der mehrmonatigen Arbeit eines 13 Mann starken Teams präsentierte man nun auf der GTC 2015.
War Thunder ist ein Free-to-Play Open-World-Titel, bei dem verschiedenstes Kriegsgerät gegeneinander antritt. Die Modelle der Fahrzeuge und Flugzeuge sollen dabei einen möglichst hohen Detailgrad erreichen. So lösen die Modelle der Panzer bis zu einer Auflösung von 2-3 cm auf. Jedes Detail ist an der richtigen Stelle und gleiches gilt auch für die Modelle der Flugzeuge. Im sogenannten Air Mode wird allerdings ein Areal von mehreren Quadratkilometern dargestellt. Die Sichtweite beträgt maximal bis zu 160 km und so muss sich die Darstellung der Details dynamisch an die unterschiedlichen Situationen der Darstellung anpassen. Besonders bei der Darstellung von Wasser besteht hier noch erhebliches Verbesserungspotenzial.
Damit es zu keinen Wiederholungen in der Darstellung von Texturen und echten 3D-Wellen kommt, verwendet WaveWorks eine dynamische Berechnung aus Wellengleichungen heraus. Aus diesen Daten werden auch Informationen entnommen, die abhängig von der Wellenhöhe und dem Wind eine Darstellung von Schaumkronen auf den Wellenbergen ermöglicht. Die dazugehörige Physik-Berechnung erfolgt auf der CPU in einer Auflösung von 128 x 128 Pixel für eine bestimmte Wasseroberfläche. Die darauffolgende Darstellung der Grafik wird durch die GPU berechnet und erreicht eine Auflösung von 512 x 512 Pixel.
Das offene Meer ist für die Darstellung von Wellen aber weniger ein Problem wie die Randbereiche der Küsten. Auf diese Bereiche legt WaveWorks besonderes Augenmerk. So erfolgt der Übergang zwischen dem offenen Meer und dem Küstenbereich dynamisch und die Wellen verlangsamen sich auch. Die Wellenhöhe der brechenden Welle wird ebenfalls aus Berechnung der Wellenhöhe auf dem offenen Meer bestimmt. Wellen folgen aber auch keiner gewissen Regelmäßigkeit in den Abständen und dazu wird eine gewisse Zufälligkeit hinzugefügt. Auch zurücklaufendes Wasser vom Strand wird berechnet und die darunterliegende Textur kann entsprechend verändert werden, um einen nassen Untergrund zu simulieren.
Nun sind Küsten selten geradlinig und um diese Küstenbereiche korrekt abbilden zu können, wird die Distanz zwischen Küste und dem davorliegenden Küstenbereich für die Berechnung von brechenden Wellen in Rasterfeldern von 4.048 x 4.048 Pixel für eine Fläche von 65 x 65 km festgehalten. Ebenfalls mit einberechnet wird ein anderes Verhalten von Wellen auf Flüssen und Seen. Zudem verhalten sich Wellen um Inseln herum abhängig von der Windrichtung anders - auch dies wurde bei WaveWorks bedacht. Um selbst die modernsten Systeme nicht vollständig auszulasten, werden abhängig vom Betrachtungsabstand unterschiedlich viele Details der Wellendarstellung dargestellt.
WaveWorks ist eine von NVIDIA zusammen mit einigen Entwicklern vorangetriebene API, die auf Wunsch in jedes Spiel eingebaut werden kann. Dies gilt grundsätzlich für die GameWorks-API. Laut NVIDIA benötigt ein Entwickler rund eine Woche, um WaveWorks in ein Spiel zu integrieren.