Engine & platform

5 häufige Lightmapping-Probleme und Tipps zu deren Behebung

KRISTIJONAS JALNIONIS Technical Artist
Sep 27, 2022|18 Min.
5 häufige Lightmapping-Probleme und Tipps zu deren Behebung
Diese Website wurde aus praktischen Gründen für Sie maschinell übersetzt. Die Richtigkeit und Zuverlässigkeit des übersetzten Inhalts kann von uns nicht gewährleistet werden. Sollten Sie Zweifel an der Richtigkeit des übersetzten Inhalts haben, schauen Sie sich bitte die offizielle englische Version der Website an.

Ich habe vor Kurzem einen Leitfaden zur Fehlerbehebung bei Progressive Lightmapper entwickelt, um Entwicklern zu helfen, das Beste aus Baked Global Illumination (GI) im Unity Editor herauszuholen. Hier erläutere ich fünf der häufigsten Lightmapping-Probleme und ihre Lösungen, unterstützt durch Bilder und Links zu Seiten im Unity-Handbuch. Die vollständige Anleitung finden Sie in den Foren.

1. Keine gebackene globale Beleuchtung in der Szene
Cornell-Box-Szene, gerendert ohne Global Illumination (links) und mit Baked Global Illumination (rechts)

Wenn bestimmte Voraussetzungen nicht erfüllt sind, kann der Progressive Lightmapper möglicherweise keine Beleuchtung in Ihrer Szene erzeugen. Zu diesen Bedingungen gehören unter anderem:

  • Keine Objekte als GI-Mitwirkende markiert
  • Keine gebackenen Lichter in der Szene
  • Shader-Probleme

Um dies zu beheben, empfehle ich, eine der unten aufgeführten Korrekturen auszuprobieren.

Markieren Sie GameObjects als GI-Mitwirkende
Tragen Sie GI-Einstellungen unter der Mesh-Renderer-Komponente bei.

Markieren Sie Objekte, die Sie als GI-Mitwirkende mit Lightmap versehen möchten, indem Sie die folgenden Schritte ausführen:

Wählen Sie Ihr GameObjectaus.

Navigieren Sie zur Komponente„Mesh Renderer“.

Klappen Sie die Überschrift „Beleuchtung“ auf.

Aktivieren Sie das Kontrollkästchen Zur globalen Beleuchtung beitragen .

Dadurch wird der darunterliegende Parameter „Globale Beleuchtung empfangen“ aktiviert. Es enthält zwei Optionen:

  • Lichtkarten: Gedacht für statische Lightmap-Objekte – GameObject empfängt und steuert GI zu Lightmaps bei.
  • Lichtsonden: Gedacht für kleine Requisiten und Objekte, die nicht für Lightmapping geeignet sind – GameObject erhält GI von Light Probes und trägt GI zu den umgebenden Lightmaps bei.
Überprüfen der Szenenbeleuchtung

Nur gemischte und gebackene Lichter können zu gebackenem GI beitragen. Wählen Sie Lichter in Ihrer Szene aus und stellen Sie dann den Modus in der Lichtkomponenteentweder auf „Gemischt“ oder „Gebacken“ ein. Weitere Eigenschaften, die es wert sind, überprüft zu werden, sind:

  • Farbe: Dunkle Farben haben einen geringen oder keinen Beitrag zum GI. Wählen Sie helle Farben für die Beleuchtung und verwenden Sie die Intensitätseigenschaft , um sie zu verstärken oder zu dimmen.
  • Intensität: Je höher die Intensität, desto heller das Licht. Stellen Sie sicher, dass Ihre Beleuchtung hell genug ist, um einen sinnvollen GI-Beitrag zu leisten.
  • Indirekter Multiplikator: Diese Eigenschaft steuert die Intensität des indirekten Rückpralls. Stellen Sie sicher, dass der Wert nicht auf Null eingestellt ist. Andernfalls hat das Licht überhaupt keinen Beitrag zum GI. Beachten Sie, dass die Beleuchtung in Ihrer Szene nicht dem PBR-Standard (Physical Based Rendering) entspricht, wenn Sie diesen Wert über eins festlegen.
  • Besuchen Sie No Baked Global Illumination im Szenenforum

Überprüfen Sie das Asset „Beleuchtungseinstellungen“

Stellen Sie im Fenster „Beleuchtung“ (erreichbar über „Fenster“ > „Rendering“ > „Beleuchtung“) sicher, dass das Feld „Beleuchtungseinstellungen-Asset“ nicht leer gelassen wird. Wenn kein Asset zugewiesen ist, klicken Sie auf die Schaltfläche „Neue Beleuchtungseinstellungen“ . Dadurch wird ein Asset erstellt und zugewiesen, wobei die Eigenschaften im Fenster zur Bearbeitung freigegeben werden.

Überprüfen Sie anschließend Folgendes:

  • Sie haben das Kontrollkästchen „Bakeed Global Illumination“ aktiviert, das Baked GI-Berechnungen aktiviert. Dieses Kontrollkästchen zeigt auch die Dropdown-Liste „Beleuchtungsmodus“ an.
  • Der Wert „Max. Bounces“ ist nicht auf Null gesetzt. Je höher dieser Wert, desto stärker wird das Licht in der Umgebung reflektiert.
  • Der Schieberegler für die indirekte Intensität ist nicht auf Null eingestellt. Wenn Sie diesen Schieberegler auf Null setzen, wird die gesamte indirekte Beleuchtung in der Szene verringert.
Shader und Materialien prüfen

Benutzerdefinierte Shader könnten der Grund dafür sein, dass die GI-Berechnung fehlgeschlagen ist. Verwenden Sie zu Debugzwecken die integrierten Shader, die mit dem Unity Editor geliefert werden. Das sind:

Wenn Unity nach dem Wechsel zu einem der oben beschriebenen Shader Beleuchtung erzeugt, liegt das Problem möglicherweise an denbenutzerdefinierten Shadern. Stellen Sie in diesem Fall sicher, dass die Oberflächen-Shader das Shader-Schlüsselwort LIGHTMAP_ON enthalten.

Weitere Informationen zum weiteren Anpassen der Baked GI-Ausgabe mithilfe von Shadern finden Sie auf der Meta Pass-Seite .

Andere mögliche Korrekturen

Wenn die oben genannten Schritte Ihr Problem nicht gelöst haben, versuchen Sie es mit diesen möglichen Lösungen:

  • Wählen Sie im Beleuchtungsfensterein anderes Lightmapping-Backend aus. Wenn das Backen der Beleuchtung bei Verwendung der Progressive-GPU fehlschlägt, beim Backen mit der Progressive-CPU jedoch erfolgreich ist, kann dies auf ein Hardware- oder Treiberproblem zurückzuführen sein.
  • Aktualisieren Sie die GPU-Treiber. Die richtigen Treiber für Ihr System finden Sie auf der Seite des GPU-Herstellers. (Lesen Sie für Linux-Rechner den Abschnitt zur Linux-Treibereinrichtung in diesem Forenthread).
  • Stellen Sie sicher, dass Ihre GPU die Mindestanforderungen erfüllt. Bitte beachten Sie diesen Forenthread.
  • Leeren Sie den GI-Cache. Um ihn zu löschen, navigieren Sie zu „Einstellungen“ > „GI-Cache“ und klicken Sie auf die Schaltfläche „Cache leeren“ . Bedenken Sie, dass dadurch alle in der Szene vorhandenen Beleuchtungsdaten gelöscht werden und Sie die Beleuchtung neu generieren müssen.
2. Objekten fehlt die Beleuchtung

Bestimmte Objekte, die unbeleuchtet oder fehl am Platz erscheinen, können auf ein Problem mit der Szeneneinrichtung hinweisen. Dieses Problem tritt häufig auf, wenn dynamische Objekte über keine Lichtsonden zum Abrufen der Beleuchtung verfügen. Darüber hinaus kann jedes glänzende Metallmaterial in der Szene schwarz erscheinen, wenn keine lokalen Reflexionssonden vorhanden sind.

Cornell-Box-Szene mit einer nicht mit Licht abgebildeten Metallkugel und einer Statue: Beide Objekte sind schwarz, wenn keine Lichtsonden oder Reflexionssonden vorhanden sind (links). Die diffuse Statue ist sichtbar, wenn sie von Lichtsonden beleuchtet wird (Mitte). Sowohl die reflektierende Kugel als auch die Statue sind nach dem Platzieren von Lichtsonden und Reflexionssonden sichtbar (rechts).

Um dies zu beheben, empfehle ich, eine der unten aufgeführten Korrekturen auszuprobieren.

Platzieren Sie Lichtsonden

Dynamische Objekte – oder GI-Mitwirkende, die GI von Lichtsonden erhalten – benötigen Lichtsonden, um Daten zur indirekten Beleuchtung abzutasten. Wenn keine vorhanden sind, greifen die Objekte auf die Abtastung der Umgebungssonde zurück (d. h. der Licht- und Reflexionssonde, die immer in der Szene vorhanden ist).

Um dies zu mildern, richten Sie in der Szene ein Light Probe -Netzwerk ein und fügen Sie in Bereichen mit hoher Bedeutung weitere Sonden hinzu. Stellen Sie sicher, dass genügend Lichtsonden vorhanden sind, um alle betroffenen Objekte zu umfassen, und erzeugen Sie erneut Beleuchtung, um den Effekt zu sehen.

Platzieren von Reflexionssonden

Reflektierende Metallobjekte werden möglicherweise auch nach der Platzierung eines dichten Netzwerks aus Lichtsonden immer noch schwarz dargestellt. Um solche Objekte zu beschatten, müssen Sie eine Reflexionssonde platzieren, die das betroffene Objekt umfasst. Generieren Sie die Beleuchtung erneut oder backen Sie die Sonde in der Reflexionssondenkomponente erneut, indem Sie auf die Schaltfläche „Backen“ klicken.

Wenn Sie schwarze Bereiche in den Reflexionen beobachten, versuchen Sie, die Anzahl der Abpraller zu erhöhen. Dadurch erhöht sich die Anzahl der Rückpralle, wodurch Reflexionen innerhalb von Reflexionen entstehen. Sie können auf diese Eigenschaft unter Beleuchtung > Umgebung > Umgebungsbeleuchtungzugreifen.

Besuchen Sie das Beleuchtungsforum „Objekte fehlen“

Mesh-Renderer-Einstellungen prüfen

Wenn das Problem durch die vorherigen Schritte immer noch nicht behoben wird, überprüfen Sie die Mesh-Renderer-Komponente des betroffenen Objekts. Stellen Sie im Abschnitt „Sonden“sicher, dass die Lichtsonden und Reflexionseigenschaften auf eine andere Einstellung als „Aus“eingestellt sind.

Die Eigenschaften von Lichtsonden und Reflexionssonden müssen auf „Sonden mischen“ (oder eine andere Einstellung als „Aus“) eingestellt werden.
Materialfarbwerte anpassen

Rein schwarze Materialien absorbieren alles direkte und indirekte Licht. Dies ist physikalisch korrektes Verhalten. Im wirklichen Leben ist kein natürlich vorkommendes Material vollkommen schwarz. Beispielsweise beträgt der Wert für Kohle, eines der dunkelsten natürlichen Materialien, auf einer RGB-Leuchtkraftskala „50, 50, 50“.

Passen Sie Ihre Materialfarbwerte an, um den physikalisch basierten Schattierungsstandards zu entsprechen. In der integrierten Render-Pipeline können Sie den Zeichenmodus „Albedo-Szenenansicht validieren“ verwenden, um zu bestimmen, ob die Albedo-Werte PBR-kompatibel sind. Sie können den Rendering-Debugger in URP und HDRP verwenden, um dasselbe zu tun.

Überprüfen Sie den Szenenaufbau

Wenn Sie mit mehreren Szenenarbeiten, überprüfen Sie, ob die Szene mit der Beleuchtung als aktive Szenefestgelegt ist. Standardmäßig legt Unity die erste geladene Szene als aktive Szene fest, was sich nachteilig auf die Builds des eigenständigen Players auswirken kann.

3. Emissionsmaterialien werden nicht wiedergegeben
Sowohl auf der Ebene in der Decke als auch auf der Kugel sind emittierende Materialien aufgebracht (links). Bloom wird als Nachbearbeitungseffekt aktiviert, um den Eindruck eines leuchtenden Materials zu erwecken (Mitte). Emissionsebene und Kugel sind beide als GI-Mitwirkende markiert, die die Beleuchtung in der Szene beeinflussen (rechts).

Beim Rendern von Emissionsmaterialien gibt es zwei Arten von Problemen:

  • Emittierende Materialien erscheinen nicht als „leuchtend“, was auf ein Problem bei der Nachbearbeitung hinweist.
  • Emissionsmaterialien tragen nicht zur globalen Beleuchtung bei, was auf ein Problem mit der Objekt- oder Materialkonfiguration hinweist.

Um diese Probleme zu beheben, empfehle ich, eine der unten aufgeführten Lösungen auszuprobieren.

Bloom im Nachbearbeitungsstapel aktivieren

Um den Eindruck eines leuchtenden Materials zu erzeugen, aktivieren Sie Bloom im Nachbearbeitungsstapel Ihrer Wahl. Tipps hierzu finden Sie in der Dokumentation zu integriertem RP, URPoder HDRP .

Materialeigenschaften prüfen

Wenn Sie emittierende Objekte für Lightmapping verwenden möchten, stellen Sie Folgendes sicher:

  • Sie haben das betreffende GameObject als GI-Mitwirkendermarkiert. Aufgrund der selbstleuchtenden Natur emittierender Objekte können Sie deren Eigenschaft „Globale Beleuchtung empfangen“ auf „Lichtsonden“einstellen. Dadurch wird Platz im Lightmap-Atlas gespart.
  • Die Eigenschaft „Globale Beleuchtung“ ist im Materialinspektorauf „Gebacken“ eingestellt. Diese Eigenschaft ist unter der Emissionseingabe verfügbar. Weitere Einzelheiten finden Sie in der Dokumentation zu integriertem RP, URPoderHDRP .
Materialinspektor in der integrierten Render-Pipeline: Wir haben die Emissionseigenschaften blau hervorgehoben.
Beleuchtungseinstellungen überprüfen

Stellen Sie im Fenster „Beleuchtung“sicher, dass die Eigenschaft „Indirekte Intensität“ nicht auf Null eingestellt ist. Wenn Sie den Wert auf Null setzen, wird die gesamte indirekte Beleuchtung deaktiviert, einschließlich des gebackenen Beitrags von gebackenen Emissionsobjekten.

Besuchen Sie das Forum „Emissive Materialien werden nicht wiedergegeben“

4. Flache normale Karten

Beim Backen im ungerichteten Modus erstellt der Unity Editor keine separate Textur zum Speichern der Richtungsinformationen. Dies führt dazu, dass die Objekte nach dem Backen flach aussehen.

Es ist erwähnenswert, dass sich Normal Maps mit niedriger Frequenz mithilfe von Richtungstexturen nur schwer erfassen lassen. Solche Texturen erscheinen flach, wenn die Beleuchtung mit vollständig gebackenen Lichtern erzeugt wird.

Nicht gerichtete Lightmaps mit gebackenem Licht (links) vs. gerichtete Lightmaps mit gebackenem Licht (rechts): Bei nicht gerichteten Lightmaps fehlt die Richtung des einfallenden Lichts, die bei der Verwendung von normalen Maps für eine gute Reliefdarstellung sorgt.

Um dies zu beheben, empfehle ich, eine der unten aufgeführten Korrekturen auszuprobieren.

In den Richtungsmodus wechseln
Dropdown-Menü „Richtungsmodus“ im Fenster „Beleuchtungseinstellungen“.

Stellen Sie im Fenster „Beleuchtung“ die Eigenschaft „Richtungsmodus“ auf „Richtung“ein. Dieser Modus generiert eine sekundäre Textur, die die dominante Lichtrichtung speichert. Normale Karten bieten eine gute Reliefdarstellung, weisen jedoch keine spiegelnde Reaktion auf.

Besuchen Sie das Forum für flache Normalkarten

Verwenden Sie gemischte Lichter

Gemischte Lichter sorgen für eine spiegelnde und normale Reaktion in Echtzeit. Der Progressive Lightmapper backt indirekte Beleuchtung in eine Lichtkarte ein. Diese Kombination gewährleistet die hochwertigste Materialreaktion beim Einsatz von gebackener Beleuchtung.

Von einem gebackenen Scheinwerfer beleuchtete Gerichtete Lightmaps (links) vs. Von einem gemischten Scheinwerfer beleuchtete Gerichtete Lightmaps (rechts): Beachten Sie den verbesserten Kontrast in den Normal Maps in der durch das gemischte Licht beleuchteten Szene.

Wenn Ihr Projekt es zulässt, schalten Sie den Lichtmodus in der Lichtkomponenteauf „Gemischt “. Beachten Sie, dass gemischte Lichter die gleichen Leistungseinbußen verursachen wie Echtzeitlichter. Abhängig vom verwendeten Beleuchtungsmodus werfen gemischte Lichter Schatten in Echtzeit, jedoch keine gebackenen weichen Schatten.

Verwenden Sie Lichtsonden

Mit Sonden beleuchtete GameObjects weisen häufig eine bessere Materialreaktion auf als solche, die mit Baked Lights beleuchtet werden. Wenn Ihre künstlerische Leitung es zulässt, stellen Sie die Eigenschaft „Globale Beleuchtung empfangen“ in der Komponente „Mesh-Renderer“auf „ Lichtsonden“ ein. Beachten Sie, dass Sie auch Light Probe Proxy Volume (LPPV) verwenden können, um sondierungsbeleuchteten Objekten einen räumlichen Farbverlauf hinzuzufügen.

5. Fehlende spiegelnde Reaktion
Eine einfache Szene mit mehreren gebackenen Punktlichtern vor dem Backen einer Lightmap (links) im Vergleich zur gleichen Szene nach dem Backen der Lightmaps (rechts): Beachten Sie, dass nach dem Backen spiegelnde Glanzlichter fehlen.

Eine der inhärenten Einschränkungen von Baked Lights besteht darin, dass sie keine spiegelnde Reaktion auf Materialien in Echtzeit bieten. Dies bedeutet, dass glänzenden Materialien nach der Beleuchtung keine spiegelnden Glanzlichter mehr zu sehen sind.

Um dies zu beheben, empfehle ich, eine der unten aufgeführten Korrekturen auszuprobieren.

Verwenden Sie gemischte Lichter

Im Gegensatz zu gebackenen Lichtern bieten gemischte Lichter eine direkte spiegelnde Reaktion auf Materialien in Echtzeit. Wenn spiegelnde Glanzlichter in Ihrer Szene wichtig sind, schalten Sie den Lichtmodus in der Lichtkomponenteauf „Gemischt “.

Besuchen Sie das Forum „Fehlende Spiegelreaktion“

Verwenden Sie emittierende Proxys

Durch die Verwendung emittierender Objekte ist es möglich, die spiegelnde Reaktion von Lichtern zu imitieren. Gehen Sie hierzu folgendermaßen vor:

Platzieren Sie eine Reflexionssonde in Ihrer Szene.

Klicken Sie mit der rechten Maustaste in das Hierarchiefenster und wählen Sie 3D-Objekt > Kugel.

Wählen Sie das neu erstellte Objekt aus und setzen Sie sein Static Editor Flag auf Reflection Probe Static.

Erstellen Sie im Projektfenster ein neues Material, indem Sie mit der rechten Maustaste klicken und Erstellen > Materialauswählen.

Wählen Sie das neu erstellte Material aus und aktivieren Sie das Kontrollkästchen Emission . Setzen Sie die Eigenschaft „Globale Beleuchtung“ auf „Keine“.

Ziehen Sie das Material per Drag & Drop auf die Kugel, um es zuzuweisen.

Platzieren Sie die Kugel an der gleichen Position wie Ihr Licht.

Beleuchtung erzeugen.

Nachdem Sie die obigen Schritte ausgeführt haben, sollten Sie in der Lage sein, die in der Cubemap der Reflection Probe erfassten Emissionsobjekte zu sehen. Sie können diese Objekte nach dem Backen ausblenden oder eine Culling-Maske in der Kamerakomponenteeinrichten.

Dieselbe Szene, jedoch mit emittierenden Proxys, die von der Reflection Probe erfasst wurden (links) im Vergleich zu einer alternativen Perspektive, die die Platzierung der besagten Proxys zeigt (rechts)

Weitere Tipps zur Fehlerbehebung beim Progressive Lightmapper finden Sie in der vollständigen Anleitung in den Foren. Wenn Sie diesen Artikel diskutieren oder andere Lösungen austauschen möchten, können Sie dort oder hierKontakt mit mir aufnehmen. Achten Sie auch auf die neuen technischen Blogs anderer Unity-Entwickler im Rahmen der fortlaufenden Serie „Tech from the Trenches“.