Techniken zur Echtzeitsimulation von Flüssigkeiten, Feuer und Rauch
(andrewkchan.dev)- Notizen und Quellcode (GitHub) zu Mathematik, Algorithmen und Methoden zur Echtzeit-Simulation von Flüssigkeiten wie Feuer und Rauch
1. Flüssigkeitssimulation
- Bevor man Feuer simuliert, muss man zunächst Flüssigkeiten simulieren
- Wenn man annimmt, dass die Flüssigkeit inkompressibel und nicht viskos ist, wird das Problem deutlich vereinfacht
1.1 Grundlegende Fluiddynamik
- Ein Flüssigkeitsvolumen füllt einen Bereich DDD des Raums, und zur Zeit ttt ist die Geschwindigkeit der Flüssigkeit u(x,t)
- Ein 2D-Geschwindigkeitsfeld u kann als N×N-Gitter dargestellt werden
- Was passiert, wenn man einen Tropfen Farbstoff in die Flüssigkeit gibt?
- Definiert wird ein Skalarfeld ψ(x,t), das die Dichte des Farbstoffs beschreibt; seine Bewegung durch die Geschwindigkeit der Flüssigkeit nennt man Advektion
- Eine naive Methode zur Berechnung der Advektion besteht darin, jeden Gitterpunkt zu verschieben und den nächstgelegenen Gitterpunkt zu aktualisieren, ist aber schwer zu parallelisieren und instabil
Partielle Differentialgleichung für Advektion
- Um die Advektion stabil herzuleiten, braucht man eine explizite PDE-Darstellung
- Die Gesamtmasse des Farbstoffs in einem festen Raumbereich WWW ist ∫WψdV, und die zeitliche Änderung dieser Masse ist ddt∫Wψ(x,t)dV
- Nach dem Gesetz der Massenerhaltung gilt ddt∫WψdV=−∫Sψu⋅ndA
- Wendet man den Divergenzsatz an, erhält man ∫W[∂ψ∂t+∇⋅(ψu)]dV=0, und für ein infinitesimales Teilvolumen W=dV folgt ∂ψ∂t+∇⋅(ψu)=0
- Damit erhält man die explizite PDE, die gelöst werden muss
Stabile Methode für Advektion
- Betrachtet man Gl. (1) genauer, ist der rechte Term die Richtungsableitung in Richtung −u
- Diese Methode, bekannt als Semi-Lagrange-Advektion, wurde 1999 von Jos Stam entwickelt
- Da jeder Gitterpunkt nur einmal aktualisiert wird, lässt sie sich sehr leicht parallelisieren und ist unbedingt stabil
1.2 Navier-Stokes-Gleichungen
- Wir haben ein Modell dafür gefunden, wie sich skalare Eigenschaften einer Flüssigkeit im Laufe der Zeit entwickeln, aber was ist mit der Strömung selbst?
- Die Navier-Stokes-Gleichungen definieren, wie sich das Geschwindigkeitsfeld u an jedem Punkt in der Flüssigkeit mit der Zeit verändert
- Da wir annehmen, dass die Flüssigkeit nicht viskos ist, gilt μ=0, und äußere Kräfte können zunächst ignoriert werden
- Es bleiben also nur zwei Terme übrig: Selbstadvektion (self-advection) und Druck (pressure)
- Wenn man diese Terme in jedem Zeitschritt numerisch berechnet und addiert, kann man die Flüssigkeit simulieren
Drucklösung
- Da nicht klar ist, ob das neue Geschwindigkeitsfeld die Inkompressibilitätsbedingung erfüllt, muss der Druckterm p dies korrigieren
- Dazu muss die Poisson-Gleichung gelöst werden
- Zum Lösen der Poisson-Gleichung kann man iterative Algorithmen wie die Jacobi-Methode verwenden
- Die Jacobi-Methode kann parallel auf der GPU ausgeführt werden, was die Implementierung sehr einfach macht
Zusammenfassung: Navier-Stokes-Simulation
- Die Mathematik hinter Navier-Stokes kann etwas komplex sein, aber das Lösen der Gleichungen zur Simulation von Flüssigkeiten lässt sich auf einige zentrale Aktualisierungsschritte zusammenfassen
1.3 Vorticity Confinement
- Die Speicherung des Geschwindigkeitsfelds auf einem Gitter ist sehr praktisch, aber beim Interpolieren von Werten zwischen den Gitterpunkten entsteht unerwünschte numerische Glättung
- Dadurch verschwinden turbulente Wirbel in der Strömung, und es entsteht meist ein zu glatter und „langweiliger“ Flüssigkeitsfluss
- Vorticity Confinement ist ein Verfahren zur Verstärkung dieser verlorenen Wirbelstärke
- Vorticity Confinement wurde entwickelt, um die sehr komplexen Strömungsfelder von Hubschrauberrotorblättern zu berechnen
- Die Wirbelstärke wird an jedem Punkt berechnet, indem die Rotation von u bestimmt wird; zur Verstärkung der Wirbelstärke wird an jedem Punkt eine zirkulare Strömung hinzugefügt
Curl-Noise-Turbulenz
- Curl Noise ist ein ähnliches Verfahren wie Vorticity Confinement: Statt die Wirbelstärke des Geschwindigkeitsfelds zu messen und zu verstärken, erzeugt es mit einer Rauschfunktion von Grund auf ein skalares Wirbelstärkefeld
- Schnell bewegte und stark turbulente Flüssigkeiten profitieren am meisten von Vorticity Confinement und Curl Noise
2. Feuersimulation
- Um Feuer und Rauch zu simulieren, müssen Kanäle hinzugefügt werden, die Brennstoff und Temperatur darstellen, und die Verbrennung des Brennstoffs muss modelliert werden, um Wärme zu erzeugen
- Außerdem muss berücksichtigt werden, dass sich heiße Bereiche der Flüssigkeit gemäß einem thermischen Auftriebsmodell nach oben bewegen, und die Flammen müssen korrekt gerendert werden
2.1 Grundlegendes Verbrennungsmodell
- Chemisch betrachtet entsteht Feuer durch die Oxidationsreaktion eines Brennstoffs, wobei Wärme und Licht freigesetzt werden
- Es werden ein Skalarfeld ρ für die Brennstoffdichte und ein Skalarfeld T für die Temperatur definiert
- Beim Verbrennen des Brennstoffs wird dem System Temperatur hinzugefügt, und Wärme diffundiert von heißen zu kalten Bereichen
- Wärmekonvektion wird als Kombination dieser beiden Prozesse definiert, und wir haben dafür bereits ein mathematisches Modell – Advektion!
Meinung von GN⁺:
- Dieser Artikel erklärt den komplexen Prozess der Echtzeit-Simulation von Flüssigkeiten wie Feuer und Rauch, ein äußerst wichtiges Thema in Computergrafik und Spieleentwicklung.
- Dank der jüngsten Fortschritte bei GPUs können komplexe Flüssigkeitssimulationen inzwischen in Echtzeit berechnet werden, was zur Erstellung visuell beeindruckender Spiele und Film-Spezialeffekte beiträgt.
- Der Artikel behandelt fortgeschrittene mathematische Konzepte wie die Navier-Stokes-Gleichungen und Vorticity Confinement und bietet damit nützliche Informationen für angehende Softwareingenieur:innen mit Interesse an diesem Bereich.
1 Kommentare
Hacker-News-Kommentare