Raytracing in Spielen IV: Ray-Tracing in der Cloud

 5/8
Daniel Pohl
91 Kommentare

Wolfenstein: Ray Traced

Um die Vorteile der Benutzung eines Ray-Tracers für Spiele zu zeigen, wurden einige Bereiche des original Spieles für die Wolfenstein: Ray Traced Demo verändert. Wir möchten darauf hinweisen, dass in dieser Sektion einige Screenshots mit Supersampling erzeugt wurden. Konkrete Messungen der Performance ohne dieses Feature folgen in einer späteren Sektion.

Geometrie

Ray-Tracing-Engines benutzen normalerweise Beschleunigungsstrukturen, die eine Hierarchie über die Geometrie der Szene haben, die es ermöglicht, die Interaktionen mit Objekten effizienter zu handhaben. Das führt zu der hilfreichen Eigenschaft, dass für statischen Content die Berechnungen für einen Strahl nur logarithmisch mit der Anzahl der Dreiecke zunehmen. Daher ist es möglich, mehr geometrische Details bei einem nur geringem Einfluss auf die Performance zu benutzen.

Der komplette Wolfenstein-Level in dieser Demo bestand in der ursprünglichen Form aus etwa 300.000 Dreiecken. Um die Skalierbarkeit der Geometriedetails zu zeigen, wurden im Level zwei Objekte ausgetauscht. Das erste ist ein Kronleuchter-Modell, das nun allein aus ca. 1.000.000 Dreiecke besteht. Das zweite ist ein Auto mit allein ca. 300.000 Dreiecken.

Bildvergleich: Altes Kronleuchter-Modell Neues, hochdetailliertes Kronleuchter-Modell
Bildvergleich: Altes Kronleuchter-Modell Neues, hochdetailliertes Kronleuchter-Modell

Rendert man die Szenen mit den neunen Modellen im Dreieck-Debug-Shader, so stellt man fest, dass die Performance lediglich 15 bis 20 % geringer ist. Berücksichtigt man die Content-Generation-Pipeline, so bedeutet das, dass man die 3D-Modelle direkt aus der Modellierungssoftware übernehmen kann. Die Künstler müssten demnach nicht mehr krampfhaft jedes einzelne Dreieck wegoptimieren um anschließend mit Normal-Mapping die Geometrie wieder hineinzutäuschen, wie es bei der Rasterisierung der Fall ist.

Shading

Durch die Möglichkeit weitere Strahlen jederzeit „schießen“ zu können, ergeben sich interessante Shading-Effekte bei der Verwendung eines Ray-Tracers.

Ein Beispiel für die Benutzung von Spiegelungen befindet sich auf dem Auto-Modell. Indem wir das Material hochreflektierend (genau genommen sogar zu hoch, aber so eignet sich besser zum Demonstrieren des Effekts) gemacht haben, kann man die Umgebung darin gespiegelt sehen – alles akkurat und in Echtzeit berechnet.

Durch die Arbeitsweise des Ray-Tracers werden Spiegelungen besonders einfach. Genauso wie ein Ball beim Pool Billard an der Kante des Tisches abprallt, so wird auch der Strahl einfach an einer Oberfläche reflektiert.

Reflektionsresetz
Reflektionsresetz

Diese Methode, auf das Auto angewandt, sieht dann so aus:

RayTracing erlaubt komplexe Spiegelungen auf Oberflächen
RayTracing erlaubt komplexe Spiegelungen auf Oberflächen

Ein weiterer Ray-Tracing-Effekt ist die Darstellung eines akkuraten Glases mit korrekten physikalischen Eigenschaften unter Verwendung des Brechungsindex. Verglichen mit dem vorherigen Beispiel des Shaders am Auto erzeugt dieser gleich zwei Strahlen am Auftreffpunkt: Einen für die Spiegelung und einen für die Brechung.

Reflektionsresetz und Brechungsgesetz
Reflektionsresetz und Brechungsgesetz

Dieser Shader sieht auf dem Kronleuchter-Modell wie folgt aus:

Verzerrungen des Hintergrunds beim Blick durch das Glas.
Verzerrungen des Hintergrunds beim Blick durch das Glas.
Dreieck-Debug-Ansicht zeigt den hohen geometrischen Detailgrad des Kronleuchters
Dreieck-Debug-Ansicht zeigt den hohen geometrischen Detailgrad des Kronleuchters

Ein anderes Beispiel für den Einsatz von Spiegelungen sieht man auf dem Fernrohr des Scharfschützengewehrs, die hier damit sogar Einfluss auf das Gameplay haben kann. In nur ein paar Zeilen Shading-Code wurden die Eigenschaften der Linse auf reflektierend geändert. Der Spiele kann somit sehen, was hinter ihm passiert (eine Art Rückspiegel), und könnte dadurch herannahende Gegner schneller erkennen.

Spiegelndes Fernrohr gibt dem Spieler Informationen darüber, was hinter ihm passiert
Spiegelndes Fernrohr gibt dem Spieler Informationen darüber, was hinter ihm passiert

Ein weiterer interessanter Effekt, der mit Ray-Tracing realisiert werden kann, ist eine Überwachungsstation. Gelegentlich findet man so etwas Ähnliches bereits in Spielen, allerdings mit Einschränkungen. Man sieht nur jeweils einen Bildschirm, auch wenn gelegentlich noch ein Knopf daneben angebracht ist, mit dem man zwischen verschiedenen Kameraansichten wechseln kann. Das Neue ist hier die Möglichkeit, dass man viele Bildschirme mit verschiedenen Inhalten zur gleichen Zeit anzeigen kann und trotzdem noch eine gute Performance erreicht.

Überwachungsstation zeigt 12 verschiedene Teile des Levels.
Überwachungsstation zeigt 12 verschiedene Teile des Levels.
Auch Rekurionseffekte sind einfach möglich.
Auch Rekurionseffekte sind einfach möglich.

Wie das Ganze funktioniert, ist einfach erklärt. Für jeden Bildschirm sind genau ein Offset und eine Blickrichtung definiert. Trifft ein Strahl den Schirm, dann wird der Offset auf die Position des Auftreffpunkts addiert. Von dort wird ein Strahl in die vorher definierte Blickrichtung geschossen. Dieser trifft eine weitere Oberfläche, die eine Farbe zurückgibt. Der Effekt ist verwandt mit dem Kameraportalen (zuvor u.a. gezeigt im Quake Wars: Ray Traced Projekt), unterscheidet sich aber insofern, dass die Bildschirme das gleiche Bild anzeigen, unabhängig von der Blickrichtung, mit der der Spieler darauf schaut. Im Gegensatz dazu kann man bei den Portalen andere Informationen bekommen, wenn man z.B. seitlich anstatt frontal darauf blickt. Dies liegt daran, dass diese den einkommenden Winkel des auf dem Portal auftreffenden Strahls mit berücksichtigen und nicht wie beim Monitor eine feste Blickrichtung benutzen.