Engine & platform

Bewährte Methoden für Spotlight-Teams: Glaubwürdige Visualisierungen in Unity erstellen

RINALDO TJAN / UNITY TECHNOLOGIESContributor
Mar 9, 2018|13 Min.
Bewährte Methoden für Spotlight-Teams: Glaubwürdige Visualisierungen in Unity erstellen
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.

Als Teil des Spotlight-Teams habe ich das Glück, an einigen sehr interessanten Projekten beteiligt zu sein. Das Spotlight-Team bei Unity arbeitet gemeinsam mit unseren Kunden an Spielen und ein wesentlicher Teil meiner Aufgabe besteht darin, Entwicklern dabei zu helfen, das gewünschte Aussehen und die gewünschte Qualität für ihre Projekte zu erreichen. Ich bekomme viele Geschichten aus der gesamten Branche zu hören und kann die häufigsten Probleme identifizieren, mit denen Inhaltsersteller konfrontiert sind. Bei mehreren der Projekte, an denen ich gearbeitet habe, ging es um einigermaßen realistische visuelle Darstellungen. Wie erstellen wir angesichts der künstlerischen Inhalte des Projekts eine Szene in Unity, die glaubwürdig aussieht?

Um glaubwürdige visuelle Darstellungen zu erstellen, müssen zahlreiche Themen abgedeckt werden. In diesem Beitrag werde ich auf Beleuchtung und Rendereinstellungen eingehen. Weiter unten in diesem Beitrag werde ich auch unsere Spotlight Tunnel-Beispielszene teilen und erklären, wie Sie damit lernen und experimentieren können.

Vorbereiten der Unity-Rendereinstellungen

Wenn Sie verstehen, wie Sie die Rendering-Funktionen von Unity nutzen können, um die reale Welt realistisch nachzubilden, können Sie das visuelle Ziel Ihres Projekts erreichen.

Linearer Rendering-Modus
Einfach ausgedrückt führt Unity hierdurch Beleuchtungs- und Schattierungsberechnungen mithilfe physikalisch genauer Mathematik durch, bevor die endgültige Ausgabe in das für Monitore optimale Format umgewandelt wird.

Um einen Gamma- oder linearen Workflow festzulegen,
Gehen Sie zu Bearbeiten > Projekteinstellungen > Player und öffnen Sie die Player-Einstellungen.
Gehen Sie dann zu „Weitere Einstellungen“ > „Rendering“ und ändern Sie den Farbraum in „Linear“.

Die Definition Ihres Farbraums sollte eine der ersten Entscheidungen in Ihrem Projekt sein, da sie erhebliche Auswirkungen auf die endgültigen Schattierungs- und Beleuchtungsergebnisse hat.

Rendering-Modus.
In der Spotlight-Tunnel-Beispielszene verwenden wir einen verzögerten Rendering-Pfad. Auf diese Weise können Inhaltsersteller effizient mit mehreren dynamischen Lichtern arbeiten, mehrere Reflexions-Cubemaps kombinieren und die vorhandenen Screen Space Reflection-Funktionen in Unity 2017+ verwenden.

Um dies einzustellen, gehen Sie zu Grafikeinstellungen > Rendering-Pfad oder Kamera > Rendering-Pfad

Weitere Informationen zu Rendermodi finden Sie in diesem Teil der Unity-Dokumentation.

High Dynamic Range (HDR)-Kamera.
Beim Rendern einer glaubwürdigen Beleuchtung müssen sich Inhaltsersteller – ähnlich wie im echten Leben – mit Lichtwerten und Emissionsoberflächen auseinandersetzen, die eine Helligkeit von über 1 (hoher Dynamikbereich) aufweisen. Diese Werte müssen dann dem richtigen Bildschirmbereich neu zugeordnet werden (dies wird als Tonemapping bezeichnet). Diese Einstellung ist entscheidend, damit die Unity-Kamera diese hohen Werte verarbeiten und nicht abschneiden kann.

Um dies zu aktivieren, wählen Sie die Hauptkamera in der Szene aus und stellen Sie sicher, dass HDR auf der Registerkarte „Inspektor“ für die ausgewählte Kamera aktiviert ist.

HDR-Lightmap-Kodierung. (optional)
In der Beispielszene „Spotlight Tunnel“ wurde kein gebackenes Licht verwendet. Wenn Sie jedoch mit gebackenem Licht mit hoher Intensität (HDR) arbeiten möchten, empfehlen wir Ihnen, die Lightmap-Kodierung auf HDR-Lightmap einzustellen, um sicherzustellen, dass das gebackene Lichtergebnis konsistent ist.
Die Option finden Sie unter Bearbeiten > Projekt > Player-Einstellungen > Andere Einstellungen > Lightmap-Kodierung (nur Unity 2017.3+).
Detaillierte Informationen zur Lightmap-Kodierung finden Sie im Handbuch.

Tonemapper für Ihre Szene (Teil des Post-Processing-Stack).
Um HDR-Beleuchtung richtig anzuzeigen, muss im Projekt ein Tonemapper aktiviert werden.
Stellen Sie sicher, dass Sie zuerst Unity Post Processing Stack (Version 1) aus dem Asset Store installieren.

Erstellen Sie in Ihrem Projekt ein Post Process Profile Asset und konfigurieren Sie es wie folgt:

  • Farbkorrektur aktivieren > Tonemapper > ACES
    (Farbkodierungsstandards der Akademie)
  • Aktivieren Sie Dithering. Durch Dithering kann die Szene das durch die 8-Bit/Kanal-Ausgabe einer HDR-Szene verursachte Banding-Artefakt verringern. Moderne Engines verwenden diese Technik, um die Beschränkung der 16M-Farbausgabe zu umgehen. Lassen Sie die restlichen Einstellungen im Tonemapper vorerst unverändert.
  • Wählen Sie die „Hauptkamera“ und fügen Sie die Komponente „Nachbearbeitungsverhalten“ hinzu.
  • Weisen Sie dem Profilsteckplatz das zuvor erstellte Post-Process-Profil zu. Wenn Sie Post Processing Stack Version 2 verwenden möchten, lesen Sie bitte die Readme-Datei des Pakets , da es sich derzeit in der Betaphase befindet.
  • Bildeffekt für Ansichtsfenster aktivieren.
    Dadurch können Sie den Tonemapper immer sehen, während Sie mit der Szenenansicht arbeiten.
    Beachten Sie die Verbesserungen bei der Wiedergabe von Glanzlichtern und der Werttrennung im dunklen Tunnel in der Tonemapped-Szene. Wenn Sie sich die Szene ohne Tonemapping ansehen, können Sie erkennen, dass die Glanzlichter nicht zu einer einheitlichen Farbe zusammenlaufen (in diesem Fall die gelblich brennende Sonne).

Mit diesem Setup wird im Wesentlichen versucht, die Art und Weise nachzubilden, wie eine Digitalkamera eine Szene mit einer festen Belichtung aufnimmt (ohne aktivierte Belichtungsanpassungs-/Augenanpassungsfunktionen).

Bild

An diesem Punkt haben die Inhaltsersteller eine ordnungsgemäße grundlegende Einrichtung zum Rendern von Szenen erreicht, die bei einer breiten Palette von Inhalten glaubwürdige Ergebnisse liefern sollte.

Beleuchtung und Aufbau

Unity unterstützt viele verschiedene Beleuchtungsstrategien/-systeme und Projektszenarien. Wir empfehlen Ihnen, unsere ausführliche Dokumentation zu Beleuchtungsmodi und -einrichtung durchzusehen, um alle verschiedenen Optionen zu verstehen.

Für eine schnelle Iteration und Einfachheit ist jedoch eine reaktionsschnelle visuelle Rückmeldung erforderlich.
Aus diesem Grund verwendet die Spotlight Tunnel-Beispielszene Echtzeitbeleuchtung mit Realtime Global Illumination (GI). Dadurch erhalten wir eine schöne Bandbreite an spiegelnder Reaktion, eine gute reflektierte Beleuchtung und können die Beleuchtung im Handumdrehen ändern.

Echtzeitbeleuchtung mit Realtime GI + Light Probe

Bild
Bild

Um auf die Beleuchtung selbst zurückzukommen: Eine typische Szene im Außenbereich bei Tageslicht kann in drei Beleuchtungskomponenten unterteilt werden:

1) Hemisphäre (Himmelsbeitrag).

2) Direktes Licht (Sonne + lokales Licht).

3) Indirekte Beleuchtung (GI-Beleuchtung).

In dieser Phase wird davon ausgegangen, dass die Inhaltsersteller über Meshes mit der richtigen Textur und eine zusammengestellte Szene verfügen.

Außenbeleuchtung und Einrichtung

Erste Hemisphärenbeleuchtung
Die erste Komponente für die Außenbeleuchtung ist die Hemisphärenbeleuchtung, die in Unity „Environment Lighting“ genannt wird. Dies ist ein schickes Wort für Oberlicht. Der Nachthimmel trägt nur minimal bei, während der Tageshimmel einen sehr hellen Beitrag leistet. Die Hemisphäreneinstellungen finden Sie unter der Registerkarte „Beleuchtung“ (Fenster > Beleuchtung > Einstellungen > Umgebung).
Zunächst einmal wäre prozedurales Skybox-Material einem HDRI-Cubemap vorzuziehen. Erstellen Sie im Projekt ein neues Material, nennen Sie es SkyMaterial und stellen Sie es dann auf Skybox/Procedural ein.

Bild

Weisen Sie es dem Umgebungs-Skybox-Material auf der Registerkarte „Beleuchtung“ > „Szene“ zu.

Bild

An diesem Punkt ist die Szene etwas beleuchtet. Es gibt zwar eine Umgebungsbeleuchtung, aber keine richtige Halbkugelbeleuchtung. Wir lassen das vorerst so stehen.

Gerichtetes Licht
Typisches Sonnen- oder Mondlicht ist eine Lichtquelle in nahezu unendlicher Entfernung und weist parallele Lichtrichtung und Schatten auf. Sie werden normalerweise durch ein gerichtetes Licht dargestellt.

Bild

Indirekte Beleuchtung / Globale Beleuchtung.
Gerichtetes Licht + Umgebungslicht allein erzeugen keine glaubwürdige Beleuchtung. Für eine ordnungsgemäße Halbkugelbeleuchtung ist eine Okklusion der Oberlichtbeleuchtung erforderlich. Wir müssen auch das Sonnenlicht simulieren, das von den Objekten in der Szene reflektiert wird. Der Himmel rendert derzeit einen einzelnen Farbwert für die Szene, wodurch er flach wird. Hier wird Realtime Global Illumination oder Baked Lighting benötigt, um Okklusion und indirektes Bounce-Lighting zu berechnen. Um dies zu erreichen, befolgen Sie diese Schritte:

  • Stellen Sie sicher, dass alle Meshes, die zum Realtime GI oder Baking beitragen müssen, mit „Enable Lightmap Static“ und „Reflection Probe Static“ gekennzeichnet sind. Dies wären normalerweise große statische Netze.
  • Aktivieren Sie als Nächstes die globale Echtzeitbeleuchtung (belassen Sie die mittleren Standardeinstellungen) auf der Registerkarte „Beleuchtung“ > „Szene“ > „Echtzeitbeleuchtung“.
  • Klicken Sie auf „Beleuchtung generieren“ oder aktivieren Sie „Automatisch generieren“.
Bild

Whoa, die Szene ist jetzt dunkel, nachdem die Lichterzeugung abgeschlossen ist. Um die Sache noch schlimmer zu machen, sind einige Elemente der Szene fehl am Platz – beachten Sie die Straßenbahn und die Tür im Hintergrund.
Die statischen Objekte in der Szene verfügen derzeit über eine geeignete Okklusion für die Halbkugel und eine indirekte Rückprallreaktion des gerichteten Lichts. Den übrigen Objekten fehlt jedoch eine geeignete Beleuchtungseinrichtung.

Lichtsonden und Reflexionssonden.
Damit dynamische Objekte oder Nicht-Lightmap-Objekte Echtzeit-/gebackene globale Beleuchtung erhalten, müssen in der Szene verteilte Lichtsonden vorhanden sein. Achten Sie darauf, Lichtsondengruppen in der Szene effizient in der Nähe der Bereiche zu verteilen, in denen sich dynamisch beleuchtete Objekte befinden oder vorbeikommen (z. B. Spieler). Erfahren Sie mehr über die Light Probe Group im Handbuch.
Klicken Sie erneut auf „Beleuchtung generieren“ oder warten Sie, bis die Vorberechnung abgeschlossen ist, wenn „Automatisch generieren“ aktiviert ist.

Bild

Die Straßenbahn und die Tür im Hintergrund sind besser geerdet, aber die Reflexionen wirken fehl am Platz. Die Reflexion des Himmels ist überall zu sehen und zeigt sich auch im Tunnel. Hier kommen Reflexionssonden ins Spiel. Platzieren Sie Reflexionssonden je nach Bedarf effizient und mit der richtigen Abdeckung in der Szene. In der obigen Szene reicht eine Reflektionssonde für den Hauptraum und zwei für jedes Tunnelinnere.
Eine Cubemap-Auflösung von 128 Pixeln mit Boxprojektion ist in der Regel eine gute Basis für typische Fälle und schont Speicher und Reflexionsbackzeiten.
Hier finden Sie weitere Informationen zur Reflexionsprobe.

Bild

Die Szene wirkte nun richtig fundiert und stimmig, ein wichtiger Teil einer glaubwürdigen Szene. Aber alles ist noch düsterer als zuvor und von weitem nicht glaubwürdiger Qualität.

HDR-Beleuchtungswert
Vielen Inhaltserstellern ist nicht bewusst, dass Hemisphärenbeleuchtung und Sonnenlicht in Wirklichkeit sehr helle Lichtquellen sind. Sie sind viel heller als der Wert 1. Hier kommt die HDR-Beleuchtung ins Spiel.

Schalten Sie vorerst das gerichtete Licht aus und stellen Sie dann die SkyMaterial-Belichtung auf 16 ein.
Dadurch erhalten Sie eine gute Vorstellung davon, welche Auswirkungen die richtige Hemisphärenbeleuchtung auf eine Szene hat.

Bild

Die Dinge beginnen glaubwürdig auszusehen. Stellen Sie sich diesen Zustand als einen bewölkten Tag vor, an dem das Sonnenlicht am Himmel völlig gestreut ist, sodass es kein gerichtetes Licht gibt.

An diesem Punkt können Sie das Sonnenlicht mit einem viel höheren Wert wieder in die Szene einführen. Versuchen Sie zunächst die Intensität 5. Obwohl die Sonne fast weiß aussieht, ist es wichtig, die Farbe des gerichteten Lichts richtig zu wählen, da der Einfluss der indirekten Farbe der starken Sonne das Aussehen der Szene dramatisch verändern kann.

Bild

Jetzt sieht die Sonne (gerichtetes Licht) wie ein energiereiches Licht aus, wie man es im wirklichen Leben erwartet. Die Szene sieht zu diesem Zeitpunkt ziemlich glaubwürdig aus.

Umgebungsverdeckung und Reflexion im Bildschirmbereich
Während die Szenenbeleuchtung an diesem Punkt ziemlich gut aussieht, gibt es zusätzliche Details, die Sie der Szene hinzufügen können, um sie weiter zu verbessern. Das Backen einer detaillierten Okklusion ist normalerweise nicht möglich, da im Echtzeit-GI für eine angemessene Leistung eine begrenzte Auflösung eingestellt ist. Hier kann Screen Space Ambient Occlusion Abhilfe schaffen. Aktivieren Sie SSAO im Post-Processing-Profil unter Umgebungsverdeckung. Die Einstellungen für dieses Beispiel sind zunächst auf Intensität 0,5, Radius 1, mittlere Sample-Anzahl mit Downsampling und „Nur Umgebung“ aktiviert.

Bild

Während SSAO für zusätzliche Okklusion des Umgebungslichts sorgt, könnten bei der Reflexion neben den einfachen Reflexionssonden auch einige Genauigkeitsverbesserungen sinnvoll sein.
Screen Space Raytraced Reflections können helfen, diese Situation zu verbessern. Aktivieren Sie die Screen Space Reflection im Post-Processing-Profil.

Bild

Beachten Sie, dass die linke Seite der nassen Spur keine hellen Reflexionen mehr wiedergibt, da SSR der Szene genauere Reflexionen für Objekte auf dem Bildschirm liefert. Beide dieser Nachbearbeitungseffekte führen zur Laufzeit zu Leistungseinbußen. Aktivieren Sie sie daher mit Bedacht und legen Sie die Qualitätseinstellungen so fest, dass sie Ihren Laufzeitleistungsbeschränkungen entsprechen.

Nebel
In dieser Phase haben die Ersteller der Inhalte eine einigermaßen glaubwürdige Trennung der Außen- und Innenwerte bei einer festen Belichtung erreicht. In dunklen Innenbereichen sind Reflexionen als starke Glanzlichter und nicht als trübe, schlammige Werte sichtbar.

Bild

Allerdings werden die Vordergrund- und Hintergrundelemente der Szene nicht angezeigt, obwohl sie starke perspektivische Elemente aufweisen. Ein subtiler Nebel in der Szene kann einen großen Unterschied machen und der Szene zusätzliche Dimension verleihen.

Bild

Beachten Sie, dass das Geländer im Vordergrund im Vergleich zur Szene ohne Nebel besser definiert ist.
Nebel ist auf der Registerkarte „Beleuchtung“ > „Szene“ > „Andere Einstellungen“ aktiviert. Nebelfarbe #6D6B4EFF, Exponential bei 0,025 Dichte ist hier aktiviert. Beim verzögerten Rendering von Unity 2017 müssen Sie möglicherweise auch Nebel im Postprozessprofil aktivieren, wenn dieser nicht automatisch aktiviert wird.

Innen- und lokale Beleuchtung

Scheinwerfer / Punktlicht
Die Grundelemente der lokalen Echtzeitbeleuchtung sind Scheinwerfer und Punktlichter. Flächenbeleuchtung kann nur beim Backen von Beleuchtung verwendet werden, es sei denn, Sie verwenden die in der Betaversion 2018.1eingeführte HD Scriptable Render Pipeline (SRP). Es gibt neue Flächenlichter, die im HD-SRP-Modus in Echtzeit gerendert werden können.

Beide Arten von Lichtern strahlen ihr Licht grundsätzlich von einem Punkt im Raum aus ab und sind in ihrer Reichweite begrenzt, wobei beim Scheinwerfer zusätzlich noch der Winkel begrenzt ist. Weitere Informationen zur Beleuchtung finden Sie im entsprechenden Abschnitt der Unity-Dokumente.

Die großen Unterschiede zwischen den beiden Lichtern liegen in der Art und Weise, wie sie Schatten werfen und mit Cookies interagieren. Das Schattenwerfen mit einem Punktlicht erfordert 6 Schattenkarten im Vergleich zu einer einzelnen Schattenkarte eines Scheinwerfers. Aus diesem Grund sind Schatten werfende Punktlichter deutlich teurer und sollten sehr sparsam eingesetzt werden.

NOTIZ: Bei Baked Lights besteht dieses Problem nicht.
Ein weiterer Unterschied besteht darin, dass eine Cookie-Textur auf einem Spotlight eine einfache, unkomplizierte 2D-Textur ist, während ein Pointlight eine Cubemap erfordert, die normalerweise in einer 3D-Software erstellt wird.

Farbe und Intensität des Lichts.
Um plausible Ergebnisse zu erzielen, müssen Sie bei der Auswahl der richtigen Farbe und Intensität für Ihre Beleuchtung einige grobe Richtlinien beachten.

Achten Sie bei der Auswahl der Intensität der Innenbeleuchtung darauf, dass keine Innenbeleuchtung eine höhere Intensität als die Sonne aufweist. Dies kann je nach Szene zu einem unausgewogenen Erscheinungsbild führen.

Bild

Bei dieser Beispielszeneneinstellung ist es sehr unwahrscheinlich, dass von der Decke Licht mit hoher Intensität scheint, das die Helligkeit bei Tageslicht übersteigt.

Achten Sie bei der Farbauswahl darauf, keinen Farbkanal vollständig wegzulassen. Dadurch entsteht ein Licht, das Probleme hat, zum Weißpunkt zu konvergieren.

Bild

Obwohl es sich technisch gesehen um eine gültige helle Farbe handelt, entfernt die helle Farbe im linken Bild sämtliche Blautöne aus der endgültigen Ausgabe. Eine begrenzte endgültige Farbpalette in der Szene als Basis zu haben, ist keine gute Idee, insbesondere wenn Sie später eine Farbkorrektur durchführen möchten.

Emittierende Oberflächen
In Unity können emittierende Oberflächen zur Beleuchtung beitragen, wenn Realtime GI oder Baked GI aktiviert ist, wodurch der Effekt einer Flächenbeleuchtung entsteht. Dies ist besonders nützlich, wenn Echtzeit-GI aktiviert ist. Inhaltsersteller können die Intensität und Farbe der Emissionsoberfläche ändern und erhalten sofort Feedback, vorausgesetzt, dass die Vorberechnung im Voraus durchgeführt wurde.

Bild

Das Bild oben zeigt die subtile diffuse Beleuchtung durch Netze an der Decke.

Beispielprojektdatei

Das Spotlight-Team von Unity San Francisco hat die Spotlight-Tunnel-Beispielszene erstellt, um Inhaltserstellern praktisches Lernen und Experimentieren zu ermöglichen.

Bild

Holen Sie sich hierdie Beispielprojektdatei für Spotlight Tunnel.

Extrahieren Sie das Projekt einfach in den Ordner und öffnen Sie es mit Unity.

Das Spotlight Tunnel-Projekt wurde mit Unity 2017.1.0f3 erstellt.

Das Öffnen dieses Projekts in einer neueren Version von Unity erfordert eine Neukonstruktion der Beleuchtung, da zwischen den Versionen möglicherweise Inkompatibilitäten im Datenformat der Beleuchtung bestehen.

Alle in diesem Projekt bereitgestellten Assets dürfen nur in einem mit der Unity Engine entwickelten Projekt verwendet werden.

Wie bereits erwähnt, gibt es noch weitere Dinge, die Sie bei der Erstellung glaubwürdiger visueller Elemente beachten müssen. In diesem Tutorialerfahren Sie mehr zu diesem Thema. Wir werden den Unity-Dokumentenaußerdem einen umfassenden Leitfaden mit bewährten Methoden hinzufügen. Bleiben Sie dran!

Jetzt sind Sie an der Reihe, die Grenzen zu überschreiten.
Bild

Hoffentlich hilft dieser Blog den Inhaltserstellern dabei, auf dem richtigen Weg zu bleiben und glaubwürdige visuelle Effekte in Unity zu erzielen. Wir können es kaum erwarten, von allen Unity-Content-Erstellern da draußen begeistert zu werden.