Wasserpyhysik in Games
Bachelorarbeit zur Analyse und prototypischen Implementierung von Wasserphysik in Videospielen mit Fokus auf physikalische Grundlagen, bestehende Verfahren und Echtzeitfähigkeit.
Highlights
- Analyse physikalischer Grundlagen wie Navier-Stokes-Gleichung und Wellengleichung
- Vergleich bestehender Ansätze wie gitterbasierte Verfahren, SPH und hybride Methoden
- Entwicklung eines eigenen Konzepts auf Basis der Gitter-Methode
- Prototypische Implementierung in C++ mit der Game Engine Vektoria
- Untersuchung des Spannungsfelds zwischen physikalischer Genauigkeit und Echtzeit-Performance
Projektübersicht
In meiner Bachelorarbeit beschäftigte ich mich mit der Frage, wie Wasser in Videospielen physikalisch plausibel simuliert werden kann.
Der Fokus lag dabei bewusst auf der technischen Seite der Wassersimulation und weniger auf der rein künstlerischen Darstellung. Ziel war es, bestehende Verfahren zu untersuchen, deren Stärken und Schwächen zu analysieren und darauf aufbauend ein eigenes Konzept für eine prototypische Echtzeit-Simulation zu entwickeln.
Physikalische Grundlagen
Zu Beginn der Arbeit wurden die physikalischen Grundlagen behandelt, die für die Simulation von Flüssigkeiten relevant sind.
Dabei standen vor allem zwei Gleichungen im Mittelpunkt:
- Navier-Stokes-Gleichung zur Beschreibung von Strömung, Druck, Geschwindigkeit und Viskosität
- Wellengleichung zur Beschreibung der Ausbreitung von Wellen auf Flüssigkeitsoberflächen
Die Arbeit zeigt dabei auch, dass beide Gleichungen allein nicht ausreichen, um Wasser in seiner ganzen Komplexität zu simulieren. Effekte wie Oberflächenspannung, Kollisionen mit Objekten oder Spritzwasser würden weitere Modelle erfordern.
Analyse bestehender Verfahren
Ein größerer Teil der Arbeit widmete sich dem Vergleich bereits existierender Ansätze zur Flüssigkeits- und Wassersimulation.
Dabei wurden unter anderem folgende Verfahren betrachtet:
- Gitter-Methode
- Smoothed Particle Hydrodynamics (SPH)
- Vortex Particle Method
- Mischformen aus gitterbasierten und partikelbasierten Ansätzen
Zusätzlich wurden konkrete Arbeiten und Implementierungen von unter anderem Jos Stam, Mike Ash, Robert Bridson und Matthias Müller untersucht.
Ein zentrales Ergebnis dieser Analyse war, dass alle Ansätze Kompromisse eingehen müssen:
Mehr physikalische Genauigkeit führt in der Regel zu höherem Rechenaufwand, was besonders in Echtzeit-Anwendungen problematisch wird.
Eigenes Konzept
Auf Basis der Analyse entwickelte ich ein eigenes Konzept für eine prototypische Wassersimulation.
Dabei entschied ich mich bewusst für die Gitter-Methode, da sie im Vergleich zu partikelbasierten Verfahren weniger Speicher benötigt und sich besser für echtzeitnahe Anwendungen auf schwächerer Hardware eignet.
Als Grundlage diente der 3D-Ansatz von Mike Ash, der von mir in ein moderneres C++-Konzept überführt und erweitert wurde.
Das Konzept bestand aus mehreren zentralen Klassen:
- FluidCube zur Speicherung der Dichte- und Geschwindigkeitsfelder
- FluidSolver zur Berechnung des Verhaltens der Flüssigkeit
- FluidCubePlacement zur Kopplung der Simulationsdaten mit der Visualisierung
- PhysicWorld zur Aktualisierung und Koordination der Simulation
Für die Visualisierung wurde die Game Engine Vektoria verwendet.
Implementierung
Die prototypische Implementierung erfolgte in C++.
Im Solver wurden die zentralen Schritte einer gitterbasierten Fluidsimulation umgesetzt, darunter:
- Diffusion
- Advektion
- Randbehandlung
- Projektionsschritt zur Korrektur des Geschwindigkeitsfeldes
- Gravitationskraft
- Aktualisierung von Dichte- und Geschwindigkeitsfeldern
Visualisiert wurde die Simulation in Vektoria durch einen Würfel aus vielen kleinen Zellen.
Jede Zelle wurde als eigener Würfel dargestellt, dessen Transparenz von der gespeicherten Dichte abhing. Zusätzlich konnten Geschwindigkeitsvektoren zur Laufzeit über ein Pfeilfeld visualisiert werden.
Ergebnis und Erkenntnisse
Die Arbeit zeigt deutlich, dass hochwertige Wasserphysik in Videospielen technisch sehr anspruchsvoll ist.
In der prototypischen Implementierung wurde sichtbar, dass bereits vergleichsweise einfache gitterbasierte Simulationen, die auf der CPU laufen schnell an Performancegrenzen stoßen:
- Bei einer Würfelgröße von 28³ Zellen lag die Bildrate bei ungefähr 10 FPS
- Bei 34³ Zellen sank sie auf unter 10 FPS
Damit bestätigt die eigene Implementierung die zentrale Erkenntnis der Arbeit:
Eine physikalisch glaubwürdige Wassersimulation in Echtzeit erfordert starke Vereinfachungen, Optimierungen oder weiterführende Ansätze wie Parallelisierung, GPU-Berechnung oder hybride Verfahren.
Fazit
Die Bachelorarbeit war für mich eine Verbindung aus Physik, C++-Programmierung und Game Engineering.
Sie hat mir gezeigt, wie komplex die Simulation von Wasser in Echtzeit wirklich ist und wie wichtig es ist, zwischen physikalischer Genauigkeit, visueller Qualität und Performance abzuwägen.
Gleichzeitig entstand ein eigener technischer Prototyp, der diese Zusammenhänge praktisch erfahrbar gemacht hat.