Flamme an - Feuersimulation und -darstellung
Feuer ist schwierig überzeugend darzustellen, doch mit Hilfe moderner Algorithmen sowie programmierbarer GPUs ist eine beinahe filmreife Berechnung möglich. Nvidia und Pixar demonstrierten das heute auf der GTC 2012.
Oft wird Feuer als simples oder teilweise überlagertes 2D-Bild dargestellt, ab und zu auch etwas dynamischer in Form prozeduraler Textureffekte. Filmeffekte geben derweil die Richtung vor, werden aber meist nicht in Echtzeit und schon gar nicht auf handelsüblichen PCs berechnet. Doch mit geschickter Programmierung ist eine täuschend echte Feuersimulation möglich und das sogar in Echtzeit.
Die Vorteile einer Simulation iiegen auf der Hand:
- nahezu beliebig hohe, aber skalierbare Auflösung
- keine sich ständig wiederholende Animationssequenz
- das simulierte Feuer kann auf Wind oder andere äußere Einflüsse reagieren
- Geringerer Speicherplatz als ein vergleichbar detaillierter, jedoch vorgefertigter Textureffekt
Demgegenüber stehen die Zeitkosten für die Berechnungen sowie der geringere Einfluss, denn der Spieldesigner oder Künstler noch ausüben kann. Die Feuersimulation findet in einem 2D-Raster statt, mit DirectX 11 oder Cuda 4.x sind jedoch auch Schreibvorgänge in 3D-Texturen möglich – in dieser Richtung will man das System gerade ausbauen. Dank der hohen Texturleistung der Kepler-Chips mit ihren bis zu 128 TMUs (wie auch die Radeon HD 7970er) benötigt die gezeigte Demo lediglich 17 ms für die Simulation in einem 128x128x64 großen Raum.
Die Basis einer Feuersimulation ist dabei der einer Flüssigkeits- oder Rauchsimulation sehr ähnlich. Der Programmierer kann die bereits vorhandenen Parameter (oder: Kanäle) Dichte und Geschwindigkeit verwenden und fügt Temperatur, Brennmaterial und ein Zufallsrauschen ("Noise") hinzu: Fertig ist, stark vereinfacht gesagt, das Feuer. Ein einfaches Verbrennungsmodell berücksichtigt den Verbrauch und die Spektralemission des Brennmaterials und ändert den Temperaturparameter. Letzterer beeinflusst auch die Geschwindigkeitsvektoren nach oben, da warme Luft bekanntlich aufsteigt.
Die kontinuierliche Bewegung transportiert die Eigenschaften des Feuers (Advektion) – um gegenseitige Einflüsse zu simulieren, reicht die Genauigkeit des bilinearen Texturfilters nicht aus, hochfrequente Details werden weggebügelt. Aufwendigeres Methoden wie (bi-)kubische Filterung oder wie im vorliegenden Fall ein Catmull-Rom-Filter müssen her, kosten aber wiederum Rechenzeit.
Um die hohen Temperaturen auch optisch zu transportieren, eignen sich Nachbearbeitungseffekte wie Glühen ("glow") oder Verzerrungen (Hitzeflimmern) sowie Bewegungsunschärfe durch Verrechnung der Daten entlang der Bewegungsrichtung. Ein zusätzlich hineingerechnetes Rauschen verstärkt den Eindruck schneller, wirbelnder Bewegung.
Für zusätzlichen Realismus können auch herumfliegende Glutteilichen hinzugefügt werden, da diese auch die Luftbewegungen in sonst leeren Räumen verdeutlichen. Um Rechenzeit zu sparen, werden diese im gezeigten Beispiel jedoch nicht komplett simuliert, sondern bestehen lediglich aus via Geometry-Shadern verzerrten und gestreckten Partikeln, deren Temperaturkanal aus der Simulation übernommen wird.
Um die Farbe überzeugend darzustellen muss schließlich auch der Farbraum berücksichtigt werden, da die menschliche Wahrnehmung für verschiedene Wellenlängen unterschiedlich gut ausgelegt ist. Das CIE XYZ-Modell muss ergo in das RGB-Spektrum übersetzt werden, damit das simulierte Feuer nicht eine völlig übersättige, comichafte Färbung erhält wie im vorletzten Galeriebild zu sehen.
Weitere optische Anhaltspunkte für die Feuersimulation liefern unsere Bildergalerie und das hochauflösende Video.