Realistische Rauchbeleuchtung mit 6-facher Beleuchtung in VFX Graph

Die Simulation und das Rendering von Rauch und Explosionen in Echtzeit ist aufgrund der komplexen Wechselwirkungen zwischen Beleuchtung und Dynamik immer wieder eine Herausforderung.
Immer mehr Echtzeittechnologien führen die volumetrische Flüssigkeitssimulation und das Rendering ein, aber es scheint immer noch zu teuer zu sein, um in Spielen in großem Umfang eingesetzt zu werden. Wie bei vielen Rendering-Problemen geht es also darum, das Erscheinungsbild mit möglichst geringen Kosten zu optimieren.
Der Tech Stream 2022.2 stellt einen kompletten End-to-End-Workflow (von DCC bis Unity) vor, mit dem Sie Rauch aus gebackenen Simulationen realistisch rendern können. Dieser Workflow lässt sich auf allen Plattformen und unter allen Lichtverhältnissen skalieren. Diese Lösung umfasst auch eine Bibliothek mit gebrauchsfertigen, gebackenen Karten, die es jedem leicht machen, Raucheffekte auf ein neues Niveau der visuellen Treue zu bringen.
Das Rendern von Rauch in Spielen wird meist mit texturierten Sprites durchgeführt, da die Berechnung einer vollständig volumetrischen Beleuchtung für ein Echtzeit-Budget zu teuer ist. Eine der häufigsten Fragen, wenn es um Sprites geht, ist jedoch folgende: Wie kann man den Rauch anhand einer flachen 2D-Geometrie beleuchten?
Es gibt mehrere Ansätze, wie z. B. die Verwendung von Normal Mapping oder die Verwendung einer vollständig gebackenen Farbkarte. Aber diesen Ansätzen mangelt es entweder an Realismus, an Erweiterbarkeit oder an beidem.
Hier kommt die 6-Wege-Beleuchtung ins Spiel, ein alternativer Ansatz für dieses Problem, bei dem eine Reihe von Lichtkarten verwendet wird, die die Beleuchtungsreaktion des Rauchs für Licht aus sechs verschiedenen Richtungen enthalten. Diese Lightmaps werden zusammen mit einem Alphakanal und einer optionalen Emissionsmaske in einen Satz von zwei Texturen gebacken.

Mit diesen Texturen kann der Rauch bei unterschiedlichen Lichtverhältnissen dynamisch schattiert werden. Es zeigt volumetrische Beleuchtungsphänomene wie Innenschatten oder Lichtränder, wenn es von hinten beleuchtet wird, die mit den anderen Techniken nicht erreicht werden konnten.

Sie können verschiedene Steuerelemente wie Farbe, Absorption, Emissionsgradient und Lightmap-Remapping verwenden, um verschiedene Effekte auf der Grundlage derselben Texturen zu erstellen. So können Sie Ihre Assets in vielen verschiedenen Szenarien wiederverwenden.
Diese Technik, die unter verschiedenen Namen bekannt ist (6-Wege-Beleuchtung, 6-Punkt-Beleuchtung, 6D-Lightmaps, 6-Punkt-Lightmaps, Rauchbeleuchtung usw.), wird in mehreren AAA-Spielen verwendet - sehen Sie sich diese großartige Übersicht über die Technik an, die vom ehemaligen VFX-Tech-Direktor des Spiels geschrieben wurde.
Zu den wichtigsten Vorteilen der Technik gehören:
- Ermöglicht das Rendering komplexer Lichtinteraktionen, die sonst nicht in Echtzeit möglich sind, wie z. B. Multi-Bounce-Streuung, da sie direkt von der Simulation in die Lichtkarten übertragen werden können.
- Verbesserung der visuellen Qualität mit Rauch-Effekten, die dank besserer Beleuchtung besser in die Welt integriert sind - wenn der Rauch beispielsweise in eine Szene eingefügt wird, reagiert er auf eine beliebige Anzahl und alle Arten von dynamischen Lichtern (d.h. Richtung, Punkt, Fläche) sowie auf indirekte (z.B. Sonden) und Umgebungsbeleuchtung. Daher kann dasselbe Asset an verschiedenen Orten platziert werden, aber jede Instanz fühlt sich an, als gehöre sie zu ihrer unmittelbaren Umgebung.
- Geringer Aufwand trotz der hohen Qualität des Bildmaterials. Raucheffekte sind in der Tat recht kostengünstig zu rendern, vergleichbar mit einem herkömmlichen beleuchteten Sprite.
- Einsparung von Festplatten- und Texturspeicher. Obwohl Daumenkino-Texturen immer sehr speicherintensiv sind, können Sie mit der 6-Wege-Beleuchtung die gleiche Textur an vielen verschiedenen Stellen wiederverwenden. Das Aussehen des Rauchs kann je nach den angewandten Variationen (Farbe, Absorption usw.) und den Lichtverhältnissen vor Ort stark variieren. Um mehr Speicherplatz zu sparen, können Sie gebackene Bewegungsvektoren nutzen, um die Anzahl der benötigten Frames zu reduzieren (ein nützliches Tool hierfür ist TFlow von Tuatara im Unity Asset Store).

Ein Nachteil ist, dass dieser Trick sehr flach ist. Auch wenn diese Technik dank der originalgetreuen Beleuchtung einen großartigen Eindruck von Volumen vermittelt, handelt es sich dennoch um eine Texturfolie und nicht um einen volumetrischen 3D-Effekt. Aus diesem Grund eignet er sich am besten für Hintergrundeffekte, dekorative Effekte wie Dampf oder Explosionen. Um mehr Tiefe zu erzielen, müssen Sie diesen Effekt auf mehr Partikel anwenden oder ihn mit volumetrischen Effekten kombinieren (z. B. lokaler volumetrischer Nebel oder volumetrische Materialien in der High Definition Render Pipeline).
Hier sind typische Anwendungsfälle:
- Tag: Simuliert Sonnen- und Himmelslicht, das sich durch den Rauch ausbreitet
- Nacht: Statische oder bewegliche Punktlichter und Scheinwerfer können den Rauch beleuchten
- High-Fidelity-Rauch
- Dust
- Steam
- Volumetrische Wolken: 6-fache Beleuchtung für Heldenwolken
- Erweiterte Effekte wie Portale, Sandstürme oder Tornados
Wir stellen einige Werkzeuge zur Verfügung, die bei der Erstellung von Lichtkarten helfen. Im VFXToolbox-Repository finden Sie Exporteure für Houdini und Blender sowie andere Tools wie den Image Sequencer, mit dem Sie 6-Wege-Lightmap-Daumenkinos neu packen oder die Farbintensität anpassen können.
Alle Anweisungen zur Installation des Tools finden Sie in der Datei Readme.txt. Beachten Sie, dass zwei Varianten des Werkzeugs nebeneinander existieren: Die erste Variante finden Sie im Objektkontext. Es basiert auf dem OpenGL-Rendering-Knoten und ist sehr schnell.
Die zweite Variante findet sich im Kontext der Bühne und ist um den Karma-Renderer herum aufgebaut. Beide bieten die Möglichkeit, Lightmaps und Emissive zu rendern und ein Flipbook zu exportieren.

Um das Add-on zu installieren, folgen Sie dem Standardverfahren in Blender. Installieren Sie im Menü "Einstellungen" die Datei unity_6way.py und aktivieren Sie das Add-on. Danach finden Sie ein Panel in der 3D-Ansicht unter der Kategorie Unity.
Das Add-on ermöglicht das Rendern von Lightmaps, das Rendern von Emissivkanälen, einige grundlegende Compositing-Funktionen und das Erstellen von Daumenkinos aus einer Lightmap-Sequenz. Diese Aufgaben können alle auf einmal oder getrennt durchgeführt werden, wobei für jede Stufe individuelle Einstellungen zur Kontrolle des Endergebnisses möglich sind.

Andere Werkzeuge

Einige Werkzeuge bieten bereits offizielle oder von Benutzern erstellte Optionen und Plug-ins für den Export von 6-Wege-Lichtkarten.
In EmberGen können Sie zum Beispiel eine Option namens "Six point" im Render-Knoten verwenden. Bitte beachten Sie, dass dieser Workflow nicht offiziell unterstützt wird, da wir keine Kontrolle über die Lichtintensität in diesen Karten haben. Es kann jedoch nützlich sein, wenn Sie die Einstellung manuell vornehmen.
Sie können auch 6-fache Beleuchtungskarten mit Ihren eigenen Werkzeugen erstellen. Dazu können Sie die unten beschriebenen Schritte und die Formatierung der Verpackung befolgen.
Um die Lightmaps zu backen, müssen wir die Objekte sechsmal mit unterschiedlichen Beleuchtungseinstellungen rendern.
Wir verwenden gerichtete weiße Lichter mit einer unterschiedlichen Richtung für jedes Rendering: oben, unten, links, rechts, vorne und hinten, alle relativ zur Kamera.
Emissive Informationen, wie z. B. Feuer, sind nicht Teil der Lightmaps und können später auf einer separaten Textur gerendert oder in einen zusätzlichen Kanal der Lightmaps gepackt werden.
Die Daten für 6-fache Beleuchtungskarten sind in zwei RGBA-Texturen verpackt. Jede der sechs Lichtkartenrichtungen wird in einem Farbkanal (rot, grün oder blau) der beiden Texturen gespeichert.
Außerdem enthält der Alphakanal für die erste Textur die Transparenz. Dadurch bleibt der Alphakanal der zweiten Textur als zusätzlicher Kanal verfügbar. Der aktuelle Arbeitsablauf bietet Ihnen die Möglichkeit, eine emissive Komponente in diesen zusätzlichen Kanal zu packen.


Sie können die Kanäle im Unity-Editor in einem Vorschaufenster separat betrachten, wenn die Textur ausgewählt ist.
Mit anderen Werkzeugen erstellte Lightmaps können diese Kanäle in einer anderen Reihenfolge packen. Es gibt eine grundlegende Funktionalität, um Kanäle innerhalb von Unity mit dem Inspektor neu anzuordnen, aber Sie benötigen möglicherweise einen Bildeditor, wenn Sie Kanäle von einer Textur zu einer anderen verschieben müssen.

Die Beleuchtung des Rauchs ist direkt in die HDRP-Lichtschleife integriert, was bedeutet, dass es keine spezifische Begrenzung für die Anzahl der Lichter gibt, die den Rauch beeinflussen. Je mehr Lichter, desto rechenintensiver wird es natürlich (Sie können die Vorteile von Lichtebenen nutzen, um dies abzumildern).
Es werden alle Arten von direkten Lichtern verarbeitet, wie z. B. gerichtete, punktförmige, punktuelle, rechteckige und lineare Lichter. Auch bei Lichteffekten im Inneren des Rauchs lassen sich beeindruckende Ergebnisse erzielen: Blitze, elektrische Funken, Fackeln, Glühwürmchen und vieles mehr.

Für jedes Licht ist es wichtig, zunächst seine Richtung relativ zum Partikel zu bestimmen und diese Richtung zu verwenden, um zwischen den verschiedenen Lightmaps zu mischen. Bei Flächenlichtern verwenden wir den Ansatz des repräsentativsten Punktes, d. h. wir ermitteln den nächstgelegenen Punkt des Lichtes, um die Richtung zu berechnen.

Die Partikel werden auch durch indirekte Beleuchtung beeinflusst, insbesondere durch Lichtsonden, Adaptive Probe Volumes (APV), Ambient Probes und Light Probe Proxy Volumes (LPPV), je nachdem, welche Typen in der Szene aktiv sind. Die beste Leistung erzielen Sie, wenn Sie den Modus "Nur Umgebungslicht" verwenden, um die Beleuchtungsschleife komplett zu überspringen und eine sehr günstige Beleuchtungsberechnung zu ermöglichen.

Aus Leistungsgründen werden die Beiträge der Sonden im Vertex-Shader ausgewertet und dann in den Pixel-Shader interpoliert. Das bedeutet, dass bei Verwendung eines Vierfachausgangs die Sonden nur an den vier Ecken des Vierfachs ausgewertet werden. Bei räumlich variierenden Sonden wie APVs können ein oder mehrere Scheitelpunkte auf einer Seite einer Wand landen, während sich der Rest des Partikels auf der anderen Seite befindet. In diesem Fall sind die Beiträge der Sonde falsch und führen zu visuellen Artefakten. Eine Lösung besteht in diesem Fall darin, ein stärker mosaikartiges Netz mit mehr Scheitelpunkten zu verwenden. Beachten Sie, dass dies im Allgemeinen bei Außenaufnahmen kein Problem darstellt.
Rauch wird in unserem Modell als vollständig diffus betrachtet, so dass spiegelnde indirekte Beiträge nicht bewertet werden. Das bedeutet zum Beispiel, dass Reflexionssonden keine Partikel beeinflussen, die mit 6-fachem Rauch beleuchtet werden.
Wir bieten auch zwei verschiedene Möglichkeiten, Rauch mit Farbe zu versehen. Sie können dies entweder durch Ableitung der Lichtabsorption pro Farbkomponente aus den Lightmaps (für ein realistischeres Verhalten von farbigem Rauch) oder durch eine einfache Multiplikation (die billigste Methode) erreichen.


Die 6-fache Beleuchtungs-Rendering-Ausgabe in VFX Graph bietet verschiedene Steuerelemente, um das Aussehen des Effekts anzupassen und verschiedene Effekte unter Wiederverwendung derselben Lightmaps zu erstellen.



Es dauert nur ein paar Minuten, um Ihrem Projekt schönen 6-fachen Rauch hinzuzufügen. Sie müssen mit Unity 2022.2 oder höher arbeiten und VFX Graph und HDRP verwenden.
Um Ihnen den Einstieg zu erleichtern, haben wir eine Bibliothek mit gebrauchsfertigen Karten erstellt. Wir bieten sowohl High-Fidelity-Assets, die Sie nach Belieben bearbeiten und verpacken können - zum Beispiel mit der VFX Toolbox - als auch kompaktere Versionen, die leichtgewichtig und bereit für Ihr Spiel sind.

Gehen Sie folgendermaßen vor, um einen Effekt mit diesen Maps und 6-facher Beleuchtung zu erstellen:
- Ziehen Sie die Karten per Drag & Drop in den Asset-Ordner von Unity.
- Erstellen und öffnen Sie ein neues VFX Graph-Asset.
- Erstellen Sie einen neuen Particle Lit Output und wählen Sie ihn aus.
- Wählen Sie im Inspektor in der Dropdown-Liste Materialtyp die Option Sechswege-Rauchlicht.

- Legen Sie die positive und negative Achsen-Lightmap im Ausgabekontext mit den von Ihnen importierten Maps fest.
- Testen Sie mit unterschiedlichen Lichtverhältnissen.
Um mehr über VFX Graph im Allgemeinen zu erfahren, besuchen Sie unsere Website und lesen Sie unser E-Book Der definitive Leitfaden zur Erstellung fortgeschrittener visueller Effekte in Unity.
Bei den nächsten Iterationen der 6-Wege-Beleuchtung werden wir uns auf die Integration von Shader Graph und die Unterstützung der Universal Render Pipeline (URP) konzentrieren. Wir haben auch Ideen, um einige inhärente Beschränkungen der Technik aufzuheben (Flachheit, die beim Empfang von Schatten aufgedeckt wird, Lichtkarten, die sich auf ein Partikel beschränken und verdeckende Nachbarn nicht berücksichtigen, und mehr).
Wir arbeiten auch daran, VFX Graph um die Ausgabe von volumetrischem Nebel zu erweitern, damit visuelle Effekte volumetrischen Nebel erzeugen können. Dadurch können die Raucheffekte in Kombination mit der 6-fach-Beleuchtung noch weiter gesteigert werden. Sie ist bereits in der Alpha-Version 2023.1.a25 verfügbar.
Und natürlich sind wir auf der Suche nach einer tatsächlichen volumetrischen Flüssigkeitssimulation, Wiedergabe und Rendering. Damit steht Ihnen eine breite Palette von Techniken zur Verfügung, mit denen Sie schöne und realistische Raucheffekte für Ihre Zielplattformen und Ihr Budget erzeugen können.
Teilen Sie uns Ihr Feedback mit oder stellen Sie Fragen in unserem speziellen Unity-Forum-Thread. Um neue Funktionen vorzuschlagen und für geplante Funktionen abzustimmen, sehen Sie sich unsere öffentliche Rendering-Roadmap an.
