Realistische Rauchbeleuchtung mit 6-facher Beleuchtung in VFX Graph

MATHIEU MULLER / UNITYSenior Manager, Product Management
Jan 20, 2023|15 Min.
Realistische Rauchbeleuchtung mit 6-facher Beleuchtung in VFX Graph
Diese Website wurde aus praktischen Gründen für Sie maschinell übersetzt. Die Richtigkeit und Zuverlässigkeit des übersetzten Inhalts kann von uns nicht gewährleistet werden. Sollten Sie Zweifel an der Richtigkeit des übersetzten Inhalts haben, schauen Sie sich bitte die offizielle englische Version der Website an.

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.

6-fache Beleuchtung

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.

 Darstellung von Sechs-Wege-Lichtbildern

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.

 Eine einzige Sechsfach-Lichtkarte mit verschiedenen Sonnenausrichtungen

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).
Sechsfache Beleuchtung für alle Rauchschwaden und Nahwolken mit vielen Instanzen von nur vier VFX-Grafiken

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
Erstellung und Bearbeitung von 6-fachen Beleuchtungsplänen
Exporteure

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.

HDA für SideFX Houdini

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.

Zusatzmodul für Blender

Menü des Blender-Exporters zugeklappt

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.

Einstellungen des Blender-Exporters

Andere Werkzeuge

EmberGen Beispiel-Einrichtung

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.

Backen von Lichtbildern

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.

Lightmap-Texturformat

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.

Lightmap A: Lichtkarten rechts, oben und hinten + Transparenz
Lightmap B: Linke, untere und vordere Lightmaps + Extra-Kanal

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.

Rendering der Rauchbeleuchtung
Standbild der Probeexplosion bei Nacht

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.

Dynamische Lichter im Sechs-Wege-Rauch

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.

Derselbe Raucheffekt unter verschiedenen Beleuchtungsbedingungen - oben links: gerichtetes Licht und Umgebungslicht; oben rechts: Umgebungslicht, Sondenvolumen und gerichtetes Licht; unten links: Umgebungslicht und Sonden; und unten rechts: Punktlicht und Sonden

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.

Adaptive Probe Volumes und sechsfache Rauchbeleuchtung

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.

Vergleich von Multiplikations- und Absorptionsmodi zur Anwendung von Farbe auf Rauch
Auswertung der sechsfachen Lichtstreuung alias Bidirectional Scattering Distribution Function (BSDF)

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.

1. Farbe und Absorption
Erzeugen Sie Rauch, Dampf oder Wolken mit denselben Lightmaps, indem Sie die Farbe und die Absorptionsstärke steuern.
2. Lightmap-Zuordnung
Erstellen Sie mehr oder weniger dichte oder stilisierte Effekte, indem Sie die Lightmaps neu zuordnen.
3. Emissionsgrad
Umwandlung von Rauch in Explosionen mit verschiedenen Emissionsgradienten
Wie man anfängt

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.

Ein Beispiel für eine kostenlose Sechsfachprobe, die jetzt verfügbar ist

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.
Ansicht des Inspektors mit ausgewähltem "Six Way Smoke Lit".
  • 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.

Was kommt als Nächstes

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.