Seite 5: Wie sieht NVIDIAs Umsetzung mittels RTX aus?

Ein vollständiges Ray Tracing mit den auf der vorherigen Seite beschriebenen Funktionen ist noch immer zu aufwendig. Daher nutzt NVIDIA in der RTX-Technologie zunächst einmal nur ein Subset des vollständigen Ray Tracing. Es geht darum, den Rechenaufwand zu reduzieren. Die RTX-Technologie ist im Grunde aber nur eine Entwickler-Schnittstelle. Per Direct Compute und Microsofts DXR soll eine Echtzeit-Berechnung von Ray Tracing aber auch auf anderen GPUs ausführbar sein. Microsoft wird mit dem Windows 10 April 2018 Update (Redstone 4) die entsprechende DirectX-12-Version freigeben, die DXR unterstützen wird.

Vor etwa fünf Jahren wusste NVIDIA in etwa, welche Richtung man die Hardware entwickeln müsse, um ein Ray Tracing möglich zu machen. Es musste dedizierte Hardware zum Einsatz kommen, welche die Berechnungen unterstützt und hier kommen die RT Cores ins Spiel.

Zur Reduzierung des Rechenaufwands tragen zahlreiche Techniken bei. Allesamt zielen diese darauf ab, dass gewisse Primitives sowieso nicht in der Nähe des Strahls liegen und daher nicht getroffen werden können – sie sind in jedem Fall verdeckt und spielen für die Darstellung der Szene keine Rolle. Das exponentielle Wachstum der zu berechnenden Rays sorgt dafür, dass so wenige Primitives wie möglich getestet werden sollten, um den Rechenaufwand in Grenzen zu halten.

Eines dieser Verfahren ist die Bounding Volume Hierarchy (BVH). Bei der BVH wird eine Szene in immer kleinere Blöcke aufgeteilt und diese wiederum werden den Primitives zugewiesen. Letztendlich muss der Ray nur noch in den Blöcken betrachtet werden, die er auf dem Weg zum Primitiv kreuzt. Das Verfahren ähnelt den Voxeln, die NVIDIA für die Voxel Global Illumination (VXGI) verwendet. BVH verwendet nun eine Hierarchie, welche genau aufzeigt, für welchen Block und letztendlich welches Primitiv die Berechnung für das Ray Tracing durchgeführt werden muss.

BVH lässt sich auf klassischen GPU-Architekturen aber nur in Software ausführen. Dies bedeutet für die Shader, dass diese pro Ray mehrere tausend Instruktionen berechnen müssen, die immer wieder mit Schleifen für das Auffinden der Sub-Box oder des letztendlichen Primitiv durchzogen sind. Erst am Schluss kann das eigentliche Shading für diesen Ray fortgesetzt werden.

Hier kommen dann die RT Cores ins Spiel. Diese besitzen Special Function Units (SFU), die auf die Aufteilung der Sub-Boxen bis hin zum Primitiv und Evaluierung bei Auftreffen des Rays auf einem Primitiv, optimiert sind. Die Shader starten den Prozess zur Berechnung bzw. fragen diese an, der RT Core übernimmt die Berechnung und gibt sein Ergebnis an die Shader zurück, die dann wiederum ihre Rendering-Pipeline durchlaufen können.

Normierte Ray-Tracing-Leistung

Zusammen mit dem Ray Tracing führt NVIDIA eine neue Metrik zur Berechnung der Leistung ein und spricht hier von Gigarays pro Sekunde, die berechnet werden können. Nun muss man an dieser Stelle wissen, dass diese Leistungsangabe nicht wie TFLOPS eine feststehende Größe für eine bestimmte Hardware ist, sondern abhängig von der jeweiligen Berechnung bzw. Szene.

Als Vergleich zieht NVIDIA die GeForce GTX 1080 Ti hinzu und gibt hier eine Rechenleistung von 1,1 Gigarays/s an. Die GeForce RTX 2080 Ti soll mindestens 10 Gigarays/s erreichen – in einigen Fällen sogar mehr als 12. Doch wie lassen sich diese Werte vergleichen? Die Antwort ist ganz einfach: Gar nicht! Selbst auf die identische Szene bezogen können die Werte leicht schwanken und sind somit nur eine Näherung. NVIDIA möchte an dieser Stelle aber verdeutlichen, dass ein Ray Tracing auf Basis der Pascal-Architektur in dieser Form nicht möglich ist.

Als Anhaltspunkt: In einer Szene von Claybook, die per Ray Tracing berechnet wird, erreicht eine Radeon RX Vega 64 4,88 Gigarays/s. Dabei wurde nur ein Primary Ray Tracing durchgeführt, für Shadow Rays liegt der Wert etwas darunter. Das Spiel läuft für Primary Ray Tracing in 4K bei 60 FPS flüssig, aber das gilt hier auch für eine GeForce GTX 1080 Ti und insofern lassen sich die fast 5 Gigarays/s nicht mit den von NVIDIA gemachten Angaben vergleichen. Ein Primary Ray Tracing und Shadow Rays können kohärent berechnet werden, für Reflection und Refraction Rays gilt dies nicht und dann ändert sich auch die Leistung auf einen Wert bezogen auf Gigarays/s.

Die Hybrid Rendering Pipeline

Mit der Turing-Architektur führt NVIDIA also kein reines Ray Tracing ein, sondern einen Hybrid-Renderer. In diesem werden die verschiedenen Techniken zur Berechnung von direkten und indirekten Schatten, Reflexionen, Umgebungsbeleuchtung, Transparenzen und vielem mehr ausgeführt.

Einige dieser Techniken basieren auf dem bekannten Rasterization-Prozessen, einige verwenden das Ray Tracing und wiederum andere sind ebenfalls bekannte Compute-Anwendungen. Ein entsprechender Workload ist dementsprechend keine reine Shader-Pipeline-Anwendung mehr. Dies verdeutlicht NVIDIA mit den folgenden Zahlen:

Das Rendering einer Szene besteht aus mehreren Berechnungen. Dazu gehören FP32, INT32, RT-Core-Operationen und diese in den Tensor Cores. Ein durchschnittliches Rendering verwendet etwa 80 % der FP32-Ressourcen, 28 % der INT32-Ressourcen, 40 % der Rechenleistung der RT Cores und 20 % der Rechenleistung der Tensor Cores. Damit kommt NVIDIA auf 78 RTX-OPS als Maßeinheit für die Rechenleistung im Hybrid Rendering.