Up to date

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

Verwendung der Voxel-Global Illumination

VoxelGI ist eine Form der globalen Beleuchtung in Echtzeit, die für kleine/mittlere 3D-Szenen gedacht ist. VoxelGI ist ziemlich anspruchsvoll für die GPU, so dass es am besten verwendet wird, wenn es auf dedizierte Grafikkarten ausgerichtet ist.

Wichtig

VoxelGI wird nur unterstützt, wenn das Forward Plus Rendering-Backend verwendet wird, nicht das Forward Mobile oder Kompatibilität-Backend.

Siehe auch

Sie sind nicht sicher, ob VoxelGI für Ihre Bedürfnisse geeignet ist? Siehe Welche Global Illumination-Technik sollte ich verwenden? für einen Vergleich der in Godot 4 verfügbaren GI-Techniken.

Visueller Vergleich

VoxelGI deaktiviert.

VoxelGI deaktiviert.

VoxelGI aktiviert.

VoxelGI aktiviert.

VoxelGI einrichten

  1. Vergewissern Sie sich, dass Ihre statische Level-Geometrie mit der Option Statisch oder Statische Lightmaps im Importdock importiert wurde. Stellen Sie bei manuell hinzugefügten MeshInstance3D-Nodes sicher, dass die Property Global Illumination > Modus im Inspektor auf Statisch eingestellt ist.

  2. Erstellen Sie einen VoxelGI-Node im Szenenbaum-Dock.

  3. Bewegen Sie den VoxelGI-Node in die Mitte des Bereichs, den er abdecken soll, indem Sie das Manipulationsgizmo im 3D-Viewport ziehen. Passen Sie dann die Ausdehnung des VoxelGI an, indem Sie die roten Punkte im 3D-Ansichtsfenster ziehen (oder geben Sie Werte im Inspektor ein). Stellen Sie sicher, dass die Ausdehnung des VoxelGI nicht unnötig groß ist, da sonst die Qualität leidet.

  4. Wählen Sie den VoxelGI-Node aus und klicken Sie auf Backen oben im 3D-Editor Ansichtsfenster. Dieser Vorgang dauert mindestens ein paar Sekunden (abhängig von der Anzahl der VoxelGI-Unterteilungen und der Komplexität der Szene).

Wenn für mindestens ein Mesh innerhalb der Ausmaße des VoxelGI der globale Beleuchtungsmodus auf Statisch eingestellt ist, sollte in der Szene eine indirekte Beleuchtung erscheinen.

Bemerkung

Um zu vermeiden, dass textbasierte Szenendateien mit großen Mengen an Binärdaten aufgebläht werden, stellen Sie sicher, dass die VoxelGIData-Ressource immer in einer externen Binärdatei gespeichert wird. Diese Datei muss mit der Endung .res (binäre Ressource) anstelle von .tres (textbasierte Ressource) gespeichert werden. Durch die Verwendung einer externen binären Ressource für VoxelGIData wird Ihre textbasierte Szene klein gehalten und gleichzeitig sichergestellt, dass sie schnell geladen und gespeichert wird.

VoxelGI-Node-Propertys

Die folgenden Propertys können vor dem Baking im VoxelGI Node Inspector angepasst werden:

  • Unterteilung: Höhere Werte führen zu einer präziseren indirekten Beleuchtung, allerdings um den Preis einer geringeren Performance, längerer Backzeiten und eines höheren Speicherbedarfs.

  • Ausmaße: Stellt die Größe der Box dar, in der die indirekte Beleuchtung gebacken werden soll. Extents sind um den Ursprung des VoxelGI-Nodes zentriert.

Die folgenden Propertys können in der VoxelGIData-Ressource angepasst werden, die in einem VoxelGI-Node enthalten ist, nachdem dieser gebacken wurde:

  • Dynamischer Bereich: Die maximale Helligkeit, die bei indirekter Beleuchtung dargestellt werden kann. Höhere Werte ermöglichen es, helleres indirektes Licht darzustellen, allerdings auf Kosten einer geringeren Präzision (was zu sichtbarem Banding führen kann). Im Zweifelsfall sollten Sie diesen Wert unverändert lassen.

  • Energie: Die Gesamtenergie der indirekten Beleuchtung. Dies wirkt sich auch auf die Energie der direkten Beleuchtung aus, die von Meshes mit emittierenden Materialien ausgestrahlt wird.

  • Bias: Optionaler Bias bei der Suche im Voxelpuffer zur Laufzeit. Dies hilft, Artefakte der Selbst-Occlusion zu vermeiden.

  • Normalen-Bias: Ähnlich wie Bias, jedoch wird die Suche im Voxelpuffer um die Oberflächennormale verschoben. Dies hilft auch, Selbstreflexionsartefakte zu vermeiden. Höhere Werte reduzieren Selbstreflexionen, die in nicht rauen Materialien sichtbar sind, auf Kosten von mehr sichtbarem Lichtleck-Effekten und flacher aussehender indirekter Beleuchtung. Um das Ausblenden von Selbstreflexionen der Beleuchtungsqualität vorzuziehen, setzen Sie Bias auf 0.0 und Normalen-Bias auf einen Wert zwischen 1.0 und 2.0.

  • Verbreitung: Der Energiefaktor, der für abgeprallte indirekte Beleuchtung verwendet wird. Höhere Werte führen zu einer helleren, diffuseren Beleuchtung (die am Ende zu flach aussehen kann). Wenn Zwei Abprälle verwenden aktiviert ist, sollten Sie Verbreitung verringern, um die insgesamt hellere indirekte Beleuchtung auszugleichen.

  • Zwei Abprälle verwenden: Wenn diese Option aktiviert ist, wird die Beleuchtung zweimal statt nur einmal abgeprallt. Dies führt zu einer realistischeren indirekten Beleuchtung und macht indirekte Beleuchtung auch in Reflexionen sichtbar. Die Aktivierung dieser Funktion hat im Allgemeinen keine nennenswerten Auswirkungen auf die Performance.

  • Innenbereich: Wenn diese Option aktiviert ist, wird die Himmelsbeleuchtung der Umgebung von VoxelGI nicht berücksichtigt. Dies sollte in Innenraumszenen aktiviert werden, um zu vermeiden, dass Licht aus der Umgebung herausleckt.

VoxelGI-Interaktion mit Lichtern und Objekten

Um eine korrekte Darstellung bei der Verwendung von VoxelGI zu gewährleisten, müssen Sie die Global-Illumination-Propertys Ihrer Meshes und Lichter je nach ihrem Zweck in der Szene (statisch oder dynamisch) konfigurieren.

Es sind 3 Global Illumination-Modi für Meshes verfügbar:

  • Deaktiviert: Das Mesh wird beim VoxelGI-Backen nicht berücksichtigt. Das Mesh wird indirekte Beleuchtung von der Szene empfangen, aber es wird keine indirekte Beleuchtung zur Szene beitragen.

  • Statisch (Default): Das Mesh wird beim VoxelGI-Backen berücksichtigt. Das Mesh erhält und trägt indirekte Beleuchtung zur Szene bei. Wenn das Mesh nach dem Backen in irgendeiner Weise verändert wird, muss der VoxelGI Node erneut gebacken werden. Andernfalls wird die indirekte Beleuchtung falsch aussehen.

  • Dynamisch: Das Mesh wird beim VoxelGI-Backen nicht berücksichtigt, aber es erhält und trägt in Echtzeit zur indirekten Beleuchtung der Szene bei. Diese Option ist im Vergleich zu Statisch viel langsamer. Verwenden Sie den Global Illumination-Modus Dynamisch nur bei großen Meshes, die sich während des Spiels stark verändern.

Zusätzlich gibt es 3 Back-Modi für Lichter (DirectionalLight3D, OmniLight3D und SpotLight3D):

  • Deaktiviert: Das Licht wird beim VoxelGI-Backen nicht berücksichtigt. Das Licht trägt nicht zur indirekten Beleuchtung der Szene bei.

  • Statisch: Das Licht wird beim VoxelGI-Backen berücksichtigt. Das Licht trägt zur indirekten Beleuchtung der Szene bei. Wenn das Licht nach dem Backen in irgendeiner Weise verändert wird, muss der VoxelGI-Node erneut gebacken werden, sonst sieht die indirekte Beleuchtung nicht korrekt aus. Im Zweifelsfall sollten Sie diesen Modus für die Level-Beleuchtung verwenden.

  • Dynamisch (Default): Das Licht wird beim VoxelGI-Backen nicht berücksichtigt, aber es trägt trotzdem in Echtzeit zur indirekten Beleuchtung der Szene bei. Diese Option ist im Vergleich zu Statisch langsamer. Verwenden Sie den Global Illumination-Modus Dynamisch nur für Lichter, die sich während des Spiels stark verändern.

Bemerkung

Die Menge an indirekter Energie, die von einem Licht ausgestrahlt wird, hängt von den Propertys Farbe, Energie und indirekte Energie ab. Um ein bestimmtes Licht dazu zu bringen, mehr oder weniger indirekte Energie zu emittieren, ohne die Menge an direktem Licht, das von dem Licht emittiert wird, zu beeinflussen, passen Sie die Property Indirekte Energie im Light3D Inspektor an.

Siehe auch

Siehe Welchen Global Illumination-Modus sollte ich für Meshes und Lichter verwenden? für allgemeine Anwendungsempfehlungen.

Einstellen der Performance und Qualität von VoxelGI

Da VoxelGI relativ anspruchsvoll ist, erzielt es die beste Performance auf Systemen mit aktuellen dedizierten Grafikprozessoren. Bei älteren dedizierten Grafikprozessoren und integrierten Grafikprozessoren ist eine Anpassung der Einstellungen erforderlich, um eine angemessene Performance zu erzielen.

Im Abschnitt Rendern > Global Illumination der Projekteinstellungen kann die VoxelGI-Qualität ebenfalls auf zwei Arten angepasst werden:

  • Voxel GI > Qualität: Wenn die Einstellung Niedrig statt Hoch gewählt wird, verwendet das Voxel-Kegel-Tracing nur 4 statt 6 Taps. Dies beschleunigt das Rendern auf Kosten einer weniger ausgeprägten Ambient Occlusion.

  • GI > Halbe Auflösung verwenden: Wenn diese Option aktiviert ist, werden die GI-Puffer von VoxelGI und SDFGI mit halbierter Auflösung gerendert. Beim Rendern in 3840×2160 wird der GI-Puffer zum Beispiel mit einer Auflösung von 1920×1080 berechnet. Die Aktivierung dieser Option spart eine Menge GPU-Zeit, kann aber zu sichtbarem Aliasing um feine Details führen.

Beachten Sie, dass der Schalter Erweitert im Projekteinstellungsdialog aktiviert sein muss, damit die obigen Einstellungen sichtbar sind.

Außerdem kann VoxelGI vollständig deaktiviert werden, indem der VoxelGI-Node ausgeblendet wird. Dies kann zu Vergleichszwecken oder zur Verbesserung der Performance auf Low-End-Systemen genutzt werden.

Reduzierung von VoxelGI-Lichtlecks und Artefakten

Nach dem Backen von VoxelGI werden Sie vielleicht feststellen, dass an einigen Stellen Ihrer Levelgeometrie indirektes Licht herausleckt. Dies kann auf mehrere Arten behoben werden:

  • Versuchen Sie, den VoxelGI-Node zu verschieben oder zu drehen, um Lichtlecks und Artefakte zu vermeiden, und backen Sie ihn dann erneut.

  • Um Lichtlecks im Allgemeinen zu bekämpfen, stellen Sie sicher, dass Ihre Levelgeometrie vollständig abgedichtet ist. Dies geschieht am besten in der 3D-Modellierungssoftware, die für die Gestaltung des Levels verwendet wird, aber auch primitive MeshInstance3D-Nodes, deren globaler Beleuchtungsmodus auf Statisch eingestellt ist, können verwendet werden.

  • Um Lichtlecks bei feiner Geometrie zu bekämpfen, empfiehlt es sich, die betreffende Geometrie dicker zu machen. Wenn dies nicht möglich ist, dann fügen Sie einen primitiven MeshInstance3D-Node hinzu, dessen Global Illumination-Modus auf Statisch gesetzt ist. Backen Sie VoxelGI erneut und blenden Sie dann den primitiven MeshInstance3D-Node aus (er wird weiterhin von VoxelGI berücksichtigt). Um optimale Ergebnisse zu erzielen, sollte das MeshInstance3D ein Material haben, dessen Farbe der ursprünglichen feinen Geometrie entspricht.

  • Um Artefakte zu beseitigen, die auf reflektierenden Oberflächen auftreten können, versuchen Sie, Bias und/oder Normalen-Bias in der VoxelGIData-Ressource wie oben beschrieben zu erhöhen. Erhöhen Sie diese Werte nicht zu stark, da sonst die Lichtlecks noch ausgeprägter werden.

If you notice VoxelGI nodes popping in and out of existence as the camera moves, this is most likely because the engine is rendering too many VoxelGI instances at once. Godot is limited to rendering 8 VoxelGI nodes at once, which means up to 8 instances can be in the camera view before some of them will start flickering.

Additionally, for performance reasons, Godot can only blend between 2 VoxelGI nodes at a given pixel on the screen. If you have more than 2 VoxelGI nodes overlapping, global illumination may appear to flicker as the camera moves or rotates.