Verfolge die Strahlen!
Raytracing (ray tracing im englischsprachigen Raum) soll für eine realistischere Beleuchtung von komplexen dreidimensionalen Szenen im Bereich der Computergrafik sorgen. Im Vergleich zur aktuell vorherrschenden Methode der Rastergrafik (Rasterization; weitere Details:
TU-Berlin) soll Raytracing die Darstellung von Licht, Schatten und Reflexionen/Spiegelungen verbessern. Oftmals ist von fotorealistischen Bildern die Rede.
Der grundlegende Rendering-Algorithmus ist Mitte der 1960er-Jahre entwickelt worden und erfordert in der Regel einen sehr hohen Rechenaufwand (Appel, Arthur (1968); Goldstein, Robert (1971); Nagel, Roger (1971); Quelle:
Scratchapixel). Bei den computergenerierten Spezialeffekten (CGI) in Filmen und Serien wird ebenfalls auf Raytracing gesetzt. Die Berechnung dieser Szenen erfolgt jedoch nicht in Echtzeit, wie es für interaktive Erlebnisse erforderlich wäre.
Die Echtzeit-Berechnung solcher Szenen überfordert, auch heute noch, viele selbst extrem leistungsfähige Prozessoren, weswegen derzeit hauptsächlich die vorhandene Technologie mit ausgewählten Raytracing-Elementen ergänzt wird - dies gilt ebenfalls für die RTX-Grafikkarten. Die häufigsten aktuellen Einsatzbereiche sind die Berechnung von Lichteinfall, Schatten, Umgebungsverdeckung (ein Objekt verdeckt ein anderes Objekt) und Reflexionen. Es kommt also eine hybride Rendering-Technik zum Einsatz - teilweise Rastergrafik, teilweise Raytracing. Würde man eine 3D-Szene vollständig und in Echtzeit mit Raytracing berechnen wollen,
bräuchte man laut Jensen Huang eine Rechenleistung im Petaflop-Bereich. Der Geschäftsführer von Nvidia mit einem Faible für Lederjacken schätzt, dass es bis dahin noch zehn Jahre dauern könnte …
Die unterschiedlichen Ansätze: Rasterisierung vs. Raytracing. Bildquelle: Nvidia.
Strahlen aus dem Auge und nicht in das Auge
Wie der Name vermuten lässt, fußt Raytracing auf Strahlen (Lichtstrahlen) sowie der bekannten Projektion einer dreidimensionalen Szene auf einen zweidimensionalen Bildschirm. Die nachfolgenden Ausführungen sind eine vereinfachte Darstellung des Verfahrens. Komplexere Ausführungen findet man u.a. bei
Scratchapixel.
Der angenommene Anfangspunkt (Augpunkt) ist der Nutzer vor dem Bildschirm, der logischerweise den Monitor mit seinen Bildpunktreihen/Pixelreihen betrachtet. Von dem Ausgangspunkt und jedem Bildpunkt werden virtuelle Lichtstrahlen auf die dreidimensionale Spielszene gesendet. Die in der Szene vorhandenen Objekte - wie zum Beispiel Dreiecke/Polygone - werden von diesen Strahlen getroffen/geschnitten, wodurch je nach festgelegter Objektbeschaffenheit, Einfallswinkel, Spiegelung oder Brechung in einem späteren Schritt der tatsächliche Farbwert des Pixels berechnet wird. Dabei ist nur das erste Objekt relevant, das vom Strahl getroffen wird. Im Prinzip funktioniert die Abbildung der realen Welt in unserem Auge genau entgegengesetzt (Licht trifft durch das Auge auf die Netzhaut).
Raytracing-Vergleich in Metro Exodus: Oben mit Raytracing. Unten ohne Raytracing - vor allem der Bereich rechts unten ist zu hell erleuchtet. Dort gibt es eigentlich keine Lichtquelle.
Das Ziel ist es also, den Farbwert eines Pixels auf dem Bildschirm auf Basis des nachgezeichneten Strahlengangs zu berechnen. Da sich die Lichtstrahlen aufgrund von Reflexionen, Brechungen und Co. im gesamten virtuellen Raum ausbreiten können, werden selbst Objekte, die von anderen Objekten verdeckt sind, von manchen Strahlen getroffen und können so in die Berechnung der gesamten Szene einbezogen werden.
Wenn man bedenkt, wie viele Pixel bei der Darstellung in Full HD (1920x1080; ca. 2 Mio.) bei 30 Bildern pro Sekunde berechnet werden müssen, wird ersichtlich, wie hoch der Rechenaufwand ist - zumal die Strahlen noch von weiteren Objekten reflektiert werden könnten. Außerdem gibt es noch Lichtquellen in 3D-Szenen, die außerhalb des Sichtfeldes des Spielers liegen, wie zum Beispiel eine hoch stehende Sonne, die nicht im Blickfeld des Nutzers liegt - und auch ihre Lichtstrahlen müssen in die Beleuchtung mit einfließen. Diese Strahlen werden Sekundärstrahlen genannt, in Abgrenzung zu den Primärstrahlen, die vom Augpunkt ausgehen. Werden sämtliche direkten und indirekten Lichtquellen zur Ausleuchtung einer Szene berücksichtigt, nennt man dies "Global Illumation".
Bei der Rastergrafik werden hingegen nur szenische Objekte berechnet, die sich gerade im Blickfeld des Betrachters befinden, was wiederum Rechenleistung spart. Indirekte Beleuchtung durch Lichtquellen, die sich außerhalb der Szene befinden, fehlt und muss oft durch andere Methoden nachträglich realisiert werden. Auch die Schatten von einer Lichtquelle außerhalb des Sichtfelds werden separat berechnet und später hinzugefügt, was stellenweise zu falschen Darstellungen führt, vor allem wenn die Szene durch die Einwirkung des Spielers verändert wird. Beispielsweise ist schummriges Licht in manchen Bereichen zu sehen, obwohl dort eigentlich gar kein Licht sein sollte. Für die Umgebungsverdeckung und die Berechnung der Verschattung einer 3D-Szene gibt es ebenfalls spezielle Verfahren - wie SSAO, die meist auf Effizienz getrimmt sind und nicht für komplett realistisch aussehende Bilder sorgen.