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

, 91 Kommentare

Partikelsysteme

Heutige Spiele machen starken Gebrauch von Partikelsystemen um Effekte wie Rauch, Feuer, Funken, bewegte Nebelvolumen etc. darzustellen. In den Anfängen von 3D-Spielen waren Partikel lediglich kleine, einfarbige Quadrate oder Sprites.

Partikelschweif eines fliegenden Lava-Stücks in Quake (I)
Partikelschweif eines fliegenden Lava-Stücks in Quake (I)

Heutzutage benutzen Partikeleffekte in Spielen meistens ein „Quad“, das aus zwei Dreiecken besteht. Deren Shader kann verschiedene Texturen miteinander mischen, sie auf verschiedene Arten miteinander blenden, Farben der Eckpunkte berücksichtigen und die ganzen magischen Tricks machen, die programmierbare Shader erlauben. Implementierungen von Rauch und Feuer in Spielen sind dann oft aus Partikelsystemen erzeugt, die mehrere Schichten an Quads hintereinander anordnen und dadurch die Illusion eines volumetrischen Effekts erzeugen.

Implementierungen von Rauch und Feuer mit Partikeln

Normalerweise werden diese Schichten von Partikeln in Richtung der Augen des Spielers angeordnet. Zum Debuggen kann man diese Ausrichtung einfrieren und bei einem Blick von der Seite auf das Szenario einen guten Eindruck über die verschiedenen Schichten gewinnen.

Debug-Ansicht von der Seite auf die eingefrorene Ansicht der Partikel

Die Annäherung an ein Volumen durch Schichten wurde speziell für Spiele entwickelt, die den Rasterisierungsalgorithmus benutzen, der diese Szenarien schnell darstellen kann. Im Zuge dieser Demo haben wir die gleiche Darstellungsvariante benutzt, jedoch empfehlen wir für Spiele mit Ray-Tracing einen anderen Algorithmus zur Darstellung von Volumen.

Um in einem Ray-Tracer den Effekt durch Schichten korrekt darzustellen, trifft der Strahl von der Kamera beispielsweise auf die erste Oberfläche der Partikel. Das Shaderprogramm wird ausgeführt und gibt nach einem Texturzugriff eine Farbe zurück und einen Grad an Transparenz. Von dort aus wird der Strahl weitergeschossen, trifft die nächste Oberfläche etc.; In unseren Tests benötigten wir in den härtesten Fällen eine Rekursionstiefe von 50, um eine korrekte Darstellung zu garantieren. Dies kann offensichtlich sehr performancehungrig werden und in der Tat ist das Darstellen der Partikel auf die für Rasterisierung optimierte Methode im Ray-Tracer der teuerste visuelle Effekt der Demo überhaupt.

Debug-Ansicht zeigt die Hotspots der Performance beim Rendern vom Partikel. Helle Bereiche benötigen mehr Zeit als dunkle.
Debug-Ansicht zeigt die Hotspots der Performance beim Rendern vom Partikel. Helle Bereiche benötigen mehr Zeit als dunkle.

Unter der Einschränkung, dass alle Oberflächen Quads und in die gleiche Richtung orientiert sind, ergeben sich einige Möglichkeiten der Optimierung beim Rendern. Zudem könnten andere und möglicherweise schnellere Rendering-Methoden für solche Partikeleffekte benutzt und die Resultate später wieder ins original Bild hineingemischt werden.

Voraussichtlich wird sich diese Technologie in der Zukunft dahin entwickeln, dass man echte volumetrische Daten haben wird anstatt zu versuchen diese mit Schichten anzunähern. Dadurch könnte sich Rauch beispielsweise natürlich in der Luft ausbreiten und sich beim Auftreffen auf Hindernissen entsprechend anders bewegen. Durch Ray-Tracing könnte man die Helligkeitswerte innerhalb der Rauchwolke an die Umgebung anpassen.

Mit FumeFX offline berechneter Rauch.
Mit FumeFX offline berechneter Rauch. (Bild: afterworks.com)

Auf der nächsten Seite: Performance