TEST

Die Turing-Architektur mit RTX, Ray Tracing und den neuen Shader-Funktionen - Wie funktioniert Ray Tracing?

Portrait des Authors


Werbung

Ray Tracing kann mit Strahlenverfolgung übersetzt werden und dieser eingedeutschte Begriff erklärt auch teilweise die Funktionsweise der Technik. Auf den ersten Blick könnte man davon ausgehen, dass ein Ray Tracing immer von der oder den Lichtquellen ausgehend berechnet wird. Dies ist aber nicht der Fall, denn eigentlich handelt es sich beim Ray Tracing in der Computergrafik um ein rückwärtiges Ray Tracing. Daher hört man auch immer wieder den Begriff Backward Ray Tracing.

In erster Linie ist ein Ray Tracing aber ein Verfahren zur Verdeckungsberechnung. Es geht darum zu ermitteln, ob ein Objekt für den Betrachter sichtbar ist oder nicht. Diese Berechnung über einen Strahl erfolgt für jedes Pixel, welches sich auf der Bildebene mit Ausgangspunkt des Betrachters befindet. Diese Berechnung erfolgt für jedes Objekt (Primitiv) im 3D-Raum. Per geometrischer Verfahren wird vom Betrachtungspunkt aus, jedes Pixel auf der Bildebene auf sichtbare und nicht mehr sichtbare Objekte hin überprüft.

Zieht man nun nicht nur die Verdeckungsberechnung heran, sondern erweitert die Berechnung der Strahlen um weitere Schritte, lassen sich daraus weitere Informationen zur Beleuchtung ermitteln. Dazu muss natürlich die Materialbeschaffenheit eines jedes Primitive hinterlegt sind. Handelt es sich um eine matte oder glänzende Oberfläche? Wie groß ist der Grad der Reflexion, Streuung oder Transparenz? Viele weitere Faktoren bestimmen, wie sich Licht, welches auf eine Oberfläche trifft, verhält. Man kann sich sicherlich leicht vorstellen, dass bei einem Backward Ray Tracing die Anzahl der Strahlen exponenziell wächst, je mehr Ebenen man in die Berechnung mit einbezieht. Ein Vollbild-Ray-Tracing bei UHD-Auflösung in Echtzeit und mehreren hundert oder gar tausend Primitives mit dazugehörigen Streu- und Reflexionseigenschaften ist auch mit den Karten der GeForce-RTX-20-Serie nicht zu berechnen. Es gibt hier also einige Tricks, die den Rechenaufwand reduzieren. Dazu gehören lokale Beleuchtungsmodelle oder bereits vordefinierte Beschreibungen der Lichtquellen, welche die Berechnungen vereinfachen.

Ein Ray Tracing kann aber mehr als eine Verdeckungsberechnung und Berechnung von Beleuchtung. Es ist nicht nur möglich, Lichtstrahlen über den Betrachtungspunkt und die Bildebene sozusagen rückwärts zu berechnen, sondern auch von beliebigen anderen Punkten des Raums. Bereits kurz angesprochen haben wir dies für Lichtquellen, möglich ist dies aber auch für Schatten. Arthur Appel zeigt dies bereits 1968.

Ein Schatten wird immer dann erzeugt, wenn sich zwischen einem Punkt auf einer Oberfläche und der Lichtquelle ein Objekt befindet. Nun ist die Realität selten von nur einer Lichtquelle beleuchtet, über Reflexion und Streuung kommt es abhängig vom Betrachtungsabstand zu harten und weichen Schatten und vieles mehr. Für ein klassisches Rendering kann man entweder auf vordefinierte Schatten (prebacked, sehr aufwändig für große Szenen und 3D-Welten) zurückgreifen oder aber verwendet bestimmte Tricks, wie das Enhanced Horizon Based Ambient Occlusion (HBAO)Hybrid Frustum Traced Shadows (HFTS) und andere Verfahren. Allesamt sind diese aber nur Annäherungen und keine echten Berechnungen für Schatten.

Noch komplizierter ist das Ray Tracing mit durchlässigen, halbdurchlässigen und spiegelnden Objekten. Dabei werden weitere Rays von den Schnittpunkten ausgesendet und müssen dementsprechend auch berechnet werden. Besonders Reflexionen waren bisher häufig nur über Tricks im Rendering-Prozess möglich, denn lagen die reflektierten Objekte außerhalb des Screen Space, wurden sie in der Rendering-Pipeline bereits zu einem früheren Zeitpunkt verworfen und daher auch nicht mehr berechnet.

Bei spiegelnden Flächen muss lediglich die Richtung des von der Fläche ausgehenden Strahls gemäß dem Reflexionsgesetzes (Einfallswinkel gleich Reflexionswinkel) berücksichtigt werden. Bei lichtdurchlässigen Objekten muss zur physikalisch korrekten Berechnung auch noch das Brechungsgesetz mit einbezogen werden. Generell reflektieren transparente Objekte auch einen Teil des Lichts, wie zum Beispiel Glasoberflächen. Diese Sekundärstrahlen bringen natürlich weitere Komplexität in die Szene und erhöhen damit den Rechenaufwand. 

Da diese Sekundärstrahlen auf weitere Objekte fallen können, wird das Ray Tracing an dieser Stelle rekursiv angewendet, um mehrfache Spiegelungen und Lichtbrechungen zu ermöglichen. In einigen Demos hat NVIDIA die Funktionsweise präsentieren können. Das rekursive Ray Tracing wurde etwa 1980 von Kay und Whitted entwickelt und wird heute von NVIDIA auch technisch umgesetzt. Rekursives Ray Tracing ermöglicht neben Lichtbrechung und -reflexion die Simulation von eben bereits angesprochenen Schatten. Lichtquellen werden in den Engines häufig als Lichtpunkte angenommen. In Wirklichkeit haben sie jedoch eine bestimmte Größe, was dazu führt, dass Schatten weich und verschwommen wirken. Um dies zu berechnen werden statt eines Strahls gleich mehrere ausgesendet und aus den errechneten "Farben" ein Mittelwert gebildet. So entsteht nicht nur ein Schatten, sondern ein Kernschatten und ein Halbschatten. Ein Nachteil dieser Methode ist, dass es zu einem Bildrauschen kommen kann, wenn zu wenig Strahlen verwendet werden. Aber auch hierfür hat NVIDIA eine Lösung, zu der wir später noch kommen werden.

Als letzter Punkt kann auch noch das Path Tracing angeführt werden, welches nicht nur vom Betrachtungspunkt ausgehend eine Berechnung vornimmt, sondern auch von den Lichtquellen aus. Die verschiedenen Methoden kombiniert ergeben eine schon recht realistische Berechnung einer Szene. Ein Path Tracing kann aber sehr aufwendig werden, eine Kombination der verschiedenen Ray-Tracing-Methoden umso mehr und somit stellt sich die Frage, wie NVIDIA ein Ray Tracing bei den Karten der GeForce-RTX-20-Serie umgesetzt hat.

NVIDIAs RTX, OptiX und Microsofts DXR ermöglichen grundsätzlich die Umsetzung folgender Techniken:

  • Reflexionen und Refraktionen
  • Schatten und Ambient Occlusion
  • Global Illumination
  • Instant und Off-Line Lightmap Baking
  • Primary Rays für ein Foveated VR-Rendering
  • Occlusion Culling
  • Physikberechnungen, Kollisionserkennung, Partikelsimulation
  • Audio-Simulation (NVIDIA VRWorks Audio)
  • In-Engine Path Tracing (nicht in Echtzeit) 
Quellen und weitere Links KOMMENTARE (108) VGWort