Raytracing in Unity

Raytracing ist eine Form für die Berechnung von Informationen für das Beleuchtungsmodell. Es werden einzelne Strahlen (Rays) auf Basis des Sichtfeldes abgefeuert und die virtuelle Welt mit den unterschiedlichen Objekten gibt Informationen für Licht, Schatten und Reflektionen zurück.

Dieser Prozess ist aber mit zusätzlicher Rechenpower verbunden. Somit können derzeit nur bestimmte Grafikkarten dies bewältigen und einige Funktionen sind in 3D-Echtzeit-Engines noch in der Entwicklung. In diesem Artikel erhältst du alles was du über Ray Tracing in Unity wissen musst und wie du die ersten Effekte selbst anwenden kannst.

Voraussetzungen

Damit du überhaupt Ray Tracing in Unity verwenden kannst, musst dein System bestimmten Anforderungen entsprechen. Dazu zählen Grafikkarten von NVIDIA Geforce RTX2060 – TITAN RTX und RTX 3060 – 3090, sowohl Quadro ab RTX 4000.

Wenn dein System nicht diese Voraussetzungen hat, dann macht es eigentlich wenig Sinn, dass du Ray Tracing in Unity testest, denn du wirst auf viele Probleme stoßen.

Weitere Information zu den Voraussetzungen erhältst du in der Unity Dokumentation.

Ray Tracing Projekt einrichten

Erstelle dir ein neues Unity Projekt auf Basis des HDRP Templates oder öffne ein bestehendes Projekt. Beachte aber, dass du die HDRP aktiviert haben musst, um überhaupt Raytracing in Unity verwenden kannst.

Öffne die Project Settings über Edit > Project Settings > Quality und füge ein neues Quality Level hinzu (2). Ändere den Namen z.B. auf Raytracing. dupliziere das HighQuality Profil und benenne es um in HDRPRTXQuality. Abschließend verlinkst du dieses neue Profil mit dem Rendering in den Qualitätseinstellungen.

Project für Raytracing einrichten

Du kannst die Einstellungen jetzt wieder schließen und das Profil im Project Window selektieren. Im Inspektor erhältst du alle Infos zum Profil. Öffne die Rendering Sektion und aktiviere die Einstellung „Realtime Raytracing“.

RTX Profil erstellen und aktivieren

Öffne im nächsten Schritt den Render Pipeline Wizard unter Window > Render Pipeline > HD Render Pipeline Wizard. Klick auf den HDRP + DXR Tab. Hier siehst du das einige Funktionen noch nicht aktiviert sind, unter anderem auch DirectX12.

Render Pipeline Wizard – Fix all

Starte nach dem Fix den Unity Editor neu, damit auch alle Einstellung für dein Projekt geladen werden. Öffne den Render Pipeline Wizard erneut um zu überprüfen ob die Fehler behoben sind.

Um einzelne Raytracing Funktionen zu aktivieren öffne die Project Settings > Quality > HDRP und selektiere dein RTX Quality Profil. Direkt darunter kannst du jetzt die Einstellungen vornehmen und die folgenden Features aktivieren:

  • Screen Space Ambient Occlusion
  • Screen Space Global Illumination
  • Screen Space Reflection inkl. Transparent
  • Screen Space Shadows
HDRP Einstellungen vornehmen

Volumes

Um verschiedene Effekt in deinem Unity Projekt erzielen zu können, musst du zuerst die Verwendung von Volumes verstehen. Sie definieren durch einen BoxCollider einen Bereich der den entsprechenden Effekt dann anwendet. Es gibt zwei unterschiedliche Modi:

  • Global: Nicht in Abhängigkeit zur Kameraposition. Gut für Effekte die für das gesamte Setting gedacht sind
  • Local: Nur in gewissen Bereichen anwenden. Gilt sobald die Kamera sich in diesem begrenzten Bereich befindet. Eignet sich gut für Exposure, White Balance oder auch Fog.

Du kannst dir ein eigenes Volume erstellen, indem du auf deine Hierachie gehst und hier per Volume > Box Volume ein neues GameObject erstellst. Platziere dieses Objekt entsprechend und verändere die Größe des BoxColliders. Beim Mode des Volumes legst du den Local Mode fest und klickst bei Profile auf New, um dir ein neues Profil anzulegen. Das Profil speichert alle Infos zum überschreiben und kann jederzeit an anderen Stellen im Projekt wieder verwendet werden.

Klicke auf „Add Override“ um einen Effekt hinzuzufügen und wähle Post Processing > Color Adjustment. Drehe die Saturation nach unten um einen Unterschied zu erkennen.

Global Volume erstellen

Wenn du jetzt im Editor oder im Play Mode dich mit der Kamera im grünen Bereich deines Volumes befindest, dann wird der entsprechende Effekt angewendet.

Ray Traced Ambient Occlusion (RTAO)

In unserem Beispiel gibt es bereits ein globales Volumen. Selektiere dies in der Hierarchie und schau dir den Bereich „Ambient Occlusion“ genauer an. Hier ist Ray Tracing noch nicht aktiviert. Wähle die Checkboxen aus und die Darstellung aktualisiert sich.

Global Volume – Ray Tracing aktivieren

Damit du den Unterschied besser sehen kannst, ist es sinnvoll das Debug Fenster für die HDRP zu öffnen. Wähle aus dem Text-Menü > Window > Render Pipeline > Render Pipeline Debug. Selektiere in diesem Fenster > Lighting und lege bei Fullscreen Debug Mode den Wert ScreenSpaceAmbientOcculusion fest.

Debug Mode – Fullscren Screen Space Ambient Occlusion im Detail

Durch diese Einstellung kannst du jetzt RTAO an und aus mit einander vergleichen.

Ray Traced Ambient Occlusion deaktiviert

Ray Traced Ambient Occlusion aktiviert

Wenn du RTAO deaktivierst, dann wird die rastorisierte Ambient Occlusion verwendet. Diese Technik hat das Problem, dass nur die Information aus dem Depth Buffer gelesen werden kann. Sobald ein Objekt den Bereich der Kamera verlässt, so wird durch dieses Objekt kein Ambient Occlusion Information generiert. Der Ray Traced Mode kann über den Bildschirm hinaus Informationen erhalten, denn die Rays werden aus Kamerasicht abgefeuert und Objekt außerhalb des Bildschirm senden Informationen zurück.

Einstellungen für Ray Traced Ambient Occlusion
  • Intensity: Stärke des Effekts. Halte diesen Wert eher niedrig, da es sonst zu Artefakten kommen kann.
  • Layer Mask: Welche Objekte sollen überhaupt in die Berechnung von RTAO einbezogen werden
  • Max Ray Length: Wie lange die einzelnen Rays in Meter in deiner Scene abgefeuert werden sollen. Je länger die Rays, desto wahrscheinlich ist es dass der Ray eine Oberfläche trifft.
  • Sample Count: Kann verwendet werden um Noise zu reduzieren
  • Denoiser: Ohne Denoiser wirst du ein starkes Rauschen der Information sehen.

Ray Traced Reflections (RTR)

Damit du auch bei Spiegelungen auf Ray Tracing zurückgreifen kannst, selektierst du wieder dein global Volume und fügst als Override > Lighting > Screen Space Reflection hinzu.

Screen Space Reflection aktiviert

Screen Space Reflection (SSR) basiert auf den Informationen innerhalb des Bildbereichs. Wenn du die Kamera nach unten bewegst, dann gibt es einen Punkt an dem die Reflektion nicht mehr sichtbar ist und einfach ausgeblendet wird.

Problem von Screen Space Reflektion

Sobald das Objekt den Bereich komplett verlässt ist es auch nicht mehr sichtbar. Vergleichst du das mit der realen Welt, dann siehst du häufig Reflektionen von Objekten die nicht innerhalb deines Sichtbereichs sind, vor allem wenn es sich um nasse Oberflächen handelt.

Um Ray Traced Reflections zu aktivieren, setzen das Häkchen innerhalb von SSR – Ray Tracing.

Ray Traced Reflections aktiviert

Vergleichst du den gleichen Bildausschnitt miteinander, dann stellst du schnell fest, bei RTR werden auch Objekte außerhalb des Sichtbereichs exakt dargestellt.

Ray Traced Global Illumination (RTGI)

Füge bei deinem globalen Volumen ein neues Override hinzu: Add Override > Lighting > Screen Space Global Illumination.

Ray Traced Shadows

Um Schatten mit Hilfe von Ray Tracing in deinem Projekt zu verbessern, musst du direkt in die Einstellungen der Lichtquelle. Wähle eine Lichtquelle aus und klicke auf den Bereich „Shadows“. Die Shadow Map muss aktiviert sein, da sonst überhaupt kein Schatten von dieser Lichtquelle aus erzeugt wird.

Ray Traced Shadows aktivieren

Falls du dich fragst ob man hier einen Unterschied sieht, dies kommt immer ganz auf dein Setup an. In unserem Beispiel merkt man diesen. Auf der linken Seite Shadow Maps und auf der rechten Seite RTX Shadows.

Darstellung mit Shadow Maps (ohne Ray Tracing Shadows)

Ray Traced Shadows aktiviert

Vor allem die Kombination aus mehreren Schatten funktioniert mit Ray Traced Shadows optimal und kann bei Shadow Maps zu komischen Ergebnissen führen.

Michael

Michael

Mein Name ist Michael. Ich bin IT-Trainer und Gründer der Lernplattform nobreakpoints. In unserem Blog bieten wir Tipps, Anleitungen und Beispiele für alle, die mit Hilfe von Unity Anwendungen erstellen möchten.