Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Volumetrischer Nebel und Nebelvolumen

Bemerkung

Volumetrischer Nebel wird nur im Clustered Forward Rendering-Backend unterstützt, nicht aber in Forward Mobile oder Kompatibilität.

Wie in Environment und Post-Processing beschrieben, unterstützt Godot verschiedene visuelle Effekte, darunter zwei Arten von Nebel: traditionellen (nicht-volumetrischen) Nebel und volumetrischen Nebel. Traditioneller Nebel betrifft die gesamte Szene auf einmal und kann nicht mit Fog-Shader angepasst werden.

Volumetrischer Nebel kann auf Wunsch gleichzeitig mit nicht-volumetrischem Nebel verwendet werden.

Auf dieser Seite erfahren Sie:

  • Wie man volumetrischen Nebel in Godot einrichtet.

  • Was Nebelvolumen sind und wie sie sich von "globalem" volumetrischem Nebel unterscheiden.

Siehe auch

Sie können sehen, wie volumetrischer Nebel in Aktion funktioniert, indem Sie das Volumetric Fog demo project benutzen.

Hier ist ein Vergleich zwischen traditionellem Nebel (der nicht mit der Beleuchtung interagiert) und volumetrischem Nebel, der mit der Beleuchtung interagieren kann:

../../_images/volumetric_fog_comparison.png

Propertys des volumetrischen Nebels

Nachdem Sie den volumetrischen Nebel in der Environment-Ressource des WorldEnvironment-Nodes aktiviert haben, können Sie die folgenden Propertys bearbeiten:

  • Dichte: Die exponentielle Basisdichte des volumetrischen Nebels. Setzen Sie diesen Wert auf die niedrigste Dichte, die Sie global haben möchten. FogVolumes können verwendet werden, um diese Dichte in bestimmten Bereichen zu erhöhen oder zu verringern. Ein Wert von 0.0 deaktiviert globalen volumetrischen Nebel, während FogVolumes volumetrischen Nebel in bestimmten Bereichen anzeigen können. Der Nebel wird exponentiell gerendert, wie im wirklichen Leben.

  • Albedo: Die Farbe des volumetrischen Nebels im Zusammenspiel mit Lichtern. Nebel und Dunst haben eine Albedo nahe an Weiß (Farbe(1, 1, 1, 1)), während Rauch eine dunklere Albedo hat.

  • Emission: Das vom volumetrischen Nebel emittierte Licht. Auch mit Emission wirft der volumetrische Nebel kein Licht auf andere Oberflächen. Die Emission ist nützlich, um eine Umgebungsfarbe festzulegen. Da der volumetrische Nebeleffekt nur Einzelstreuung verwendet, benötigt der Nebel ein wenig Emission, um die harten Schatten zu mildern.

  • Emissionsenergie: Die Helligkeit des vom volumetrischen Nebel ausgesandten Lichts.

  • GI-Inject: Skaliert die Stärke der Global Illumination, die für die Albedofarbe des volumetrischen Nebels verwendet wird. Ein Wert von 0,0 bedeutet, dass die Global Illumination keinen Einfluss auf den volumetrischen Nebel hat. Dies hat einen kleinen Performanceverlust zur Folge, wenn der Wert über 0,0 liegt.

  • Anisotropie: Die Richtung des gestreuten Lichts, wenn es durch den volumetrischen Nebel geht. Ein Wert nahe 1.0 bedeutet, daß fast alles Licht nach vorne gestreut wird. Ein Wert nahe bei 0.0 bedeutet, daß das Licht gleichmäßig in alle Richtungen gestreut wird. Ein Wert nahe bei -1.0 bedeutet, dass das Licht hauptsächlich nach hinten gestreut wird. Nebel und Dunst streuen das Licht leicht nach vorne, während Rauch das Licht gleichmäßig in alle Richtungen streut.

  • Länge: Die Entfernung, über die der volumetrische Nebel berechnet wird. Erhöhen Sie den Wert, um den Nebel über einen größeren Bereich zu berechnen, verringern Sie ihn, um mehr Details hinzuzufügen, wenn eine große Reichweite nicht benötigt wird. Für die beste Qualität des Nebels sollten Sie diesen Wert so niedrig wie möglich halten.

  • Detailausbreitung: Die Verteilung der Größe über die Länge des Froxel-Puffers. Ein höherer Wert komprimiert die Froxel näher an der Kamera und platziert mehr Details näher an der Kamera.

  • Umgebungs-Inject: Skaliert die Stärke des Umgebungslichts, das für den volumetrischen Nebel verwendet wird. Ein Wert von 0.0 bedeutet, dass das Umgebungslicht keinen Einfluss auf den volumetrischen Nebel hat. Dies hat einen kleinen Performanceverlust zur Folge, wenn der Wert über 0.0 liegt.

  • Himmelseinfluss: Steuert, wie viel volumetrischer Nebel auf den Hintergrundhimmel gezeichnet werden soll. Bei einem Wert von 0.0 hat der volumetrische Nebel keinen Einfluss auf die Darstellung des Himmels (einschließlich FogVolumes).

Im Abschnitt Zeitliche Reprojektion werden zwei weitere Properties angeboten:

  • Zeitliche Reprojektion > Aktiviert: Aktiviert die zeitliche Reprojektion im volumetrischen Nebel. Zeitliche Reprojektion mischt den volumetrischen Nebel des aktuellen Frames mit dem volumetrischen Nebel des letzten Frames, um ausgefranste Kanten zu glätten. Die Kosten für die Performance sind minimal, aber es führt dazu, dass sich bewegende FogVolumes und Light3Ds Ghosting-Effekte erzeugen und eine Spur hinter ihnen hinterlassen. Wenn die zeitliche Reprojektion aktiviert ist, sollten Sie vermeiden, FogVolumes oder Light3Ds zu schnell zu bewegen. Bei kurzlebigen dynamischen Lichteffekten sollte Volumetrische Nebelnergie auf 0,0 gesetzt werden, um Geisterbilder zu vermeiden.

  • Zeitliche Reprojektion > Betrag: Der Betrag, um den das letzte Bild mit dem aktuellen Bild überblendet wird. Ein höherer Wert führt zu einem glatteren volumetrischen Nebel, verschlimmert aber das "Ghosting" erheblich. Ein niedrigerer Wert verringert die Ghosting, kann aber dazu führen, dass der zeitliche Jitter pro Frame sichtbar wird.

Bemerkung

Im Gegensatz zu nicht-volumetrischem Nebel hat volumetrischer Nebel eine endliche Reichweite. Das bedeutet, dass volumetrischer Nebel eine große Welt nicht vollständig abdecken kann, da er in der Ferne irgendwann nicht mehr gerendert wird.

Wenn Sie weit entfernte Bereiche vor dem Spieler verbergen möchten, empfiehlt es sich, sowohl nicht-volumetrischen Nebel als auch volumetrischen Nebel gleichzeitig zu aktivieren und die Dichte entsprechend anzupassen.

Lichtinteraktion mit volumetrischem Nebel

Um das Streuverhalten von Nebel-Licht in der Realität zu simulieren, interagieren alle Lichttypen mit volumetrischem Nebel. Wie stark sich jedes Licht auf den volumetrischen Nebel auswirkt, kann mit der Property Volumetrische Nebelnergie für jedes Licht eingestellt werden. Wenn Sie Schatten für ein Licht aktivieren, werden diese Schatten auch im volumetrischen Nebel sichtbar.

Wenn die Interaktion mit Nebel-Licht aus künstlerischen Gründen nicht erwünscht ist, kann sie global deaktiviert werden, indem Volumetrischer Nebel > Albedo in der Environment-Ressource auf eine rein schwarze Farbe gesetzt wird. Die Interaktion mit Nebel-Lichtern kann auch für bestimmte Lichter deaktiviert werden, indem die Volumetrische Nebelnergie auf 0 gesetzt wird. Dadurch wird auch die Performance leicht verbessert, da das Licht von den volumetrischen Nebelberechnungen ausgeschlossen wird.

Verwendung von volumetrischem Nebel als volumetrische Beleuchtungslösung

Auch wenn es physikalisch nicht korrekt ist, ist es möglich, volumetrischen Nebel so einzustellen, dass er als volumetrische Beleuchtungslösung funktioniert. Das bedeutet, dass unbeleuchtete Teile der Umgebung nicht mehr durch Nebel verdunkelt werden, aber Licht kann den Nebel in bestimmten Bereichen immer noch heller machen.

Dies kann erreicht werden, indem man die volumetrische Nebeldichte auf den niedrigsten erlaubten Wert, der größer als Null ist (0.0001) setzt und dann die Property Volumetrische Nebelnergie der Lichter auf viel höhere Werte als den Defaultwert erhöht, um dies auszugleichen. Werte zwischen 10000 und 100000 sind normalerweise gut geeignet.

../../_images/volumetric_fog_lighting.png

Abwägung zwischen Performance und Qualität

Es gibt einige Projekteinstellungen, mit denen Sie die Performance und Qualität des volumetrischen Nebels anpassen können:

  • Rendern > Environment > Volumetrischer Nebel > Volumengröße: Die Basisgröße wird verwendet, um die Größe des Froxelpuffers in der X- und Y-Achse der Kamera zu bestimmen. Die endgültige Größe wird durch das Seitenverhältnis des Bildschirms skaliert, so dass die tatsächlichen Werte von der Einstellung abweichen können. Stellen Sie eine größere Größe für detaillierteren Nebel ein oder stellen Sie eine kleinere Größe für bessere Performance ein.

  • Rendern > Environment > Volumetrischer Nebel > Volumentiefe: Anzahl der Slices, die entlang der Tiefe des Froxel-Puffers für volumetrischen Nebel verwendet werden sollen. Eine niedrigere Zahl ist effizienter, kann aber zu Artefakten bei Kamerabewegungen führen.

  • Rendern > Environment > Volumetrischer Nebel > Filter verwenden: Aktiviert die Filterung des volumetrischen Nebeleffekts vor der Integration. Dadurch wird der Nebel deutlich unschärfer, wodurch feine Details reduziert, aber auch harte Kanten und Aliasing-Artefakte geglättet werden. Deaktivieren Sie diese Option, wenn mehr Details erforderlich sind.

Bemerkung

Volumetric fog can cause banding to appear on the viewport, especially at higher density levels. See Color-Banding for guidance on reducing banding.

Verwendung von Nebelvolumen für lokalen volumetrischen Nebel

Manchmal soll der Nebel auf bestimmte Bereiche beschränkt sein. Umgekehrt kann es sein, dass Sie globalen volumetrischen Nebel haben möchten, der aber von bestimmten Bereichen ausgeschlossen werden soll. Beide Ansätze können mit FogVolume-Nodes verfolgt werden.

Hier finden Sie eine Schnellstart-Anleitung für die Verwendung von FogVolumes:

  • Stellen Sie sicher, dass Volumetrischer Nebel in den Propertys der Umgebung aktiviert ist. Wenn globaler volumetrischer Nebel unerwünscht ist, setzen Sie seine Dichte auf 0.0.

  • Erstellen Sie einen FogVolume-Node.

  • Weisen Sie der Property Material des FogVolume-Nodes ein neues FogMaterial zu.

  • Setzen Sie Dichte im FogMaterial auf einen positiven Wert, um die Dichte im FogVolume zu erhöhen, oder auf einen negativen Wert, um die Dichte vom globalen volumetrischen Nebel zu subtrahieren.

  • Konfigurieren Sie die Ausdehnung und Form des FogVolumes nach Bedarf.

Bemerkung

Dünne Nebelvolumen scheinen zu flackern, wenn sich die Kamera bewegt oder dreht. Dies kann durch Erhöhen der Projekteinstellung Rendern > Environment > Volumetrischer Nebel > Volumentiefe (auf Kosten der Performance) oder durch Verringern der Länge in den Propertys für volumetrischen Nebel in der Umgebung (ohne Kosten für die Performance, aber auf Kosten einer geringeren Nebelreichweite) gemildert werden. Alternativ kann das Nebelvolumen dicker gemacht werden und eine geringere Dichte im Material verwenden.

FogVolume-Propertys

  • Ausdehnung: Die Größe des FogVolume, wenn Shape Ellipsoid, Kegel, Zylinder oder Box ist. Wenn Shape Kegel oder Zylinder ist, wird der Kegel/Zylinder so angepasst, dass er in die Ausdehnung passt. Eine ungleichmäßige Skalierung von Kegel-/Zylinderformen über die Ausdehnung-Property wird nicht unterstützt, aber Sie können stattdessen den FogVolume-Node skalieren.

  • Shape: Die Form des FogVolumes. Diese kann auf Ellipsoid, Kegel, Zylinder, Box oder Welt (wirkt als globaler volumetrischer Nebel) eingestellt werden.

  • Material: Das vom FogVolume verwendete Material. Kann entweder ein eingebautes FogMaterial oder ein benutzerdefiniertes ShaderMaterial sein (Fog-Shader).

Nachdem Sie Neues FogMaterial in der Material-Property gewählt haben, können Sie die folgenden Propertys in FogMaterial anpassen:

  • Dichte: Die Dichte des FogVolumes. Dichtere Objekte sind undurchsichtiger, können aber durch Unterabtastung Artefakte aufweisen, die wie Streifen aussehen. Negative Werte können verwendet werden, um Nebel von anderen FogVolumes oder globalem volumetrischen Nebel zu subtrahieren.

  • Albedo: Die einfach streuende Farbe des FogVolumes. Intern wird das Member-Albedo in Einzelstreuung umgewandelt, die additiv mit anderen FogVolumes und der Albedo des globalen volumetrischen Nebels gemischt wird.

  • Emission: Die Farbe des vom FogVolume emittierten Lichts. Das emittierte Licht wirft kein Licht oder Schatten auf andere Objekte, kann aber nützlich sein, um die Farbe des FogVolumes unabhängig von Lichtquellen zu modulieren.

  • Höhenabfall: Die Rate, mit der die Dichte des höhenbasierten Nebels mit zunehmender Höhe im World-Space abnimmt. Ein hoher Falloff-Wert führt zu einem scharfen Übergang, während ein niedriger Falloff-Wert einen sanfteren Übergang bewirkt. Ein Wert von 0.0 ergibt einen Nebel mit gleichmäßiger Dichte. Die Höhenschwelle wird durch die Höhe des zugehörigen FogVolumes bestimmt.

  • Kanten-Fading: Die Härte der Kanten des FogVolume. Ein höherer Wert führt zu weicheren Kanten, während ein niedrigerer Wert zu härteren Kanten führt.

  • Dichte-Textur: Die 3D-Textur, die zur Skalierung der Memberdichte des FogVolumes verwendet wird. Dies kann verwendet werden, um die Nebeldichte innerhalb des FogVolumes mit jeder Art von statischem Muster zu variieren. Für animierte Effekte sollten Sie einen eigenen Fog-Shader verwenden. Sie können jedes Bild als 3D-Textur importieren, indem Sie seinen Importtyp im Import-Dock ändern.

Verwendung von 3D-Rauschdichte-Texturen

Seit Godot 4.1 gibt es eine NoiseTexture3D-Ressource, die zur prozeduralen Erzeugung von 3D-Rauschen verwendet werden kann. Dies ist gut geeignet für FogMaterial-Dichte-Texturen, die zu detaillierteren Nebeleffekten führen können:

FogMaterial-Vergleich (ohne und mit Dichte-Textur)

Der Screenshot wurde mit der Projekteinstellung Volumengröße von 192 aufgenommen, um hochfrequente Details im Nebel besser sichtbar zu machen.

Wählen Sie dazu die Property Dichtentextur und wählen Sie Neue NoiseTexture3D. Bearbeiten Sie diese NoiseTexture3D, indem Sie darauf klicken, dann klicken Sie auf Rauschen am unteren Rand der NoiseTexture3D-Propertys und wählen Neues FastNoiseLite. Passen Sie die Breite, Höhe und Tiefe der Rauschtextur an die Abmessungen Ihres Nebelvolumens an.

Um die Performance zu verbessern, empfiehlt es sich, niedrige Texturgrößen zu verwenden (64×64×64 oder niedriger), da hochfrequente Details in einem FogVolume nur schwer zu erkennen sind. Wenn Sie detailliertere Dichtevariationen darstellen möchten, müssen Sie Rendern > Environment > Volumetrischer Nebel > Volumengröße in den Projekteinstellungen erhöhen, was mit Kosten für die Performance verbunden ist.

Bemerkung

Der Farbgradient von NoiseTexture3D wirkt sich auf FogMaterial-Dichte-Texturen aus, aber da nur der Rotkanal der Textur abgetastet wird, wirkt sich nur der Rotkanal des Farbgradienten auf die resultierende Dichte aus.

Bei Verwendung eines Farbgradienten wird das Nebelvolumen jedoch nicht entsprechend der Textur gefärbt. Sie müssten einen benutzerdefinierten Shader verwenden, der eine Texture3D liest, um dies zu erreichen.

Benutzerdefinierte FogVolume-Shader

Diese Seite behandelt nur die Built-in-Einstellungen von FogMaterial. Wenn Sie das Verhalten des Nebels innerhalb eines FogVolume-Nodes anpassen müssen (z.B. um animierten Nebel zu erzeugen), kann das Aussehen der FogVolume-Nodes mit Fog-Shader angepasst werden.

Vortäuschen von volumetrischem Nebel mit Quads

In einigen Fällen kann es besser sein, speziell konfigurierte QuadMeshes als Alternative zu volumetrischem Nebel zu verwenden:

  • Quads funktionieren mit jeder Rendering-Methode, einschließlich Forward Mobile und Kompatibilität.

  • Quads benötigen keine zeitliche Reprojektion, um glatt auszusehen, was sie für sich schnell bewegende dynamische Effekte wie Laser geeignet macht. Sie können auch kleine Details darstellen, die volumetrischer Nebel nicht effizient darstellen kann.

  • Quads haben im Allgemeinen geringere Performance-Kosten als volumetrischer Nebel.

Dieser Ansatz hat allerdings auch einige Nachteile:

  • Der Nebeleffekt hat einen weniger realistischen Abfall, insbesondere wenn die Kamera in den Nebel eintaucht.

  • Transparenz-Sortierprobleme können auftreten, wenn sich Sprites überlappen.

  • Die Performance ist nicht unbedingt besser als volumetrischer Nebel, wenn sich viele Sprites in der Nähe der Kamera befinden.

So erstellen Sie ein QuadMesh-basiertes Nebel-Sprite:

  1. Erstellen Sie einen MeshInstance3D-Node mit einer QuadMesh-Ressource in der Mesh-Property. Legen Sie die Größe wie gewünscht fest.

  2. Erstellen Sie ein neues StandardMaterial3D in der Property Material des Meshes.

  3. Setzen Sie im StandardMaterial3D Shading> Shading-Modus auf kein Shading, Billboard > Modus auf Aktiviert, aktivieren Sie Nah-Fading und setzen Sie Fern-Fading auf Pixel Alpha.

  4. Setzen Sie die Albedo > Textur auf die untenstehende Textur (Rechtsklick und Speichern unter...):

    ../../_images/volumetric_fog_quad_mesh_texture.webp
  5. Nachdem Sie die Albedo-Textur festgelegt haben, gehen Sie zum Import-Dock, wählen Sie die Textur aus und ändern Sie den Kompressionsmodus auf Verlustfrei, um die Qualität zu verbessern.

Die Farbe des Nebels wird über die Property Albedo > Farbe eingestellt, seine Dichte über den Alphakanal der Farbe. Um optimale Ergebnisse zu erzielen, müssen Sie Nah-Fading > Distanz und Fern-Fading> Max Distanz je nach Größe Ihres QuadMesh anpassen.

Optional kann das Billboarding deaktiviert werden, wenn Sie das Quad so platzieren, dass alle seine Ecken in fester Geometrie sind. Dies kann nützlich sein, um große Flächen zu vernebeln, in die von der Kamera nicht durchdrungen werden können, wie z. B. bodenlose Gruben.