Raytracing in Spielen I: Strahlen versprechen den Fotorealismus
3/5Quake 3: Raytraced
Im Jahre 2004 habe ich im Rahmen meiner Studienarbeit an einem der ersten Computerspiele gearbeitet, die Raytracing zum Darstellen der Szene benutzen. Als Basis wurden dabei die Daten (Levels, Spielermodelle, Sounds, …) aus „Quake 3“ benutzt. Es war beeindruckend zu sehen, wie einfach Spezialeffekte mit Raytracing zu programmieren waren, die mit der herkömmlichen Grafiktechnologie, genannt „Rasterisierung“, wesentlich mehr Zeit und Arbeit in Anspruch genommen hätten. So ließen sich beispielsweise dynamische und pixelgenaue Echtzeit-Schatten mit nur etwa zehn Zeilen Code wie in der Einleitung beschrieben implementieren.
Das Erzeugen von Schatten ohne störende Artefakte ist in vielen Computerspielen immer noch ein Problem (auch wenn es hier bereits Ausnahmen gibt, die es gut hinbekommen). Hier einige Negativbeispiele von Spielen, die alle im Jahre 2006 veröffentlicht wurden. Da die Schatten lediglich über Annäherungen in eine Textur hinein berechnet werden, kommt es durch die Begrenzung der Auflösung dieser Textur zu sichtbaren Artefakten. Es sind die einzelnen Pixel der so genannten „Shadow Map“ sichtbar. Somit wird der eigentlich erhoffte Effekt der realitätsgetreueren Darstellung durch Schatten gedämpft.
Ein weiterer Vorteil von Raytracing ist, dass man wesentlich mehr Polygone mit einem vergleichsweise zur Rasterisierung geringen Einfluss auf die Framerate benutzen kann. Nach dem Motto „Pimp up your Level“ habe ich einige Wände und Böden aus Quake 3 mit wesentlich mehr Details versehen. Anstatt nur zwei Dreiecke für eine Wand zu benutzen, kamen gleich 5.000 zum Einsatz.
Das Ergebnis: Obwohl die Komplexität der Geometrie in dem modifizierten Quake-3-Level sechsmal so hoch war, verringerte sich die Framerate unter Einsatz von Raytracing lediglich um 25 Prozent. Unter Einsatz von Rastarisierung würde der Geschwindigkeitsverlust ein Vielfaches bedeuten.
Besonders interessant ist die Berechnungskomplexität beim Erzeugen des Bildes in Abhängigkeit von der Anzahl an Dreiecken. Durch die Verwendung des BSP-Baums ist der Einfluss logarithmisch, bei der Rasterisierung dagegen linear.
Man sieht, dass Raytracing (grün) einen gewissen Grundaufwand hat, der bei einer geringen Anzahl an Dreiecken im Vergleich mit der Rasterisierung (rot) hoch ist. Hat man jedoch wesentlich mehr Geometrie in der Szene, so ist es ab dem Schnittpunkt S effizienter, Raytracing anstatt Rasterisierung zum Erzeugen des Bildes zu benutzen. Welchen Wert S genau hat, ist unbekannt und implementierungsabhängig (spekulativ wird oft der Bereich von 1 bis 10 Millionen Dreiecken genannt). Jedoch ist abzusehen, dass mit immer weiter steigendem Detailgrad in Computerspielen dieser Punkt irgendwann erreicht werden wird.
Andere Spezial-Effekte in Quake 3: Raytraced sind Glas, Spiegelungen-in-Spiegelungen, Kameraportale und Bodennebel.
Um Quake 3: Raytraced in Action zu sehen, können Sie sich die folgenden beiden Videos ansehen: