Raytracing in Spielen II: Das Reich der Strahlen macht Fortschritte

 4/8
Daniel Pohl
117 Kommentare

Reflektionen bei Rasterisierung

Um bei der Rasterisierung Reflexionen zu simulieren, wird die Szene aus mindestens einer Kameraposition vorgerendert und in einer Textur (einer so genannten Reflection Map, manchmal auch Cube Map genannt) gespeichert, die dann schichtweise über ein Multipass-Verfahren beim Rendern auf eine Oberfläche aufgeklebt wird. Die gleiche Methode wird beim Erzeugen der so genannten „Shadow Maps“ verwendet, bei der man ebenfalls einen weiteren Durchgang benötigt, bevor man die Szene rendern kann.

Es gibt verschiedene Fälle und Methoden dies zu tun (Quelle: Uni Erlangen):

  • Ein Beispiel für eine einen Durchlauf benötigende Reflection Map, die über den Effekt einer Fischaugen-Linse erzeugt wurde.
    Spiegelungen mittels Rasterisierung
    Spiegelungen mittels Rasterisierung
  • Hier die Vorgehensweise für eine Reflection Map über zwei zusätzliche Durchläufe mit einer paraboloiden Verzerrung:
    Spiegelungen mittels Rasterisierung
    Spiegelungen mittels Rasterisierung
  • Hier benötigt man sechs zusätzliche Durchläufe zum Erzeugen der Cube Map (Vielen Dank an Paul Bourke für das Bild).

    Spiegelungen mittels Rasterisierung
    Spiegelungen mittels Rasterisierung

  • Es gibt noch viele weitere Algorithmen, die weitere Kleinigkeiten an den Methoden verbessern.

Doch alle Ansätze mittels Rasterisierung haben ihre Limitierungen:

  • Durch das Rendern in eine Textur kommt es zu sichtbaren Artefakten durch Probleme mit dem Sampling (ein Objekt, das weit weg war von der Kamera, die die Reflection Map erzeugt hat, endet in einer sehr kleinen Repräsentation in der Textur. Zoomt man nun allerdings genau in diesen Bereich aus der realen Perspektive, so sieht man die einzelnen Pixel viel zu grob).

  • Das Vorrendern in eine Textur ist zeitaufwändig. Im schlimmsten Falle sieht man am Ende nur einen einzigen Pixel der Spiegelung, jedoch wurde zum Erzeugen der Cube Map die Szene zusätzliche sechs Mal gerendert.

  • Wie soll man Spiegelungen in Spiegelungen handhaben? Dies ist sehr schwierig umzusetzen und in den meisten Fällen unmöglich. Dazu müsste man die Szene mit Spiegelungen vorberechnen, auswerten, und dann noch einmal mit Spiegelungen in Spiegelungen vorberechnen und auswerten. Ein enormer Zeitaufwand.

  • Und abschließend: Da das Verfahren über Reflection Maps nicht auf physikalischen Grundlagen basiert, sind die Reflexionen ohnehin nicht korrekt.

Was all' diese Ansätze versuchen, ist eine Annäherung an Raytracing. Wie bereits im ersten Beispiel erwähnt: Die Geschwindigkeit von Raytracing skaliert logarithmisch mit der Anzahl der Dreiecke. Das trifft natürlich auch für alle Reflexionsstrahlen zu. Daher kann man in einer Szene mit vielen Polygonen und Reflexionen sogar noch mehr Vorteile aus dieser Situation ziehen.