Raytracing in Spielen V: Neues aus der Strahlenwelt

 3/5
Daniel Pohl
88 Kommentare

Post-Processing Special Effects

Mit dem Schritt von einer auf acht Karten in einer einzelnen Maschine konnten wir nun ein High(est)-End Gaming-Szenario ermöglichen. Die Auflösung wurde von 720p auf 1080p erhöht. Zusätzlich ermöglichte uns die geballte Rechen-Power Post-Processing-Effekte und eine clevere Art des Anti-Aliasings.

Ben Segovia, Forscher bei Intel Labs, hat Post-Processing-Effekte in Wolfenstein: Ray Traced integriert. Zur Klarstellung: Diese sind nicht „ray-tracing spezifisch“ und wurden auch schon in anderen Spielen verwendet. Die Effekte arbeiten auf den Pixeln des gerenderten Bildes, nicht direkt auf der 3D-Szene. In unserem Fall laufen alle Berechnungen direkt und damit sehr effizient auf den „Knights Ferry“-Karten. Die Effekte können die Qualität der gerenderten Szene dramatisch beeinflussen.

Tiefenunschärfe

Der Effekt ist sicherlich jedem Fotograf bekannt. Möchte man den Betrachter auf einen gewissen Bereich eines Bildes fokussieren lassen, dann kann man die weniger wichtigen Teile des Bildes absichtlich unscharf machen. Das wichtige Objekt bleibt scharf und zieht damit die Aufmerksamkeit auf sich.

Ohne Tiefenunschärfe
Ohne Tiefenunschärfe
Und mit
Und mit

Mit Tiefenunschärfe sank die Leistung um drei Prozent gegenüber der Darstellung ohne diesen Effekt.

HDR-Effekte

Geht man in der realen Welt von einem dunklen Raum in einen von der Sonne bestrahlten Außenbereich, so dauert es einige Sekunden, bis sich das menschliche Auge an die Helligkeit angepasst hat. Den Effekt kann man auch mit (digitalen) Videokameras beobachten, die das Helligkeitssprektrum über einen gewissen Zeitraum an ein angenehm anzusehendes Bild anpassen. Mit Hilfe von „High Dynamic Range“ (HDR) haben wir diese Effekt in unsere Version von Wolfenstein mit einfließen lassen.

HDR in Wolfenstein: Ray Traced
HDR in Wolfenstein: Ray Traced

Mit HDR sank die Leistung um zwei Prozent gegenüber der Darstellung ohne diesen Effekt.

Während dies bei Kameras passiert kann es zu einem sogenannten „Bloom“-Effekt kommen, der in andere Objekte hinein strahlt. Auch diesen Effekt haben wir nachgebildet.

„Bloom“-Effekt
„Bloom“-Effekt

Lens Flare

Obwohl Kamerahersteller schwer daran arbeiten, mögliche Blendenflecke (Lens Flares) zu vermeiden, so werden diese oft in Computerspielen oder Filmen als künstlerisches Stilelement hinzugefügt. In unserer Implementierung werden verschiedene kleinere Versionen des Bildes in ein anderes Farbspektrum (z.B. Grün, Blau oder Orange) transferiert und dann wieder in das originale Bild hineingemischt.

Lens-Flare-Effekt
Lens-Flare-Effekt
Lens Flare Detail
Lens Flare Detail

Mit unserem Lens-Flare-Effekt sank die Leistung um lediglich 0,1 Prozent gegenüber der Darstellung ohne diesen Effekt.

Smart Anti-Aliasing

Eine weitere Neuigkeit, die wir im letzten Jahr hinzugefügt haben, ist ein „smarter Algorithmus“, um Anti-Aliasing bei Ray Tracing zu ermöglichen – entwickelt von Ingo Wald und Ben Segovia. Grundsätzlich gibt es viele verschiedene Möglichkeiten, wie man Anti-Aliasing durchführen kann. Die meisten Ansätze verfolgen dabei eine „brute-force“-Methode, womit auch Berechnungen in Bereichen vollzogen werden, wo sie jedoch nicht bemerkbar wären.

Unsere Implementierung wird nach der Berechnung des Bildes vorgenommen. Nachdem man beim Ray Tracing die Möglichkeit hat, hocheffizient ein paar einzelne Strahlen zur Verfeinerung zu schießen, analysieren wir jeden Pixel bezüglich zwei Faktoren und entscheiden dann, ob dieser Anti-Aliasing benötigt:

  • Die Mesh-ID des Objekts, das getroffen wurde
  • Die Ausrichtung des Polygons, das getroffen wurde

Im Detail: In Spielen ist die Geometrie normalerweise in verschiedenen „Meshes“ angeordnet. Gelegentlich unterscheiden sich diese durch einen zugewiesenen Shader oder allgemeiner durch das Objekt an sich. So könnte es beispielsweise ein Mesh für eine Säule, eines für einen Zaun, eines für einen Baum und so weiter geben. In unserem Ray Tracer bekommt jedes Mesh eine eigene ID zugewiesen. Zur Veranschaulichung haben wir diese IDs in dem folgenden Bild farbkodiert.

Farbkodierte Ansicht der Mesh IDs
Farbkodierte Ansicht der Mesh IDs
Farbkodierte Normalen
Farbkodierte Normalen

Das zweite Kriterium ist wie erwähnt die Ausrichtung des Polygons, das getroffen wurde. Diese wird durch die sogenannte Normale gegeben. Farbkodiert im Rot, Grün- und Blaukanal sieht das dann so aus:

Der Algorithmus funktioniert nun so, dass er von dem zu betrachtendem Pixel aus die Nachbarpixel ansieht. Gibt es einen größeren Unterschied in der Normale (z.B. wenn man von einem nach vorne gerichteten Dach zu einem nach links gerichteten Dach übergeht), oder wurde eine andere Mesh ID gefunden, so werden 16 weitere Strahlen („Supersampling“) für diesen einen Pixel geschossen und die daraus resultierenden Farbwerte werden gemittelt.

Smart Anti-Aliasing an
Smart Anti-Aliasing an
Smart Anti-Aliasing aus
Smart Anti-Aliasing aus
„An“ im Details
„An“ im Details
„Aus“ im Detail
„Aus“ im Detail

Mit Anti-Aliasing sank die Leistung in dieser Ansicht um 59 Prozent gegenüber der Darstellung ohne diesen Effekt.

Smart Anti-Aliasing aus
Smart Anti-Aliasing aus
Smart Anti-Aliasing an
Smart Anti-Aliasing an
„Aus“ im Detail
„Aus“ im Detail
„An“ im Details
„An“ im Details

Mit Anti-Aliasing sank die Leistung in dieser Ansicht um 32 Prozent gegenüber der Darstellung ohne diesen Effekt.

Für zukünftige Implementierungen könnte man sich auch überlegen, die Farbe des zu analysierenden Pixels mit zu berücksichtigen. Ist dieser beispielsweise wegen mangelnder Beleuchtung nahezu schwarz, so ist dort Aliasing weniger bemerkbar. Auch der Farbunterschied zwischen zwei Pixeln (z.B. von sehr hell auf sehr dunkel) könnte als Kriterium berücksichtigt werden. Bevor man diesen Farbvergleich angehen würde, könnte man auch erst bildbasierte Anti-Aliasing-Techniken wie MLAA, ursprünglich erforscht von Alexander Reshetov (Intel Labs) in 2009, benutzen. Danach müsste man weniger Pixel durch das Schießen zusätzlicher Strahlen verfeinern. Des Weiteren könnte man ggf. einen besseren Trade-off zwischen Geschwindigkeit und Qualität bekommen, wenn man mit 4 oder 8 statt 16 Strahlen zur Verfeinerung experimentiert. Und, und, und...