
Dies ist der zweite in einer Reihe von Artikeln, in denen Optimierungstipps für Ihre Unity Projekte vorgestellt werden. Verwenden Sie sie als Leitfaden für die Ausführung mit höheren Bildraten mit weniger Ressourcen. Sobald Sie diese Best Practices ausprobiert haben, sollten Sie sich unbedingt die anderen Seiten der Serie ansehen:
Sehen Sie sich unsere neuesten Optimierungsleitfäden für Unity 6-Entwickler und Grafiker an:
Mit den Grafiktools von Unity können Sie optimierte Grafiken in jedem Stil und auf einer Vielzahl von Plattformen erstellen – von Mobilgeräten bis hin zu High-End-Konsolen und Desktop-PCs. Dieser Prozess hängt in der Regel von Ihrer künstlerischen Leitung und Rendering-Pipeline ab. Bevor Sie also beginnen, empfehlen wir Ihnen, die verfügbaren Render-Pipelines zu prüfen.
Die Optimierung der Szenenbeleuchtung ist keine exakte Wissenschaft, sondern eher ein iterativer Prozess. Es handelt sich dabei um Versuch und Irrtum und der Prozess hängt in der Regel von der künstlerischen Leitung und der Rendering-Pipeline ab.
Bevor Sie mit der Beleuchtung Ihrer Szenen beginnen, müssen Sie eine der verfügbaren Rendering-Pipelines auswählen. Eine Rendering-Pipeline führt eine Reihe von Operationen aus, bei denen der Inhalt einer Szene auf dem Bildschirm angezeigt wird.
Unity bietet drei vorgefertigte Rendering-Pipelines mit unterschiedlichen Funktionen undLeistungsmerkmalen. Sie können aber auch Ihre eigene erstellen.
1. Die Universal Render Pipeline (URP) ist eine vorgefertigte Scriptable Render Pipeline (SRP). URP bietet grafikerfreundliche Workflows zur Erstellung optimierter Grafiken für eine Reihe von Plattformen, von Mobilgeräten bis hin zu High-End-Konsolen und PCs. URP ist der Nachfolger der integrierten Rendering-Pipeline, die Grafik- und Rendering-Funktionen bietet, die mit der älteren Pipeline nicht verfügbar sind. Um die Leistung aufrechtzuerhalten, werden Kompromisse eingegangen, um die Rechenkosten für Beleuchtung und Verschattung zu reduzieren. Wählen Sie URP, wenn Sie die meisten Zielplattformen wie Mobilgeräte und VR erreichen möchten.
Einen vollständigen Überblick über die Funktionen von URP erhalten Sie im E-Book Einführung in die Universal Render Pipeline für fortgeschrittene Unity Entwickler (Ausgabe Unity 6).
2. Bei der High Definition Render Pipeline (HDRP) handelt es sich um eine weitere vorgefertigte SRP für modernste, naturgetreue Grafik. HDRP ist für leistungsfähige Hardware wie PC, Xbox und PlayStation konzipiert. Es ist die empfohlene Rendering-Pipeline für die Erstellung fotorealistisch realistischer Grafiken mit dem höchsten Grad an Realismus in Ihrem Spiel, mit fortschrittlicher Beleuchtung, Reflexionen und Schatten. HDRP verwendet physikalisch basierte Beleuchtung und Materialien und unterstützt verbesserte Debugging-Tools.
Erhalten Sie einen vollständigen Überblick über die Funktionen der HDRP im E-Book Beleuchtung und Umgebungen in der High Definition Render Pipeline.
3. Bei der eingebauten Rendering-Pipelinehandelt es sich um die ältere, allgemein nutzbare Rendering-Pipeline von Unity mit begrenzter Anpassung. Diese Pipeline wird während des gesamten Unity 6.x-Zyklus weiterhin unterstützt.

Beim Forward-Rendering projiziert die Grafikkarte die Geometrie und teilt sie in Eckpunkte auf. Diese Eckpunkte werden weiter in Fragmente oder Pixel unterteilt, die auf den Bildschirm rendern, um das endgültige Bild zu erstellen.
Die Pipeline übergibt jedes Objekt einzeln an die GrafikAPI. Das Forward-Rendering ist mit Kosten für jedes Licht verbunden. Je mehr Lichter in Ihrer Szene vorhanden sind, desto länger dauert das Rendering.
Der Forward-Renderer der integrierten Pipeline zeichnet jedes Licht in einem separaten Durchgang pro Objekt. Wenn mehrere Lichter auf ein und dasselbe GameObject treffen, kann dies zu einem erheblichen Overdraw führen, bei dem überlappende Bereiche denselben Pixel mehr als einmal zeichnen müssen. Minimieren Sie die Anzahl der Echtzeitbeleuchtung, um den Overdraw zu reduzieren.
Anstatt einen Durchgang pro Licht zu rendern, kulliert die URP die Lichter pro Objekt. Dadurch kann die Beleuchtung in einem einzigen Durchgang berechnet werden, was zu weniger Draw Calls im Vergleich zum Forward Renderer der integrierten Render Pipeline führt.
Weiter +
Das Forward+-Rendering verbessert das Standard-Forward-Rendering, indem Lichter räumlich anstatt pro Objekt kultiviert werden. Dies erhöht die Gesamtzahl der Lichter, die für das Rendering eines Frames verwendet werden können. Im Deferred Rendering unterstützt es die native RenderPass API, sodass G-Puffer- und Beleuchtungsdurchläufe in einem einzigen Renderdurchlauf kombiniert werden können.

Bei verzögerter Beschattung wird die Beleuchtung nicht pro Objekt berechnet.
Deferred Shading verschiebt stattdessen die Beleuchtungsberechnung – auf einen späteren Zeitpunkt. Deferred Shading verwendet zwei Durchläufe.
Im ersten Durchgang bzw. G-Puffer-Geometriedurchlauf rendert Unity die GameObjects. Dieser Durchgang ruft verschiedene Arten von geometrischen Eigenschaften ab und speichert sie in einem Satz von Texturen. G-Puffer-Texturen können umfassen:
Im zweiten Durchgang bzw. Beleuchtungsdurchlauf rendert Unity die Beleuchtung der Szene auf Basis des G-Puffers. Stellen Sie sich vor, Sie iterieren über jedes Pixel und berechnen die Beleuchtungsinformationen auf Basis des Puffers anstelle der einzelnen Objekte. Das Hinzufügen von mehr Nicht-Schattenwurflichtern bei verzögerter Verschattung führt also nicht zu demselben Leistungstreffer wie beim Forward-Rendering.
Obwohl die Wahl eines Rendering-Pfades nicht per se eine Optimierung ist, kann sich dies darauf auswirken, wie Sie Ihr Projekt optimieren. Die anderen Techniken und Workflows in diesem Abschnitt können je nach Rendering-Pipeline und gewähltem Rendering-Pfad variieren.

Sowohl HDRP als auch URP unterstützen Shader Graph, eine visuelle Schnittstelle zur Shader-Erstellung. Dadurch können einige Benutzer komplexe Shading-Effekte erzeugen, die zuvor möglicherweise unerreichbar waren. Verwenden Sie die über 150 Knoten im Visual-Graph-System, um weitere Shader zu erstellen. Sie können mit der API auch Ihre eigenen Nodes erstellen.
Beginnen Sie jeden Shader Graph mit einem kompatiblen Master-Node, der die Ausgabe des Graphs bestimmt. Fügen Sie Knoten und Operatoren mit der visuellen Oberfläche hinzu und konstruieren Sie die Shader-Logik.
Dieser Shader Graph gelangt dann in das Backend der Rendering-Pipeline. Das Endergebnis ist ein ShaderLab-Shader, der funktionell einem in HLSL oder Cg geschriebenen Shader ähnelt.
Die Optimierung eines Shader Graphs folgt vielen der gleichen Regeln wie herkömmliche HLSL/Cg-Shader. Je mehr Verarbeitung Ihr Shader Graph durchführt, desto mehr beeinträchtigt dies die Leistung Ihrer Anwendung.
Wenn Sie CPU-gebunden sind, verbessert die Optimierung Ihrer Shader nicht die Framerate, sondern kann dennoch die Akkulaufzeit für mobile Plattformen verbessern.
Wenn Sie GPU-gebunden sind, befolgen Sie diese Richtlinien zur Verbesserung der Leistung mit Shader Graphs:
- Dezimieren Sie Ihre Nodes: Entfernen Sie ungenutzte Nodes. Ändern Sie keine Standardwerte oder verbinden Sie keine Knoten, es sei denn, diese Änderungen sind notwendig. Shader Graph stellt ungenutzte Funktionen automatisch zusammen. Wenn möglich, können Sie Werte in Texturen umwandeln. Anstatt beispielsweise einen Node zum Aufhellen einer Textur zu verwenden, wenden Sie die zusätzliche Helligkeit auf das Textur-Asset selbst an.
- Verwenden Sie ein kleineres Datenformat: Wechseln Sie nach Möglichkeit zu einer kleineren Datenstruktur. Ziehen Sie in Betracht, Vector2 anstelle von Vector3 zu verwenden, wenn sich dies nicht auf Ihr Projekt auswirkt. Sie können die Präzision auch reduzieren, wenn es die Situation zulässt (z. B. Half statt float).
- Reduzierung der mathematischen Operationen: Shader-Operationen laufen mehrmals pro Sekunde, optimieren Sie also nach Möglichkeit alle mathematischen Operatoren. Versuchen Sie, Ergebnisse zu mischen, anstatt einen logischen Branch zu erstellen. Verwenden Sie Konstanten und kombinieren Sie Skalarwerte, bevor Sie Vektoren anwenden. Konvertieren Sie schließlich alle Eigenschaften, die nicht im Inspector erscheinen müssen, in Inline-Nodes. All diese schrittweisen Beschleunigungen können Ihrem Frame-Budget helfen.
- Branch eine Vorschau: Je größer Ihr Graph wird, desto langsamer kann es beim Kompilieren werden. Vereinfachen Sie Ihren Workflow mit einem separaten, kleineren Branch, der nur die Vorgänge enthält, die Sie sich gerade ansehen möchten, und iterieren Sie dann schneller mit diesem kleineren Branch, bis Sie die gewünschten Ergebnisse erzielen.
Wenn der Branch nicht mit dem Master-Node verbunden ist, können Sie den Vorschau-Branch sicher in Ihrer Grafik lassen. Unity entfernt Knoten, die sich während der Kompilierung nicht auf die Endausgabe auswirken.
- Manuelles Optimieren: Selbst als erfahrener Grafikprogrammierer können Sie einen Shader Graph verwenden, um Standardcode für einen skriptbasierten Shader festzulegen. Wählen Sie das Asset Shader Graph und dann im Kontextmenü Shader kopieren aus.
Erstellen Sie einen neuen HLSL/Cg Shader und fügen Sie dann den kopierten Shader Graph ein. Dies ist ein Einbahnstraßenbetrieb, aber er ermöglicht es Ihnen, zusätzliche Leistung mit manuellen Optimierungen zu erreichen.

Entfernen Sie alle Shader, die Sie nicht verwenden, aus der Liste der immer enthaltenen Shader in den Grafikeinstellungen (Bearbeiten > Projekteinstellungen > Grafik). Fügen Sie hier Shader hinzu, die Sie für die gesamte Lebensdauer der Anwendung benötigen.

Shader-Varianten können für plattformspezifische Funktionen nützlich sein, erhöhen aber die Build-Zeit und Dateigröße.
Sie können die Shader-Kompilierungspragmarichtlinien verwenden, um den Shader für Zielplattformen unterschiedlich zu kompilieren. Verwenden Sie dann ein Shader-Keyword (oder Shader Graph Keyword Node), um Shader-Varianten mit aktivierten oder deaktivierten Funktionen zu erstellen.
Sie können verhindern, dass Shader-Varianten in Ihren Build aufgenommen werden, wenn Sie wissen, dass sie nicht erforderlich sind.
Parsen Sie das Editor.log nach Shader-Timing und Größe. Suchen Sie die Zeilen, die mit „Compiled Shader“ und „Compressed Shader“ beginnen. In einem Beispielprotokoll zeigt Ihnen Ihr TEST-Shader möglicherweise Folgendes an:
Kompilierter Shader 'TEST Standard (Specular setup)' in 31.23s
d3d9 (interne Programme insgesamt: 482, unique: 474)
d3d11 (interne Programme insgesamt: 482, unique: 466)
Metall (interne Programme insgesamt: 482, unique: 480)
glcore (interne Programme insgesamt: 482, unique: 454)
Komprimierter Shader „TEST Standard (Specular Setup)“ auf d3d9 von 1,04 MB auf 0,14 MB
Komprimierter Shader „TEST Standard (Specular Setup)“ auf d3d11 von 1,39 MB auf 0,12 MB
Komprimierter Shader „TEST Standard (Specular setup)“ auf Metall von 2,56 MB bis 0,20 MB
Komprimierter Shader „TEST Standard (Specular Setup)“ auf Glcore von 2,04 MB auf 0,15 MB
Dies sagt Ihnen einiges über diesen Shader:
- Der Shader erweitert sich dank #pragma multi_compile und Shader_feature auf 482 Varianten.
- Unity komprimiert den in den Spieldaten enthaltenen Shader in etwa auf die Summe der komprimierten Größen: 0,14 + 0,12 + 0,20 + 0,15 = 0,61 MB.
- Während der Laufzeit speichert Unity die komprimierten Daten (0,61 MB), während die Daten für Ihre aktuell verwendete Grafik-API unkomprimiert sind. Wenn Ihre aktuelle API beispielsweise Metal wäre, würde das 2,56 MB ausmachen.
Nach einem Build kann der Projektauditor das Editor.log analysieren, um eine Liste aller Shader, Shader-Keywords und Shader-Varianten anzuzeigen, die zu einem Projekt kompiliert wurden. Es kann auch das Player.log analysieren, nachdem das Spiel ausgeführt wurde. Dies zeigt Ihnen, welche Varianten die Anwendung tatsächlich kompiliert und zur Laufzeit verwendet hat.
Nutzen Sie diese Informationen, um ein skriptfähiges Shader-Stripping-System zu erstellen und die Anzahl der Varianten zu reduzieren. Dies kann Build-Zeiten, Build-Größen und Laufzeitspeichernutzung verbessern.
Lesen Sie den Blog-Eintrag „Stripping scriptable Shader variants“, um diesen Prozess im Detail zu sehen.
Anti-Aliasing hilft, das Bild zu glätten, gezackte Kanten zu reduzieren und spiegelndes Aliasing zu minimieren.
Wenn Sie Forward-Rendering mit der integrierten Rendering-Pipeline verwenden, ist Multisample Anti-Aliasing (MSAA) in den Qualitätseinstellungen verfügbar. MSAA produziert hochwertiges Anti-Aliasing, kann aber teuer sein. Die MSAA Sample Count aus dem Dropdown-Menü (None, 2X, 4X, 8X) legt fest, wie viele Samples der Renderer zur Bewertung des Effekts verwendet.
Wenn Sie Forward-Rendering mit der URP oder HDRP verwenden, können Sie MSAA für das Render Pipeline Asset aktivieren.
Alternativ können Sie Anti-Aliasing als Nachbearbeitungseffekt hinzufügen. Dies wird auf der Kamerakomponente unter Anti-Aliasing angezeigt:
- Schnelles approximatives Anti-Aliasing (FXAA) glättet Kanten auf Pixelebene. Dies ist der am wenigsten ressourcenintensive Anti-Aliasing-Effekt und verwischt das endgültige Bild leicht.
- Subpixel morphological Anti-Aliasing (SMAA) mischt Pixel basierend auf den Rändern eines Bildes. Dies hat deutlich schärfere Ergebnisse als FXAA und eignet sich für flache, cartoonähnliche oder saubere Grafikstile.
In der HDRP können Sie auch FXAA und SMAA mit der Post-Anti-Aliasing-Einstellung an der Kamera verwenden. URP und HDRP bieten auch eine zusätzliche Option:
- Temporales Anti-Aliasing (TAA) glättet Kanten mit Frames aus dem Verlaufspuffer. Dies funktioniert effektiver als FXAA, erfordert aber Bewegungsvektoren, um zu funktionieren. TAA kann auch die Umgebungsokklusion und die Volumetrie verbessern. Es ist in der Regel hochwertiger als FXAA, kostet jedoch mehr Ressourcen und kann gelegentlich Ghosting-Artefakte erzeugen.

Spatial-Temporal Post-Processing (STP) wurde entwickelt, um die visuelle Qualität auf einer Vielzahl von Plattformen wie Mobilgeräten, Konsolen und PCs zu verbessern. STP ist ein räumlich-zeitlicher Anti-Aliasing-Upscaler, der sowohl mit HDRP als auch mit URP Render Pipelines funktioniert und eine hochwertige Inhaltsskalierung bietet, ohne dass Änderungen an bestehenden Inhalten vorgenommen werden müssen. Diese Lösung ist speziell für die GPU-Leistung optimiert, sorgt für schnellere Renderzeiten und erleichtert die Erzielung einer hohen Leistung bei gleichbleibender visueller Qualität.
So aktivieren Sie STP in der URP:
- Wählen Sie das aktive URP-Asset im Projektfenster aus.
- Navigieren Sie im Inspector zu Qualität > Upscaling Filter und wählen Sie Räumlich-Temporäre Nachbearbeitung aus.

Die schnellste Option zum Erstellen von Beleuchtung ist eine, die nicht pro Frame berechnet werden muss. Verwenden Sie dazu Lightmapping, um statische Beleuchtung nur einmal zu backen, anstatt sie in Echtzeit zu berechnen.
Fügen Sie Ihrer statischen Geometrie mit Global Illumination (GI) eine dramatische Beleuchtung hinzu. Markieren Sie Objekte mit Contribute GI, damit Sie hochwertige Beleuchtung in Form von Lightmaps speichern können.
Der Prozess der Generierung einer Lightmap-Umgebung dauert länger, als nur eine Beleuchtung in Unity in der Szene zu platzieren, aber dies:
- Läuft schneller, 2- bis 3-mal schneller für 2-pro-Pixel-Beleuchtung
- Sieht besser aus – GI kann eine realistisch wirkende direkte und indirekte Beleuchtung berechnen. Der Lightmapper glättet und entrauscht die resultierende Karte.
Baked Shadows und Beleuchtung können dann ohne den gleichen Leistungshit wie Echtzeitbeleuchtung und Schatten rendern.
Komplexe Szenen können lange Baking-Zeiten erfordern. Wenn Ihre Hardware den Progressive GPU Lightmapper unterstützt, kann diese Option Ihre Lightmap-Erstellung erheblich beschleunigen, in einigen Fällen sogar um das Zehnfache.
Folgen Sie dieser Anleitung, um mit Lightmapping in Unity zu beginnen.

Eine Reflection Probe-Komponente kann realistische Reflexionen erzeugen, was jedoch sehr stapelweise teuer sein kann. Verwenden Sie niedrig aufgelöste Cubemaps, Culling-Masken und Texturkompression, um die Laufzeitleistung zu verbessern. Typ verwenden: Baking, um Updates pro Frame zu vermeiden.
Bei Verwendung von Typ: Echtzeit ist in URP erforderlich, vermeiden Sie nach Möglichkeit jeden Frame. Passen Sie den Aktualisierungsmodus und die Time Slicing-Einstellungen an, um die Aktualisierungsrate zu reduzieren. Sie können die Aktualisierung auch mit der Via Scripting-Option steuern und den Probe aus einem benutzerdefinierten Skript gerendert werden.
Bei Verwendung von Typ: Echtzeit ist in HDRP erforderlich, verwenden Sie den On-Demand-Modus. Sie können die Frame-Einstellungen auch unter Projekteinstellungen > HDRP Standardeinstellungen ändern. Reduzieren Sie die Qualität und Funktionen unter Realtime Reflection für eine verbesserte Leistung.
Reduzieren Sie die Qualität und Funktionen unter Real-Time Reflection für eine verbesserte Leistung.

Unity 6 führt Adaptive Probe Volumes (APVs) ein, die eine ausgeklügelte Lösung für die globale Beleuchtung in Unity bieten und eine dynamische und effiziente Beleuchtung in komplexen Szenen ermöglichen. APVs können sowohl die Leistung als auch die visuelle Qualität optimieren, insbesondere auf mobilen und weniger leistungsstarken Geräten, und bieten gleichzeitig erweiterte Funktionen für High-End-Plattformen.
APVs bieten eine Reihe von Funktionen zur Verbesserung der globalen Beleuchtung, insbesondere in dynamischen und großen Szenen. URP unterstützt jetzt Pro-Vertex-Sampling für eine verbesserte Leistung auf weniger leistungsstarken Geräten, während VFX-Partikel von einer in Probe-Volumes integrierten indirekten Beleuchtung profitieren.
APV-Daten können von Festplatte zu CPU und GPU gestreamt werden, um Beleuchtungsinformationen für große Umgebungen zu optimieren. Entwickler können mehrere Beleuchtungsszenarien backen und kombinieren, um Echtzeitübergänge wie Tag-Nacht-Zyklen zu ermöglichen. Das System unterstützt auch Himmelsokklusion, integriert sich in die Ray Intersector API für effizientere Sondenberechnungen und bietet Kontrolle über die Probedichte von Light Probes, um Lichtlecks zu reduzieren und Iterationen zu beschleunigen. Die neue C#-Baking API ermöglicht auch das unabhängige Baking von APV aus Lightmaps oder Reflexionssonden.
Sehen Sie sich den Vortrag Effiziente und wirkungsvolle Beleuchtung mit Adaptive Probe Volumes von der GDC 2023 an, um erste Schritte mit APVs zu machen.

Schattenwurf kann pro MeshRenderer und Beleuchtung deaktiviert werden. Deaktivieren Sie nach Möglichkeit Schatten, um Draw Calls zu reduzieren.
Sie können auch gefälschte Schatten mit einer unscharfen Textur erstellen, die auf ein einfaches Mesh oder Quad unter Ihren Charakteren angewendet wird. Andernfalls können Sie Blob-Schatten mit benutzerdefinierten Shadern erstellen.
Vermeiden Sie es insbesondere, Schatten für Punktlichter zu aktivieren. Jedes Punktlicht mit Schatten erfordert sechs Shadow-Map-Durchläufe pro Licht – vergleichen Sie dies mit einem einzelnen Shadow-Map-Durchlauf für ein Spotlight. Erwägen Sie, Punktlichter durch Spotlights zu ersetzen, bei denen dynamische Schatten absolut notwendig sind. Wenn Sie dynamische Schatten vermeiden können, verwenden Sie stattdessen einen Cubemap als Light.cookie mit Ihren Punktlichtern.

In manchen Fällen können Sie einfache Tricks anwenden, anstatt mehrere zusätzliche Lichter hinzuzufügen. Verwenden Sie beispielsweise anstelle eines Lichts, das direkt in die Kamera scheint, einen Shader, der die Felgenbeleuchtung simuliert (eine Implementierung in HLSL finden Sie in Surface Shader-Beispielen).
Bei komplexen Szenen mit vielen Lichtern trennen Sie Ihre Objekte mit Ebenen und beschränken dann den Einfluss jedes Lichts auf eine bestimmte Culling Mask.

Der GPU Lightmapper ist in Unity 6 produktionsreif. Es beschleunigt die Generierung von Beleuchtungsdaten durch Nutzung der GPU erheblich und bietet im Vergleich zu herkömmlichem CPU-Lightmapping deutlich schnellere Baking-Zeiten. Es führt ein neues Light-Baking-Backend ein, das die Codebasis vereinfacht und vorhersehbarere Ergebnisse liefert. Darüber hinaus wurde die Mindest-GPU-Anforderung auf 2 GB gesenkt und enthält auch eine neue API zum Verschieben von Light Probe-Positionen während der Laufzeit, die neben verschiedenen Verbesserungen der Lebensqualität besonders nützlich für prozedural generierte Inhalte ist.


Im Hub für Best Practices von Unity finden Sie viele weitere Best Practices und Tipps für fortgeschrittene Unity Entwickler. Wählen Sie aus über 30 Leitfäden aus, die von Branchenexperten, Unity Entwicklern und Technical Artists erstellt wurden und Ihnen helfen, mit den Toolsets und Systemen von Unity effizient zu entwickeln.