Up to date

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

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.

../../../_images/global_illumination_example.webp

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, deren Aktualisierungsmodus auf Immer eingestellt ist, sind viel teurer als Probes, deren Aktualisierungsmodus auf Einmal eingestellt ist (die Default-Einstellung). Geeignet für integrierte Grafiken bei Verwendung des Aktualisierungsmodus Einmal. Verfügbar, wenn das Forward Mobile-Backend verwendet wird. Wird in späteren Releases im Kompatibilitäts-Backend verfügbar sein.

  • LightmapGI:

    • Lichter können entweder nur mit indirektem Licht oder vollständig pro Licht gebacken werden, um die Performance weiter zu verbessern. Es können hybride Setups verwendet werden (z.B. mit einem Echtzeit-gerichteten Licht und vollständig gebackenen Positionslichtern). Richtungsinformationen können vor dem Backen aktiviert werden, um die Grafik zu verbessern, ohne dass die Performance darunter leidet (und auf Kosten der Dateigröße). Geeignet für integrierte Grafikkarten. Verfügbar, wenn das Forward Mobile-Backend verwendet wird. Wird in späteren Versionen im Kompatibilitäts-Backend verfügbar sein.

  • VoxelGI:

    • Die Anzahl der Unterteilungen des gebackenen Lichtern kann angepasst werden, um ein Gleichgewicht zwischen Performance und Qualität herzustellen. Die Qualität des VoxelGI-Renderings kann in den Projekteinstellungen angepasst werden. Das Rendering kann optional mit halber Auflösung durchgeführt werden (und dann linear skaliert werden), um die Performance deutlich zu verbessern. Nicht verfügbar bei Verwendung der Forward Mobile oder Kompatibilitäts-Backends.

  • Screen-Space indirekte Beleuchtung (SSIL):

    • Die SSIL-Qualität und die Anzahl der Unschärfedurchläufe können in den Projekteinstellungen angepasst werden. Standardmäßig wird das SSIL-Rendering mit halber Auflösung durchgeführt (und dann linear skaliert), um eine angemessene Performance zu gewährleisten. Nicht verfügbar bei Verwendung der Forward Mobile oder Kompatibilitäts-Backends.

  • SDFGI:

    • Die Anzahl der Kaskaden kann angepasst werden, um ein Gleichgewicht zwischen Performance und Qualität herzustellen. Die Anzahl der pro Frame geworfenen Strahlen kann in den Projekteinstellungen angepasst werden. Das Rendering kann optional mit halber Auflösung durchgeführt werden (und dann linear skaliert werden), um die Performance deutlich zu verbessern. Nicht verfügbar bei Verwendung der Forward Mobile oder Kompatibilitäts-Backends.

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.

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: Durchschnitt 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.

      VoxelGI in Aktion.

  • SDFGI: Durchschnitt 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.

      SDFGI in Aktion.

  • Screen-Space indirekte Beleuchtung (SSIL): Durchschnitt 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.

      SSIL in Aktion (ohne jede andere GI-Technik). Beachten Sie die emittierende Beleuchtung um den gelben Kasten.

  • LightmapGI: gut 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.

      LightmapGI in Aktion. Hier wird nur indirekte Beleuchtung gebacken, aber auch direktes Licht kann gebacken werden.

  • ReflectionProbe: Durchschnitt 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.

      ReflectionProbe in Aktion (ohne eine andere GI-Technik). Beachten Sie die reflektierende Kugel.

Echtzeitfähigkeit

  • VoxelGI: gut 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: Durchschnitt 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): gut 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: schlecht Gebacken, und daher nicht in Echtzeit.

    • Sowohl indirekte Beleuchtung als auch SH-Reflexionen werden gebacken und können zur Laufzeit nicht geändert werden. Echtzeit-GI muss durch andere Mittel simuliert werden, z.B. durch Echtzeit-Positionslichter. Dynamische Objekte erhalten indirekte Beleuchtung über Licht-Probes, die automatisch oder manuell vom Benutzer platziert werden können (LightmapProbe-Node). Nicht praktikabel für prozedural generierte Levels, da das Backen von Lightmaps nur im Editor möglich ist.

  • ReflectionProbe: Durchschnitt 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).

    • Indirekte Beleuchtung muss vom Benutzer manuell konfiguriert werden, kann aber zur Laufzeit geändert werden, ohne dass eine teure Berechnung hinter den Kulissen durchgeführt werden muss. Dies macht ReflectionProbes für prozedural generierte Levels praktikabel.

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.