Raytracing in Spielen III: Quake Wars mit Raytracing

 4/5
Daniel Pohl
99 Kommentare

Mehr Special-Effects!

Als wir in unserer geraytracten Version schlussendlich die gleiche Qualität wie im original Spiel erreicht hatten, begannen wir damit, weitere Special-Effects zu implementieren.

Raytracing ist sehr gut bei Spiegelungen und Brechungen und diese beiden Eigenschaften findet man im Alltag am häufigsten in Glas und Wasser. Wir haben uns genau daran gemacht.

Glas

Im original Spiel gibt es einen großen, soliden Dom. Wir haben die Oberflächeneigenschaften des Doms abgeändert, damit er wie aus Glas gemacht aussieht. Dabei benutzten wir den Brechungsindex für Glas (den man aus seiner Lieblingsformelsammlung entnehmen kann) und schrieben einen Shader, der die Spiegelungen und Brechungen von Glas simuliert. Der Code dafür benötigt nur etwa 15 Zeilen in unserer eigens entwickelten, HLSL-ähnlichen „Raytracing Shading Language“ und erzeugt beeindruckende Ergebnisse.

Dom mit Glas-Shader.
Dom mit Glas-Shader.

Wasser

Das Rendern von Wasser kann auf viele verschiedene Arten realisiert werden. Wir haben zwei Ansätze verfolgt: Wasser auf einer 2D-Oberfläche und „echtes“ 3D-Wasser*. Für die 2D-Variante haben wir eine Bumpmap benutzt, um Wellenbewegung zu simulieren. Bei dem 3D-Wasser haben wir ein Netz aus etwa 100.000 Dreiecken, das in verschiedene Sub-Netze aufgeteilt ist, eingesetzt. Diese Sub-Netze werden, falls sie sichtbar sind und damit zur Szene beitragen, in jedem Frame aktualisiert. Der Test auf Sichtbarkeit wird wiederum auch über das Schießen von einzelnen Strahlen realisiert.

Wasser mit einer 2D-Oberfläche und einer Bumpmap
Wasser mit einer 2D-Oberfläche und einer Bumpmap
Wasser mit einer echten 3D-Oberfläche bei niedrigem Wellengang (einstellbar per Parameter)
Wasser mit einer echten 3D-Oberfläche bei niedrigem Wellengang (einstellbar per Parameter)

* Implementierung von Jacco Bikker.