3/8 Raytracing in Spielen IV : Ray-Tracing in der Cloud

, 91 Kommentare

Ray Tracing mit MIC

Die im Folgenden beschriebene Demo ist eine Evolution der Kombination aus dem Cloud-basierten Spieleansatz und der Verwendung von Ray-Tracing zum Rendern durch Intels Many-Integrated-Core-Architektur (MIC).

Hardware Setup

Für dieses Projekt wurden vier „Server”-Maschinen benutzt, um die Cloud darzustellen. Die relevanten Komponenten einer einzelnen Rechners sind:

„Knights Ferry“ ist die erste Generation der Entwicklungsplattform für die MIC-Architektur. Diese beinhaltet eine PCI-Express-Karte mit einem Chip, der 32 Kernen besitzt und mit einer Frequenz von 1,2 GHz läuft. Die Entwicklungsplattform ist über die Tools und Programmiersprachen ansprechbar, die Programmierer regelmäßig benutzen. Darüber hinaus gibt es bereits Pläne für ein MIC-Produkt namens „Knights Corner“, dass die 22-nm-Fertigungstechnologie benutzen und mehr als 50 Cores auf dem Chip besitzen wird.

Intel „Knights Ferry“

Als Thin-Client (stellvertretend für den Computer des Spielers) wurde ein kleiner Laptop gewählt. Die Eigenschaften sind:

  • CPU: Intel Core 2 Duo P9600 (2 Kerne, 2.66 GHz)
  • 13-Zoll-Bildschirm (1280x800)
  • Gigabit-Ethernet

Software-Setup

Als Spielegrundlage wurde die deutsche Version des Spiels Wolfenstein (2009) von id Software und Raven Software benutzt.

Das Ray-Tracing wird durch eine experimentelle Engine, die von Intel Labs entwickelt wurde, durchgeführt. Diese ist über eine klar definierte API ansprechbar, um Geometrie-, Kamera-, Texturdaten und verschiedene Zustände etc. zu verändern. Zusätzlich unterstützt sie eine HLSL-ähnliche Shadingsprache, um hoch performanten Shading-Code auf einfache Weise zu schreiben.

Die Ray-Tracing-Engine besteht aus zwei Teilen. Der eine läuft komplett auf der CPU und wird zum Kommunizieren mit der Knights-Ferry-Karte benutzt um die Inhalte, Zustände und Renderbefehle zu senden. Der andere Teil läuft auf MIC. Die Implementierung wurde ähnlich wie bei einer herkömmlichen IA-CPU in C++ vorgenommen – mit einem speziellen Code, der die 16-breiten SIMD-Units der Hardware ausnutzt. Der Renderer benutzt 31 der 32 Kerne – der letzte ist absichtlich freigelassen, damit er Arbeiten des Treibers übernehmen kann.

Da jeder Kern vier Threads ausführen kann, ergeben sich 124 Threads für die Anwendung. Diese werden dynamisch auf Knights Ferry für verschiedene Aufgaben benutzt: die größte davon ist der Rendering-Task, der die Strahlen verfolgt und Pixel einfärbt. Die zweitintensivste ist das Aktualisieren der internen Beschleunigungsstrukturen des Ray-Tracers. Diese beinhalten eine Repräsentation der Geometrie (Dreiecke) des Spiels auf eine Art, die es ermöglicht, schnell die die Strahlen schneidende Geometrie finden kann. Dynamische Änderungen der Szene (z.B. Bewegungen der Spieler, der Partikel etc.) machen es notwendig, dass diese Beschleunigungsstrukturen schnell mit immer neuen Informationen aktualisiert werden.

Auf der nächsten Seite: Client-Server-Rendering