Raytracing in Spielen II: Das Reich der Strahlen macht Fortschritte
Prolog
Dieser Artikel ist die Fortsetzung des Artikels „Raytracing in Spielen“, welcher etwa vor einem Jahr auf ComputerBase veröffentlicht wurde. Seitdem gab es viele Fortschritte, durch die Echtzeit-Raytracing für Desktop-Maschinen immer näher rückt.
Raytracing ist eine Renderingtechnologie, die ein zweidimensionales Bild aus einer dreidimensionalen Szene erzeugt. Dies geschieht durch das physikalische Simulieren der Verteilung von Licht anhand von Strahlen. Der Algorithmus schießt für jeden Pixel auf dem Bildschirm einen so genannten „Primärstrahl“ aus der Perspektive des Betrachters. Der Raytracing-Algorithmus ermittelt dann, welches Objekt entlang des Pfades des Strahls zuerst getroffen wird.
An diesem Punkt wird dann ein Shader-Programm aufgerufen. Hat das getroffene Objekt beispielsweise spiegelnde Eigenschaften, so wird als Resultat auf den Aufprall des Primärstrahls ein weiterer, so genannter „Reflexionsstrahl“ in die reflektierte Richtung geschossen.
Durch „Schattenstrahlen“ kann man hingegen sehr einfach feststellen, ob ein bestimmter Pixel beleuchtet ist, oder ob er sich im Schatten befindet. Dazu schießt man einfach von dem zu untersuchenden Bereich aus einen Strahl zur Lichtquelle. Wird dieser auf seinem Weg durch keinerlei Hindernisse blockiert, so kann offensichtlich Licht zu diesem Bereich gelangen. Anderenfalls, also mit einem blockierenden Objekt dazwischen, befindet sich der Bereich im Schatten.
Der in diesem Bericht beschrieben Raytracing-Ansatz wird komplett auf der CPU berechnet. Die Grafikkarte wird nicht zur Erzeugung des Bildes benutzt. Lediglich nach dem Rendern werden die fertigen Pixel über die Grafikkarte auf den Monitor geschoben.
Ein anderer Ansatz, um ein zweidimensionales Bild aus einer dreidimensionalen Szene zu erzeugen, heißt „Rasterisierung“. Dabei handelt es sich um das Verfahren, das derzeit auf speziell für diesen Algorithmus ausgelegten Grafikkarten benutzt wird und in so gut wie jedem Heimcomputer zum Einsatz kommt, um beispielsweise Spiele über die Standardbibliotheken wie DirectX oder OpenGL zu rendern.
Fortschritt
Nachdem mein letzter Artikel über Raytracing in Spielen unter anderem auf ComputerBase veröffentlicht worden war, habe ich mich intensiver mit dem Skalierungsverhalten von Raytracing mit steigender Zahl an CPU-Cores beschäftigt. Um eine 16-Core-Maschine zu simulieren, habe ich vier Quad-Core-PCs über Gigabit-Ethernet zusammengeschaltet und deren Rechenleistung vereinigt. Da mein Projekt zu dieser Zeit die Raytracing Library OpenRT der Universität des Saarlandes benutzte, die Support für verteiltes Rendern bietet, war dies einfach zu bewerkstelligen.
OpenRT ist eine Raytracing-Bibliothek (C/C++), die vom Computergrafik-Lehrstuhl der Universität des Saarlandes entwickelt wurde. Die Syntax ist nahezu identisch zu der von OpenGL. Für Programmierer gibt es eine kostenlose Linux-Version, die für nichtkommerzielle Zwecke benutzt werden darf.
Die Ergebnisse waren verblüffend: Wenn man eine 16-Core-Maschine anstatt einer Single-Core-Maschine benutzt, dann steigt die Framerate um einen Faktor von 15,2!
Nach all der Aufmerksamkeit, die der vorhergehende Artikel über Raytracing in Spielen rund um den Globus erhalten hatte, wurde ich von verschiedenen Firmen mit Interesse an dieser Technologie angeschrieben. Eine davon war Intel. Bei Intel erzählte man mir, dass man über einen Echtzeit-Raytracer verfüge, der etwa zehn Mal schneller sei als alles andere, was bisher in diesem Bereich veröffentlicht wurde. Diese Zahlen konnte man bereits in einem wissenschaftlichen Artikel nachlesen, aber ich traute ihnen dennoch nicht, ohne es mit eigenen Augen gesehen zu haben. Also flog ich nach Santa Clara, „Silicon Valley“, in Kalifornien, um eine Live-Demonstration zu erhalten.
Mittlerweile bin ich bei Intel fest angestellter Wissenschaftler und arbeite weiter an Raytracing. Wie sich herausgestellt hat, ist das Interesse von Intel an Raytracing unter anderem deswegen so groß, da die Technik so gut geeignet ist für CPUs. Der Forschungsbereich ist Teil eines großen Programms (genannt „Tera-Scale Computing“) mit dem Ziel der Verbesserung der Skalierung von Software von einigen auf viele Kerne (mit vielen sind hier mehrere Hunderte gemeint).
Die Anstellung bei Intel ermöglichte es mir, Quake 4: Raytraced mit dem neuen Intel-Raytracer auf verschiedenen Veranstaltungen, wie der Games Convention 2007 in Leipzig und dem Intel Developer Forum im Herbst 2007 in San Francisco, zu zeigen. Auf letztgenanntem Event wurde es sogar in der Keynote von Justin Rattner (Intel CTO) über virtuelle Welten demonstriert.
In HD-Auflösung konnten wir eine Framerate von etwa 90 Bildern pro Sekunde auf einer Dual-X5365-Maschine zeigen, wobei alle 8 Cores des Systems zum Rendern vollständig ausgenutzt wurden.