2 Punkte von GN⁺ 2023-12-20 | 1 Kommentare | Auf WhatsApp teilen
  • 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⁺:

  1. 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.
  2. 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.
  3. 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

 
GN⁺ 2023-12-20
Hacker-News-Kommentare
  • Als jemand mit einem PhD in CFD (Computational Fluid Dynamics) muss ich zugeben, dass ich noch nie von Vorticity Confinement oder Curl-Noise-Turbulenz gehört habe. Man merkt wirklich, dass man jeden Tag etwas Neues lernt.
    • In der industriellen CFD arbeitet man mit hohen Reynolds-Zahlen, daher ist es nicht wünschenswert, Rauschen einzubringen, um die künstliche Dissipation numerischer Methoden auszugleichen. Tatsächlich wollen viele bei Simulationen mit hohen Reynolds-Zahlen künstliche Dissipation, um sie zu stabilisieren. Die Anforderungen in der Computergrafik legen mehr Wert darauf, dass es richtig aussieht, als auf physikalische Genauigkeit.
  • Es gibt eine Erwähnung von Feuer- und Rauchsimulationen für Spiele sowie von Fluidsimulation auf der GPU. Wenn solche Effekte in Spielen laufen müssen, stellt sich die Frage, ob die GPU dann nicht ohnehin schon ausgelastet ist. Ein CFD-Problem zu lösen und gleichzeitig zu rendern wirkt nach sehr viel Arbeit.
    • Es stellt sich die Frage, ob man solche Simulationen auf einer iGPU ausführen kann, sodass die dGPU mehr Rendering-Arbeit übernehmen kann, oder ob die iGPU dafür zu schwach ist und man besser auf die CPU wechselt.
  • Eine andere Person namens "10 Minute Physics" erklärt solche Themen sehr gut.
  • Jemand, der von einem Mathematikstudium zum Software Engineer gewechselt ist, interessiert sich für CFD-Simulationen und möchte mehr über dieses Gebiet lernen, obwohl die Mathematik inzwischen ziemlich eingerostet ist, weil Vektoranalysis und partielle Differentialgleichungen lange keine Rolle mehr gespielt haben.
  • Kürzlich habe ich ein Video gesehen, in dem eine einfache Fluidsimulation implementiert wird, und fand das sehr interessant.
  • EmberGen ist eine erstaunliche Software, die Feuer und Rauch in Echtzeit auf Consumer-GPUs simuliert und einen Node-basierten Workflow unterstützt, mit dem sich neue Effekte leicht erstellen lassen.
    • Der Workflow wurde so verbessert, dass Arbeiten, die früher Stunden dauerten, in wenigen Minuten erledigt werden können.
    • Ich bin ein wenig enttäuscht, dass EmberGen auf Hacker News nicht mehr Aufmerksamkeit bekommen hat. (Meinung eines zufriedenen Kunden ohne Verbindung zu EmberGen/JangaFX)
  • Das ist zwar nicht der Hauptpunkt des Artikels, aber die Einleitung, dass man bei der Wahl von Simulation auf künstlerische Kontrolle verzichtet und stattdessen mit einer oft überwältigenden Menge an Reglern schmerzhafte Verhandlungen führen muss, wirkt etwas verfehlt.
    • Bei Schlüsselszenen wie dem Balrog würde ich mich nicht für eine Simulation entscheiden, sondern vollständige Kontrolle über jedes einzelne Frame bevorzugen.
    • Als Tolkien-Fantasy-Beispiel wäre eine Landschaftsszene, in der ein Fluss viele Kurven macht, ein paar Felsen herumliegen und gelegentlich ein Fisch aus dem Wasser springt, viel besser für eine Simulation geeignet.
  • Obwohl ich 64 GB RAM habe, bringt diese Seite meinen Tab komplett zum Absturz.
  • Es gibt einen Videolink, der gut erklärt, warum Explosionen in der Computergrafik oft schlecht aussehen.
  • Ich bin sehr beeindruckt vom Output des distill.pub-Templates und des Page-Building-Systems und finde es schade, dass das Projekt 2021 eingestellt wurde und nicht mehr gepflegt wird.