Up to date

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

Signed Distance Field Global Illumination (SDFGI)

Signed Distance Field Global Illumination (SDFGI) ist eine neue Technik, die in Godot 4.0 verfügbar ist. Sie bietet eine Global Illumination in Semi-Echtzeit, die auf jede Weltgröße skalierbar ist und mit prozedural generierten Ebenen funktioniert.

SDFGI unterstützt dynamische Lichter, aber nicht dynamische Occluder oder dynamische emittierende Oberflächen. Daher bietet SDFGI eine bessere Echtzeitfähigkeit als gebackene Lightmaps, aber eine schlechtere Echtzeitfähigkeit als VoxelGI.

In Bezug auf die Performance ist SDFGI eine der anspruchsvollsten Global Illumination-Methoden in Godot. Wie bei VoxelGI gibt es noch viele Einstellungen, um die Performance-Anforderungen auf Kosten der Qualität zu optimieren.

Wichtig

SDFGI 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 SDFGI für Ihre Bedürfnisse geeignet ist? Unter Welche Global Illumination-Technik sollte ich verwenden? finden Sie einen Vergleich der in Godot 4 verfügbaren GI-Techniken.

Visueller Vergleich

SDFGI deaktiviert.

SDFGI deaktiviert.

SDFGI aktiviert.

SDFGI aktiviert.

SDFGI einrichten

In Godot ist SDFGI die Global Illumination-Technik mit den wenigsten erforderlichen Schritten um es zu aktivieren:

  1. Vergewissern Sie sich, dass die Property Global Illumination > Mode Ihrer MeshInstance-Nodes im Inspektor auf Statisch gesetzt ist.

  • Für importierte 3D-Szenen kann der Back-Modus im Import-Dock konfiguriert werden, nachdem die 3D-Szenendatei im Dateisystem-Dock ausgewählt wurde.

  1. Fügen Sie einen WorldEnvironment-Node hinzu und erstellen Sie eine Environment-Ressource für ihn.

  2. Bearbeiten Sie die Ressource Environment, scrollen Sie zum Abschnitt SDFGI und klappen Sie ihn aus.

  3. Aktivieren Sie SDFGI > Aktiviert. SDFGI folgt der Kamera automatisch, wenn sie sich bewegt, so dass Sie keine Ausmaße konfigurieren müssen (im Gegensatz zu VoxelGI).

Environment-SDFGI-Propertys

In der Ressource Environment stehen mehrere Propertys zur Verfügung, um das Aussehen und die Qualität von SDFGI anzupassen:

  • Occlusion verwenden: Wenn diese Property aktiviert ist, wirft SDFGI zusätzliche Strahlen, um Lichtlecks zu finden und zu reduzieren. Dies geht zu Lasten der Performance, daher sollten Sie diese Property nur aktivieren, wenn Sie sie tatsächlich benötigen.

  • Himmelslicht lesen: Wenn aktiviert, wird die Umgebungsbeleuchtung in der Global Illumination dargestellt. Diese Funktion sollte in Außenszenen aktiviert und in Innenszenen deaktiviert sein.

  • Abprall-Feedback: Standardmäßig wird die indirekte Beleuchtung bei Verwendung von SDFGI nur einmal abgeprallt. Wenn Sie diesen Wert auf mehr als 0.0 setzen, wird SDFGI mehr als einmal abprallen, was eine realistischere indirekte Beleuchtung zu einem geringen Performance-Aufwand ermöglicht. Sinnvolle Werte liegen normalerweise zwischen 0.3 und 1.0, abhängig von der Szene. Beachten Sie, dass in manchen Szenen Werte über 0.5 zu unendlichen Rückkopplungsschleifen führen können, wodurch die Szene innerhalb weniger Sekunden extrem hell wird. Wenn Ihre indirekte Beleuchtung "fleckig" aussieht, sollten Sie diesen Wert über 0.0 erhöhen, um eine gleichmäßigere Beleuchtung zu erhalten. Wenn Ihre Beleuchtung dadurch zu hell erscheint, verringern Sie Energie, um dies auszugleichen.

  • Kaskaden: Höhere Werte führen zu detaillierteren GI-Informationen (und/oder größerer maximaler Entfernung), sind aber deutlich teurer für CPU und GPU. Die Performance-Kosten für mehr Kaskaden steigen vor allem, wenn sich die Kamera schnell bewegt, daher sollten Sie in Erwägung ziehen, diesen Wert auf 4 oder niedriger zu setzen, wenn sich Ihre Kamera schnell bewegt.

  • Min. Zellengröße: Die minimale SDFGI-Zellengröße, die für die nächstgelegene, detaillierteste Kaskade verwendet wird. Niedrigere Werte führen zu einer genaueren indirekten Beleuchtung und Reflexion auf Kosten einer geringeren Performance. Die Anpassung dieser Einstellung wirkt sich auch automatisch auf Kaskade 0 Abstand und Max Abstand aus.

  • Kaskade 0 Abstand: Der Abstand, bei dem die nächstgelegene, detaillierteste Kaskade endet. Größere Werte machen den Übergang der nächstgelegenen Kaskade weniger auffällig, allerdings auf Kosten eines geringeren Detailgrads in der nächstgelegenen Kaskade. Die Anpassung dieser Einstellung wirkt sich auch automatisch auf Min Zellengröße und Max Distanz aus.

  • Max Distanz: Legt fest, wie weit entfernt das Signed Distance Field berechnet wird (für die am wenigsten detaillierte Kaskade). Über diese Entfernung hinaus hat SDFGI keine Wirkung. Dieser Wert sollte immer unter dem Far-Wert der Kamera liegen, da die Berechnung von SDFGI über die Sichtentfernung hinaus keinen Nutzen hat. Die Anpassung dieser Einstellung wirkt sich auch automatisch auf Min Zellengröße und Kaskade 0 Distanz aus.

  • Y-Skalierung: Legt fest, wie weit die SDFGI-Probes vertikal verteilt werden. Standardmäßig ist die vertikale Verteilung die gleiche wie die horizontale. Da die meisten Spielszenen jedoch nicht sehr vertikal sind, kann die Einstellung der Y-Skalierung auf 75% oder sogar 50% eine bessere Qualität liefern und Lichtlecks reduzieren, ohne die Performance zu beeinträchtigen.

  • Energie: Der Helligkeitsmultiplikator für die indirekte Beleuchtung von SDFGI.

  • Normalen-Bias: Der Normalen-Bias, der für SDFGI's Probe-Strahlen-Abprälle verwendet wird. Im Gegensatz zu Probe-Bias wird hier der Wert nur im Verhältnis zu den Normalen des Meshes erhöht. Dies macht die Anpassung der Verzerrung differenzierter und verhindert, dass die Verzerrung ohne Grund zu stark erhöht wird. Erhöhen Sie diesen Wert, wenn Sie Striping-Artefakte bei indirekter Beleuchtung oder Reflektionen feststellen.

  • Probe-Bias: Der Bias, der für SDFGI's Probe Strahlen-Abprälle verwendet wird. Erhöhen Sie diesen Wert, wenn Sie Striping-Artefakte bei indirekter Beleuchtung oder Reflektionen feststellen.

SDFGI Interaktion mit Lichtern und Objekten

Die Menge an indirekter Energie, die von einem Licht ausgestrahlt wird, wird durch die Propertys Farbe, Energie und indirekte Energie bestimmt. 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.

Um bei der Verwendung von SDFGI eine korrekte Darstellung zu gewährleisten, müssen Sie die Property für die Global Illumination Ihrer Meshes und Lichter entsprechend ihrem Zweck in der Szene (statisch oder dynamisch) konfigurieren.

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

  • Deaktiviert: Das Mesh wird bei der SDFGI-Generierung nicht berücksichtigt. Das Mesh erhält zwar indirekte Beleuchtung von der Szene, trägt aber nicht zur indirekten Beleuchtung der Szene bei.

  • Statisch (Default): Das Mesh wird bei der SDFGI-Generierung berücksichtigt. Das Mesh empfängt und trägt zur indirekten Beleuchtung der Szene bei. Wenn das Mesh in irgendeiner Weise verändert wird, nachdem SDFGI generiert wurde, muss sich die Kamera vom Objekt entfernen und dann wieder in die Nähe des Objekts bewegen, damit SDFGI neu generiert werden kann. Alternativ kann SDFGI auch aus- und wieder eingeschaltet werden. Wenn beides nicht gemacht wird, sieht die indirekte Beleuchtung nicht korrekt aus.

  • Dynamisch (nicht unterstützt mit SDFGI): Das Mesh wird bei der SDFGI-Generierung nicht berücksichtigt. Das Mesh wird von der Szene indirekt beleuchtet, aber es trägt nicht zur indirekten Beleuchtung der Szene bei. Dies ist identisch mit dem Back-Modus **Disabled* bei Verwendung von SDFGI.*

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

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

  • Statisch: Das Licht wird beim SDFGI-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, sieht die indirekte Beleuchtung falsch aus, bis sich die Kamera vom Licht weg und wieder zurück bewegt (was dazu führt, dass SDFGI erneut gebacken wird). Im Zweifelsfall sollten Sie diesen Modus für Level-Beleuchtung verwenden.

  • Dynamisch (Standard): Das Licht wird beim SDFGI-Backen nicht berücksichtigt, trägt aber dennoch in Echtzeit zur indirekten Beleuchtung der Szene bei. Diese Option ist im Vergleich zu Statisch langsamer. Verwenden Sie den Modus Dynamisch für Global Illumination nur bei Lichtern, 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.

Anpassung der Performance und Qualität von SDFGI

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

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

  • Sdfgi > Probe-Strahlenanzahl: Höhere Werte führen zu einer besseren Qualität, allerdings auf Kosten einer höheren GPU-Auslastung. Wenn dieser Wert zu niedrig eingestellt ist, kann dies dazu führen, dass Oberflächen sichtbare "Flecken" mit indirekter Beleuchtung aufweisen, da die Anzahl der geworfenen Strahlen sehr niedrig ist.

  • Sdfgi > Frames zum Konvergieren: Höhere Werte führen zu einer besseren Qualität, aber GI braucht mehr Zeit, um vollständig zu konvergieren. Der Effekt dieser Einstellung macht sich besonders beim ersten Laden einer Szene bemerkbar, oder wenn sich Lichter mit einem anderen Back-Modus als Deaktiviert schnell bewegen. Wenn dieser Wert zu niedrig eingestellt ist, kann dies dazu führen, dass Oberflächen sichtbare "Flecken" mit indirekter Beleuchtung aufweisen, da die Anzahl der geworfenen Strahlen sehr gering ist. Wenn die Beleuchtung Ihrer Szene keine sich schnell bewegenden Lichter enthält, die zum GI beitragen, sollten Sie diesen Wert auf 30 setzen, um die Qualität zu verbessern, ohne die Performance zu beeinträchtigen.

  • Sdfgi > Frames zum Aktualisieren der Lichter: Niedrigere Werte führen dazu, dass sich bewegende Lichter schneller reflektiert werden, allerdings auf Kosten einer höheren GPU-Auslastung. Wenn die Beleuchtung Ihrer Szene keine sich schnell bewegenden Lichter enthält, die zum GI beitragen, sollten Sie diesen Wert auf 16 setzen, um die Performance zu verbessern.

  • Gi > Halbe Auflösung verwenden: Wenn diese Option aktiviert ist, werden die GI-Puffer von SDFGI und VoxelGI 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.

Die Performance des SDFGI-Renderings hängt auch von der Anzahl der Kaskaden und der in der Environment-Ressource gewählten Zellengröße ab (siehe oben).

Hinweise zu SDFGI

SDFGI hat aufgrund seiner Kaskadennatur einige Nachteile. Wenn sich die Kamera bewegt, können Kaskadenverschiebungen bei indirekter Beleuchtung sichtbar werden. Dies kann durch Anpassung der Kaskadengröße, aber auch durch Hinzufügen von Nebel (der entfernte Kaskadenverschiebungen weniger auffällig macht) gemildert werden.

Außerdem leidet die Performance, wenn sich die Kamera zu schnell bewegt. Dies kann auf zwei Arten behoben werden:

  • Sicherstellen, dass sich die Kamera in einer bestimmten Situation nicht zu schnell bewegt.

  • Vorübergehendes Deaktivieren von SDFGI in der Environment-Ressource, wenn die Kamera mit hoher Geschwindigkeit bewegt werden muss, und anschließendes Aktivieren von SDFGI, sobald sich die Geschwindigkeit der Kamera verlangsamt.

Wenn SDFGI aktiviert ist, dauert es auch einige Zeit, bis die Global Illumination vollständig konvergiert ist (standardmäßig 25 Frames). Dies kann zu einem spürbaren Übergangseffekt führen, während die GI noch konvergiert. Um dies auszublenden, können Sie einen ColorRect-Knoten verwenden, der sich über das gesamte Ansichtsfenster erstreckt, und ihn beim Wechseln von Szenen mit einem AnimationPlayer-Node ausblenden.

Das Signed Distance Field wird nur aktualisiert, wenn sich die Kamera in eine Kaskade hinein und aus ihr heraus bewegt. Das heißt, wenn die Geometrie in der Entfernung geändert wird, ist das Erscheinungsbild der Global Illumination korrekt, wenn die Kamera näher kommt. Wenn jedoch ein nahe gelegenes Objekt mit einem auf Statisch oder Dynamisch eingestellten Back-Modus bewegt wird (z. B. eine Tür), erscheint die Global Illumination falsch, bis sich die Kamera von dem Objekt entfernt.

Die scharfen Reflexionen von SDFGI sind nur bei undurchsichtigen Materialien sichtbar. Bei transparenten Materialien werden nur grobe Reflexionen verwendet, selbst wenn die Rauheit des Materials unter 0,2 liegt.