Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Einführung in Global Illumination
Was ist Global Illumination?
Global Illumination (Globale Beleuchtung) ist ein Sammelbegriff für ein Beleuchtungssystem, das sowohl direktes Licht (Licht, das direkt von einer Lichtquelle kommt) als auch indirektes Licht (Licht, das von einer Oberfläche abprallt) verwendet. In einer 3D-Render-Engine ist die globale Beleuchtung eines der wichtigsten Elemente, um eine realistische Beleuchtung zu erreichen. Mit der globalen Beleuchtung soll das Verhalten des Lichts in der Realität nachgeahmt werden, z. B. Licht, das von Oberflächen zurückgeworfen wird, und Licht, das von emittierenden Materialien ausgeht.
Im folgenden Beispiel wird die gesamte Szene von einem emittierenden Material beleuchtet (das weiße Quadrat oben). Die weiße Wand und die Decke auf der Rückseite sind in der Nähe der Wände rot und grün eingefärbt, da das an den farbigen Wänden auftreffende Licht auf den Rest der Szene zurückgeworfen wird.

Global Illumination setzt sich aus mehreren Schlüsselkonzepten zusammen:
Indirekte diffuse Beleuchtung
Dies ist die Beleuchtung, die sich je nach Kamerawinkel nicht verändert. Es gibt zwei Hauptquellen für indirekte diffuse Beleuchtung:
Licht, das von Oberflächen abprallt. Dieses zurückgeworfene Licht wird mit der Albedofarbe des Materials multipliziert. Das abgeprallte Licht kann dann von anderen Oberflächen reflektiert werden, wobei die Wirkung aufgrund der Lichtabschwächung abnimmt. Im wirklichen Leben prallt das Licht unendlich oft ab. Aus Performance-Gründen kann dies jedoch nicht in einer Spiel-Engine simuliert werden. Stattdessen ist die Anzahl der Licht-Abprällen in der Regel auf 1 oder 2 begrenzt (oder auf bis zu 16 beim Backen von Lightmaps). Eine größere Anzahl von Abprällen führt zu einem realistischeren Lichtabfall in schattierten Bereichen, allerdings auf Kosten einer geringeren Performance oder längerer Bake-Zeiten.
Emissive Materialien können auch Licht ausstrahlen, das an Oberflächen abprallt. Dies stellt eine Form der Flächenbeleuchtung dar. Anstatt einen unendlich kleinen Punkt mit einem OmniLight3D oder SpotLight3D-Node zu beleuchten, wird ein Bereich einer bestimmten Größe mit seiner eigenen Oberfläche beleuchtet.
Direkte diffuse Beleuchtung wird bereits von den Licht-Nodes selbst behandelt, was bedeutet, dass Global Illumination-Algorithmen nur versuchen, indirekte Beleuchtung darzustellen.
Verschiedene Global Illumination-Techniken bieten unterschiedliche Genauigkeitsgrade bei der Darstellung von indirekter diffuser Beleuchtung. In der Vergleichstabelle am Ende dieser Seite finden Sie weitere Informationen.
Um eine genauere Umgebungs-Occlusion für kleine Objekte zu ermöglichen, kann die Screen-Space Ambient-Occlusion (SSAO) in den Environment-Einstellungen aktiviert werden. SSAO ist mit erheblichen Performance-Kosten verbunden, daher sollten Sie es deaktivieren, wenn Sie Low-End-Hardware verwenden.
Bemerkung
Indirektes diffuses Licht kann in Szenen ohne detaillierte Texturen zu Color Banding führen. Dies führt dazu, dass Lichtverläufe nicht gleichmäßig sind, sondern stattdessen einen sichtbaren "Treppeneffekt" haben. Siehe den Abschnitt Color-Banding in der Dokumentation der 3D-Rendering-Einschränkungen für Möglichkeiten, um diesen Effekt zu reduzieren.
Specular Lighting
Specular Lighting wird auch als Reflexionen bezeichnet. Dabei handelt es sich um die Beleuchtung, deren Intensität sich je nach Kamerawinkel ändert. Dieses Specular Lighting kann direkt oder indirekt sein.
Die meisten Global Illumination-Techniken bieten eine Möglichkeit zum Rendern von Specular Lighting. Der Genauigkeitsgrad, mit dem das Specular Lighting gerendert wird, ist jedoch von Technik zu Technik sehr unterschiedlich. In der Vergleichstabelle am Ende dieser Seite finden Sie weitere Informationen.
Um genauere Reflexionen für kleine Objekte zu erhalten, kann die Screen-Space-Reflexion (SSR) in den Environment-Einstellungen aktiviert werden. SSR ist mit erheblichen Performance-Kosten verbunden (sogar noch mehr als SSAO), daher sollten Sie es deaktivieren, wenn Sie Low-End-Hardware verwenden.
Welche Global Illumination-Technik sollte ich verwenden?
Bei der Auswahl einer Global Illumination (GI)-Technik sind mehrere Kriterien zu beachten:
Performance. Echtzeit-GI-Techniken sind in der Regel teurer als Semi-Echtzeit- oder Back-Techniken. Beachten Sie, dass der Großteil der Kosten beim GI-Rendering auf der GPU und nicht auf der CPU anfällt.
Grafikdarstellung. Abgesehen davon, dass die Performance nicht die beste ist, bieten Echtzeit-GI-Techniken im Allgemeinen auch nicht die beste visuelle Ausgabe. Dies ist vor allem in einer überwiegend statischen Szene der Fall, in der die dynamische Natur der Echtzeit-GI nicht leicht zu erkennen ist. Wenn die Maximierung der visuellen Qualität Ihr Ziel ist, sehen gebackene Techniken oft besser aus und führen zu weniger Lichtlecks.
Echtzeitfähigkeit Einige GI-Techniken sind vollständig echtzeitfähig, während andere nur semi-echtzeitfähig oder überhaupt nicht echtzeitfähig sind. Semi-Echtzeit-Techniken haben Einschränkungen, die bei vollständig Echtzeit-Techniken nicht gegeben sind. So können dynamische Objekte beispielsweise keine emittierende Beleuchtung zur Szene beitragen. Nicht-Echtzeit-Techniken unterstützen keine Form von dynamischem GI, so dass es bei Bedarf mit anderen Techniken vorgetäuscht werden muss (z.B. durch Platzierung von Positionslichtern in der Nähe von emittierenden Oberflächen). Die Echtzeitfähigkeit wirkt sich auch auf die Realisierbarkeit der GI-Technik in prozedural generierten Levels aus.
Aufwand für den Benutzer. Einige GI-Techniken sind vollautomatisch, während andere eine sorgfältige Planung und manuelle Arbeit auf Seiten des Benutzers erfordern. Je nach Ihrem Zeitbudget sind einige GI-Techniken anderen vorzuziehen.
Hier finden Sie einen Vergleich aller in Godot verfügbaren Global Illumination-Techniken:
Performance
In der Reihenfolge der Performance vom Schnellsten zum Langsamsten:
ReflectionProbe:
ReflectionProbes with their update mode set to Always are much more expensive than probes with their update mode set to Once (the default). Suited for integrated graphics when using the Once update mode. Available in all renderers.
LightmapGI:
Lights can be baked with indirect lighting only, or fully baked on a per-light basis to further improve performance. Hybrid setups can be used (such as having a real-time directional light and fully baked positional lights). Directional information can be enabled before baking to improve visuals at a small performance cost (and at the cost of larger file sizes). Suited for integrated graphics. Available in all renderers. However, baking lightmaps requires hardware with RenderingDevice support.
VoxelGI:
The bake's number of subdivisions can be adjusted to balance between performance and quality. The VoxelGI rendering quality can be adjusted in the Project Settings. The rendering can optionally be performed at half resolution (and then linearly scaled) to improve performance significantly. Not available when using the Mobile or Compatibility renderers.
Screen-Space indirekte Beleuchtung (SSIL):
The SSIL quality and number of blur passes can be adjusted in the Project Settings. By default, SSIL rendering is performed at half resolution (and then linearly scaled) to ensure a reasonable performance level. Not available when using the Mobile or Compatibility renderers.
SDFGI:
The number of cascades can be adjusted to balance performance and quality. The number of rays thrown per frame can be adjusted in the Project Settings. The rendering can optionally be performed at half resolution (and then linearly scaled) to improve performance significantly. Not available when using the Mobile or Compatibility renderers.
Grafikqualität
Zum Vergleich sehen Sie hier eine 3D-Szene ohne Global Illumination-Optionen:

Eine 3D-Szene ohne jegliche Form von Global Illumination (nur konstante Umgebungsbeleuchtung). Die Box und die Kugel in der Nähe der Kamera sind beide dynamische Objekte.
Im Folgenden werden die verschiedenen Global Illumination-Techniken von Godot verglichen:
VoxelGI:
Gute Reflexionen und indirekte Beleuchtung, aber passen Sie auf Lecks auf.
Da VoxelGI auf Voxeln basiert, kommt es zu Lichtlecks, wenn Wände und Böden zu dünn sind. Es wird empfohlen, sicherzustellen, dass alle festen Oberflächen mindestens so dick wie ein Voxel sind.
Auf schrägen Oberflächen können auch Streifenartefakte sichtbar sein. In diesem Fall kann die Anpassung der Bias-Eigenschaften oder das Drehen des VoxelGI-Nodes helfen, dies zu verhindern.
VoxelGI in Aktion.
SDFGI:
Gute Reflexionen und indirekte Beleuchtung, aber passen Sie auf Lecks und sichtbaren Kaskadenverschiebungen auf.
Der GI-Level of Detail variiert je nach dem Abstand zwischen Kamera und Oberfläche.
Lecks können erheblich reduziert werden, indem die Property Occlusion verwenden aktiviert wird. Dies hat zwar einen geringen Performance-Aufwand zur Folge, führt aber im Vergleich zu VoxelGI oft zu weniger Lecks.
Kaskadenverschiebungen können sichtbar sein, wenn sich die Kamera schnell bewegt. Dies kann durch Anpassen der Kaskadengrößen oder Verwendung von Nebel verringert werden.
SDFGI in Aktion.
Screen-Space indirekte Beleuchtung (SSIL):
Gute sekundäre Quelle für indirekte Beleuchtung, aber keine Reflexionen.
SSIL ist als Ergänzung zu einer anderen GI-Technik wie VoxelGI, SDFGI oder LightmapGI gedacht. SSIL eignet sich am besten für kleinräumige Details, da es allein keine genaue indirekte Beleuchtung für große Strukturen liefern kann. SSIL kann indirekte Beleuchtung in Echtzeit in Situationen bieten, in denen andere GI-Techniken kleine Details oder dynamische Objekte nicht erfassen können. Da SSIL auf dem Bildschirm arbeitet, entstehen einige Artefakte, insbesondere wenn Objekte den Bildschirm betreten und verlassen. SSIL arbeitet mit der Farbe des letzten Frames (vor der Nachbearbeitung), was bedeutet, dass emittierende Decals und benutzerdefinierte Shader einbezogen werden (solange sie auf dem Bildschirm vorhanden sind).
SSIL in Aktion (ohne jede andere GI-Technik). Beachten Sie die emittierende Beleuchtung um den gelben Kasten.
LightmapGI:
Ausgezeichnete indirekte Beleuchtung, anständige Reflexionen (optional).
Dies ist die einzige Technik, bei der die Anzahl der Licht-Abprälle auf über 2 (bis zu 16) erhöht werden kann. Wenn die Richtungsinformationen aktiviert sind, werden Kugelflächenfunktionen (Spherical Harmonics, SH) verwendet, um unscharfe Reflexionen zu erzeugen.
LightmapGI in Aktion. Hier wird nur indirekte Beleuchtung gebacken, aber auch direktes Licht kann gebacken werden.
ReflectionProbe:
Gute Reflexionen, aber schlechte indirekte Beleuchtung.
Die indirekte Beleuchtung kann deaktiviert, auf eine konstante Farbverteilung in der Probe eingestellt oder automatisch aus der Umgebung der Probe ausgelesen (und als Cubemap angewendet) werden. Dies wirkt im Wesentlichen wie eine lokale Umgebungsbeleuchtung. Reflexionen und indirekte Beleuchtung werden mit anderen Probes in der Nähe gemischt.
ReflectionProbe in Aktion (ohne eine andere GI-Technik). Beachten Sie die reflektierende Kugel.
Echtzeitfähigkeit
VoxelGI:
Vollständig in Echtzeit.
Indirekte Beleuchtung und Reflexionen sind vollständig in Echtzeit. Dynamische Objekte können GI empfangen und mit ihren emittierenden Oberflächen dazu beitragen. Benutzerdefinierte Shader können auch ihr eigenes Licht emittieren, das exakt emittiert wird.
Durchführbar für prozedural generierte Level wenn sie im Voraus generiert werden (und nicht während des Spiels). Das Backen dauert mehrere Sekunden oder länger, kann aber sowohl im Editor als auch in einem exportierten Projekt durchgeführt werden.
SDFGI:
Semi-Echtzeit.
Kaskaden werden in Echtzeit generiert, so dass SDFGI auch für prozedural generierte Level geeignet ist (auch wenn die Strukturen während des Spiels generiert werden).
Dynamische Objekte können GI empfangen, aber nicht zu ihr beitragen. Emissive Beleuchtung wird nur aktualisiert, wenn ein Objekt in eine Kaskade eintritt, so dass es bei sich langsam bewegenden Objekten noch funktionieren kann.
Screen-Space indirekte Beleuchtung (SSIL):
Vollständig in Echtzeit.
SSIL funktioniert sowohl mit statischen als auch mit dynamischen Lichtern. Außerdem funktioniert es sowohl mit statischen als auch mit dynamischen Occludern (einschließlich emissiver Materialien).
LightmapGI:
Gebacken, und daher nicht in Echtzeit.
Both indirect lighting and SH reflections are baked and can't be changed at runtime. Real-time GI must be simulated via other means, such as real-time positional lights. Dynamic objects receive indirect lighting via light probes, which can be placed automatically or manually by the user (LightmapProbe node). Not viable for procedurally generated levels, as baking lightmaps is only possible from the editor.
ReflectionProbe:
Optional in Echtzeit.
Standardmäßig werden die Reflexionen aktualisiert, wenn die Probe bewegt wird. Sie werden so oft wie möglich aktualisiert, wenn der Aktualisierungsmodus auf Immer eingestellt ist (was teuer ist).
Indirect lighting must be configured manually by the user, but can be changed at runtime without causing an expensive computation to happen behind the scenes. This makes ReflectionProbes viable for procedurally generated levels.
Aufwand für den Benutzer
VoxelGI: Es müssen ein oder mehrere VoxelGI-Nodes erstellt und gebacken werden.
Um gute Ergebnisse zu erzielen, müssen die Ausmaße korrekt angepasst werden. Zusätzlich kann das Drehen des Nodes und erneute Backen in bestimmten Situationen helfen, Lecks oder Streifenartefakte zu bekämpfen. Die Backzeiten sind schnell - in der Regel unter 10 Sekunden für eine Szene von mittlerer Komplexität.
SDFGI: Sehr wenig.
SDFGI ist vollautomatisch; es muss nur in der Environment-Ressource aktiviert werden. Die einzige manuelle Arbeit, die erforderlich ist, besteht darin, die Eigenschaft "Back-Modus" von MeshInstances korrekt einzustellen. Es muss kein Node erstellt werden, und es ist kein Backen erforderlich.
Screen-Space indirekte Beleuchtung (SSIL): Sehr wenig.
SSIL ist vollautomatisch; es muss nur in der Environment-Ressource aktiviert werden. Es muss kein Node erstellt werden, und es ist kein Backen erforderlich.
LightmapGI: Erfordert UV2-Setup und Backen.
Statische Meshes müssen mit aktivierter UV2- und Lightmap-Generierung neu importiert werden. Auf einer dedicated GPU sind die Back-Zeiten dank des GPU-basierten Lightmap-Backens relativ schnell - in der Regel unter 1 Minute für eine Szene mittlerer Komplexität.
ReflectionProbe: Wird manuell vom Benutzer platziert.
Zusammenfassung
Wenn Sie unsicher sind, welche GI-Technik Sie anwenden sollen:
Für Desktop-Spiele ist es eine gute Idee, zunächst mit SDFGI zu beginnen, da es den geringsten Einrichtungsaufwand erfordert. Bei Bedarf können Sie später zu anderen GI-Techniken wechseln. Um die Performance auf leistungsschwachen GPUs und integrierten Grafikkarten zu verbessern, sollten Sie eine Option zur Deaktivierung von SDFGI oder VoxelGI in den Spieleinstellungen hinzufügen. SDFGI kann in der Environment-Ressource deaktiviert werden, und VoxelGI kann durch Ausblenden der VoxelGI Node(s) deaktiviert werden. Um die Grafik auf High-End-Systemen weiter zu verbessern, fügen Sie eine Option zur Aktivierung von SSIL in den Spieleinstellungen hinzu.
Für mobile Spiele sind LightmapGI und ReflectionProbes die einzigen unterstützten Optionen. Siehe auch Alternativen zu GI-Techniken.
Siehe auch
Sie können Global Illumination-Techniken in der Praxis vergleichen, indem Sie das Global Illumination-Demoprojekt verwenden.
Welchen Global Illumination-Modus sollte ich für Meshes und Lichter verwenden?
Unabhängig davon, welche Global Illumination-Technik Sie verwenden, gibt es keinen universell "besseren" Global Illumination-Modus. Dennoch gibt es hier einige Empfehlungen für Meshes:
Für statische Level-Geometrie verwenden Sie den Global Illumination-Modus Static (Default).
Verwenden Sie für kleine dynamische Geometrien und Spieler/Gegner den Global Illumination-Modus Disabled . Kleine dynamische Geometrie wird nicht in der Lage sein, eine signifikante Menge an indirekter Beleuchtung beizutragen, da die Geometrie kleiner als ein Voxel ist. Wenn Sie eine indirekte Beleuchtung für kleine dynamische Objekte benötigen, kann diese mit einem OmniLight3D oder SpotLight3D-Node simuliert werden, der dem Objekt übergeordnet ist.
Für große dynamische Level-Geometrien (z.B. ein fahrender Zug) verwenden Sie den Global Illumination-Modus Dynamisch . Beachten Sie, dass sich dies nur bei VoxelGI auswirkt, da SDFGI und LightmapGI keine Global Illumination mit dynamischen Objekten unterstützen.
Hier sind einige Empfehlungen für Licht-Backmodi:
Für statische Level-Beleuchtung verwenden Sie den Back-Modus Statisch. Der Modus Statisch eignet sich auch für dynamische Lichter, die sich während des Spiels kaum verändern, wie z.B. eine flackernde Fackel.
Bei kurzlebigen dynamischen Effekten (z.B. einer Waffe) sollten Sie den Back-Modus Deaktiviert verwenden, um die Performance zu verbessern.
Für langlebige dynamische Effekte (z.B. ein rotierendes Alarmlicht) verwenden Sie den Back-Modus Dynamic, um die Qualität zu verbessern (Default). Beachten Sie, dass dies nur bei VoxelGI und SDFGI Wirkung zeigt, da LightmapGI keine Global Illumination mit dynamischen Lichtern unterstützt.
Alternativen zu GI-Techniken
Wenn keine der oben erwähnten GI-Techniken passt, ist es immer noch möglich, GI zu simulieren, indem man zusätzliche Lichter manuell platziert. Dies erfordert mehr manuelle Arbeit, aber es kann eine gute Performance und eine gute Grafikqualität bieten, wenn es richtig gemacht wird. Dieser Ansatz wird auch heute noch in vielen modernen Spielen verwendet.
In Situationen, in denen die Verwendung von LightmapGI nicht möglich ist (z.B. bei prozedural generierten Levels), kann es notwendig sein, sich allein auf die Umgebungsbeleuchtung oder einen konstanten Umgebungslichtfaktor zu verlassen. Dies kann zu einer flacheren Optik führen, aber durch die Anpassung der Umgebungslichtfarbe und des Himmelsanteils können in den meisten Fällen immer noch akzeptable Ergebnisse erzielt werden.