💨 Rauch-VFX — Stabile Fluide
Echtzeit-Rauchsimulation mit Jos Stams Stable-Fluids-Löser (implizite Diffusion + Advektion + Projektion). Vortizitätsbegrenzung erzeugt Verwirbelungen. Interaktives Ziehen mit der Maus erzeugt Rauch.
Funktionsweise
Der Simulator implementiert einen 2D-gitterbasierten Stable-Fluids-Löser auf einem 128×67-Gitter. Jeder Simulationsschritt: (1) Anwenden von Mauskräften auf das Geschwindigkeitsfeld, (2) Diffundieren der Geschwindigkeit mittels Gauss-Seidel-Iteration, (3) Projektion zur Durchsetzung der Inkompressibilität (Poisson-Lösung), (4) Advektion der Geschwindigkeit mittels semi-Lagrangescher Rückverfolgung, (5) Anwenden der Vortizitätsbegrenzung, (6) Diffundieren und Advehieren der Rauchdichte.
Häufig gestellte Fragen
Was sind Stable Fluids?
Stable Fluids ist eine Methode von Jos Stam (1999) für uneingeschränkt stabile Echtzeit-Fluidsimulation. Sie verwendet implizite Zeitintegration für die Diffusion und einen semi-Lagrangeschen Advektionsschritt, der unabhängig von der Zeitschrittgröße niemals numerisch instabil wird.
Was ist die Navier-Stokes-Gleichung?
Die inkompressiblen Navier-Stokes-Gleichungen beschreiben Fluidbewegung: ∂u/∂t = -(u·∇)u + ν∇²u + f, mit ∇·u = 0 für Inkompressibilität. Die Terme stellen jeweils Advektion (Transport durch die Strömung), Diffusion (Viskosität) und äußere Kräfte dar.
Was ist semi-Lagrangesche Advektion?
Semi-Lagrangesche Advektion verfolgt jede Gitterzelle rückwärts in der Zeit entlang des Geschwindigkeitsfelds, um den Fluidursprung zu ermitteln, und interpoliert dann Dichte/Geschwindigkeit an diesem Punkt. Sie ist uneingeschränkt stabil, führt aber zu numerischer Diffusion, wodurch die Strömung mit der Zeit unscharf erscheint.
Was ist der Projektionsschritt in der Fluidsimulation?
Der Projektionsschritt erzwingt Inkompressibilität (∇·u = 0), indem eine Poisson-Gleichung für den Druck gelöst und der Druckgradient von der Geschwindigkeit subtrahiert wird. Dies verhindert, dass sich Fluid ansammelt oder verschwindet, und erhält so die Gesamtmenge des Fluids.
Was ist Vortizitätsbegrenzung?
Vortizitätsbegrenzung wirkt der numerischen Diffusion der semi-Lagrangeschen Advektion entgegen. Sie erkennt Bereiche hoher Vortizität (Rotation der Geschwindigkeit) und wendet Kräfte an, um die wirbelnde Bewegung zu konzentrieren, was turbulentere, realistischer aussehende Rauch- und Feuereffekte erzeugt.
Was ist numerische Diffusion in der Fluidsimulation?
Numerische Diffusion ist eine künstliche Glättung, die durch die Diskretisierung der Advektionsgleichungen entsteht. Semi-Lagrangesche Methoden mit bilinearer Interpolation neigen besonders dazu, was dazu führt, dass Rauch mit der Zeit ohne korrigierende Techniken wie Vortizitätsbegrenzung unscharf erscheint.
Wie wird die Rauchdichte in Stable Fluids advehiert?
Die Rauchdichte ist ein passiver Skalar, der vom Geschwindigkeitsfeld transportiert wird. Der vollständige Zeitschritt: (1) Kräfte hinzufügen, (2) Geschwindigkeit diffundieren, (3) auf Divergenzfreiheit projizieren, (4) Geschwindigkeit advehieren, (5) erneut projizieren, (6) Dichte advehieren. Die Dichte wird mit einem Dissipationsfaktor multipliziert, um verblassenden Rauch zu simulieren.
Welche Gitterauflösung wird für Echtzeit-Fluidsimulation benötigt?
Echtzeit-Stable-Fluids verwendet typischerweise 64×64- bis 256×256-Gitter für 60 fps in JavaScript. GPU-Implementierungen (WebGL) können 512×512 oder höher ausführen. Höhere Auflösung erfasst mehr turbulente Details, erfordert aber mehr Berechnung pro Frame.
Was ist die Gauss-Seidel-Methode in der Fluidsimulation?
Die Gauss-Seidel-Iteration löst die linearen Systeme, die bei impliziter Diffusion und Druckprojektion entstehen. Jede Zelle wird mit den neuesten Nachbarwerten in wiederholten Durchläufen aktualisiert, bis Konvergenz erreicht ist — typischerweise 4-20 Iterationen pro Frame für ein gutes Verhältnis von Qualität zu Geschwindigkeit.
Wie funktioniert die Vortizitätsbegrenzungskraft?
Die Vortizität ω = ∇×u wird für jede Zelle berechnet. Der Gradient von |ω| gibt die Richtung zu den Wirbelzentren an. Die Begrenzungskraft f = ε(η×ω), wobei η = ∇|ω|/|∇|ω|| ist, drängt das Fluid dazu, sich um bestehende Wirbel zu drehen und den durch numerische Diffusion verlorenen Drall wiederherzustellen.
Ziehen Sie mit der Maus, um Rauch in Jos Stams Stable-Fluids-Löser einzubringen, und beobachten Sie, wie die Vortizitätsbegrenzung ihn zu wirbelnden Schwaden formt.
3D · Three.js / WebGL-Renderer · 60-FPS-Ziel · läuft vollständig clientseitig, keine Installation nötig