Dieser Beitrag wurde vor mehr als 3 Jahren veröffentlicht. Daher kann es sein, dass sein Inhalt oder ein Teil davon nicht mehr aktuell ist.
Hier kommt das Feature, auf das ich mich persönlich am meisten freue. Die Xbox Series X wir hardwarebeschleunigtes Raytracing unterstützen. Doch was heißt das und warum ist das so eine große Sache? Ganz einfach: Bei den heutigen Auflösungen und Details beeinflusst nichts mehr so die Qualität des Bildes als die Beleuchtung im Spiel und genau hier kommt Raytracing ins Spiel.
Frei übersetzt könnte man Raytracing mit „Strahlenverfolgung“ übersetzen. Prinzipiell ist das nichts Neues, denn es wird in 3D-Renderings im Businessbereich aber auch in 3D animierten Filmen bereits seit Jahren verwendet, also warum kommt das Thema jetzt erst im Bereich Gaming auf und warum sind alle so begeistert davon? Das liegt einfach daran, dass Raytracing eine unfassbar „teure“ Technologie ist. Die Berechnungen die dafür notwendig sind, brauchen extrem viel Performance und diese wird für gewöhnlich lieber für höhere Auflösungen, höhere Bildraten oder detailliertere Umgebungen oder Charaktermodelle genutzt.
In 2018 kam dann aber NVIDIA um die Ecke und brachte Grafikkarten der RTX-Reihe raus, welche so genannte RT-Cores hatte. Also Recheneinheiten, die sich explizit um Raytracing kümmern. Die Grafikkarte kann sich ganz normal um die Darstellung kümmern und der RT-Core kümmert sich um die Beleuchtung der Szene in Echtzeit. Das hat die aktuelle Gaming-Grafik ziemlich revolutioniert, da auf einmal keine Tricks mehr nötig waren, um Reflektionen darzustellen und davon gibt es einige.
Doch was ist Raytracing?
Vereinfacht gesagt ist Raytracing eine Simulation wie das Licht sich verhält. Bisher wurde das Ganze nur emuliert, jetzt kann es simuliert werden. Bisher war es also so, dass man eine Lichtquelle im Spiel hatte und diese so weit reiste, bis sie auf ein Hindernis stieß, welches das Licht blockiert. Wollte man als Entwickler aber zum Beispiel, dass das Licht von der Wand reflektiert, um ein nebenstehendes Objekt zu beleuchten, dann musste man eine weitere Lichtquelle setzen, um das zu emulieren. Also so zu tun, als wäre es eine echte Reflektion. Das ist nicht nur super aufwendig, sondern kostet auch extrem viel Rechenleistung, nicht so viel wie Raytracing, aber der Aufwand ist es einfach nicht wert.
Raytracing hingegen ist dazu fähig zu berechnen, wie ein Lichtstrahl sich verhalten würde. Es wird die Stärke des Lichts definiert und Oberflächen haben Definition, wie viel Licht sie schlucken und wie viel reflektieren. Nun hat man also das Licht aus dem ersten Beispiel und es trifft auf die Wand, die dieses Licht nicht mehr blockiert, sondern im richtigen Winkel reflektiert. Das ganze nennt man dann Bounce Lighting, also frei übersetzt, abprallendes Licht. Das Ganze kann mehrfach wiederholt werden und das ist es, was die Technik so rechenintensiv bzw. teuer macht.
An den Oberflächen ist allerdings auch nicht nur definiert, wie viel Licht reflektiert werden soll, sondern z.B. auch, welche Farbe dieses Licht haben soll. Habe ich eine rote Wand, dann wird das Licht durch Raytracing nicht weiterhin weiß reflektiert, sondern die aktuelle Farbe addiert sich zur Farbe der Wand. Ist die nächste reflektierende Oberfläche dann z.B. blau, könnte ein Lila entstehen. Indirektes Licht ist durch Raytracing nun also endlich möglich.
Ebenso werden echte Reflektionen in spiegelnden Oberflächen deutlich erleichtert. Man kennt es in vielen Spielen, dass wenn man an einem Spiegel vorbeiläuft und man sieht sich nicht. Oder der Spiegel ist so dreckig, dass die Spiegelung nur eine sehr matschige Version von einem selbst zeigt. Das liegt daran, wie Reflektionen heute dargestellt und emuliert werden. Mit Raytracing können auch Elemente reflektiert werden, die nicht im Bild sind und das erlaubt viele Licht-Szenarien, die so vorher nicht möglich waren.
Die bisherigen Methoden und ihre Nachteile
Es gibt derzeit zwei große Techniken welche die Reflektionen, wie wir sie kennen, ermöglichen. Das sind einmal so genannte Screen Space Reflections und zum Anderen Cubemap Reflections. Beide haben ihren Nutzen und ihre Vor- und Nachteile. Aber wo sich alle sind: Sie haben keine Vorteile gegenüber Raytracing, wenn die Hardware es denn zulässt und die Xbox Series X ist dazu in der Lage echtes Raytracing zu erlauben.
Screen Space Reflections
Frei übersetzt wäre das wohl sowas wie die Reflexion des Bildschirmbereichs und das beschreibt es ganz gut. Mit Screen Space Reflections kann alles gespiegelt werden, was auf dem Bildschirm sichtbar ist. Alles was nicht sichtbar ist, hat keine Bildinformationen und kann somit auch nicht reflektiert werden, egal ob es gerendert wurde oder nicht. Den meisten fällt dieser Nachteil nicht auf und in vielen Spielen wird gezielt versucht das zu umgehen. Aber gerade in Spielen mit vielen Lichtern fällt es teils sehr stark auf.
Nehmen wir GTA V als Beispiel. In der Stadt hat es geregnet und es ist Nacht. Die Pfützen auf den Straßen reflektieren Ampeln, Fensterbeleuchtung und Reklametafeln. Das funktioniert auch super. Solange die Lichtquellen nicht zu weit oben sind oder man nach unten schaut. Denn alles was nicht sichtbar ist, kann auch nicht reflektiert werden. In folgendem Video sieht man das Problem ganz gut:
Was aber auffällt, einige Dinge werden weiterhin reflektiert, auch wenn andere Bereiche verschwinden. Und hier kommen die Qubemap Reflections ins Spiel, welche zumindest so tun, als wäre da noch was zum reflektieren.
Cubemap Reflections
Hierbei handelt es sich um ein statisches Bild, die um einen Würfel gelegt werden, also quasi auf ihn „gemapped“ werden. Daher der Name Cubemap. Und hier haben wir auch direkt das Problem: Das Bild ist statisch. Hier werden fixe Elemente genommen und auf diesem Bild untergebracht, um sie immer reflektieren zu können. Bei Screen Space Reflections sind es dynamischen Elemente, die reflektiert werden. Also sich veränderte Lichter oder Elemente. Es gibt zwar Techniken, die Cubemap immer wieder auszutauschen, aber das ist sehr rechenintensiv und lohnt sich oft nicht.
Da die Lichter im GTA V-Beispiel z.B. immer dynamisch sind, also nicht immer dieselben Lichter nachts eingeschaltet sind, kann hier z.B. keine Cubemap verwendet werden, um diese zu reflektieren, außer man beschränkt sich auf ein paar bestimmte Lichtkonfigurationen und legt diese dann zusätzlich ab. Das ist in der Regel nicht praktikabel und wird daher auch sehr selten gemacht. Besonders bei Spielen mit sehr dynamischen Wettersystemen, bei denen man nicht einmal weiß, welche Farbe gerade vom Himmel kommt. Auch sind heutige Städte in Spielen viel zu groß, so hat nicht jedes Gebäude seine eigene Cubemap, sondern es gibt meist pro Viertel eine und die Reflektionen spiegeln nicht immer das wieder, was gegenüber eines z.B. Schaufensters ist.
Beides wird vollkommen überflüssig, wenn man Raytracing nutzt, denn hier wird wie gesagt nichts mehr emuliert (also so getan, als wäre es so), sonder simuliert (also berechnet, wie es wirklich sein würde). Die Lichter sind im Speicher, auch wenn sie nicht auf dem Bildschirm sichtbar sind und somit können sie auch reflektiert werden. Es erfordert deutlich mehr Rechenleistung aber für die Entwickler deutlich weniger Arbeit bei Ergebnissen, die um ein Vielfaches besser sind. Und durch den gesonderten Chip, der sich nur um Raytracing kümmert, ist die Sache mit der Rechenleistung auch nicht mehr so dramatisch.
Ein schönes Video was zeigt, was Raytracing so kann und wie viel Licht und Reflektionen ausmachen können kommt von NVIDIA, die in Zusammenarbeit mit Microsoft Minecraft mit Raytracing ausgestattet haben. Einen Screenshot davon sieht man oben als Beitragsbild. Hier wurden sämtliche Texturen so überarbeitet, dass sie die Informationen haben, wie sie das Licht reflektieren sollen, sonst ist aber alles gleich geblieben und der Unterschied ist mehr als Tag und Nacht. Aber seht selbst:
Ich persönlich freue mich auf jeden Fall sehr darauf, da mir das Problem mit den Screen Space Reflections leider bei jedem Spiel sehr stark auffällt und ich es langsam leid bin. Der Nachteil, wenn man sich technisch für sowas sehr interessiert und dadurch die Hintergründe kennt. Man achtet einfach mehr drauf und es stört einen mehr. Das kenne ich auch aus meinem Beruf als Webentwickler, glaubt mir: Das Internet ist ein schrecklicher Platz und ich ärgere mich regelmäßig wie schlecht bestimmte Bereiche in Websites umgesetzt sind, obwohl der Aufwand hier minimal wäre. :D
Damit beende ich diese Beitragsreihe auch erstmal. Die meisten Begriffe aus dem Beitrag von Phil Spencer zur Xbox Series X sollten jetzt klar sein und für solche Sachen wie Dynamic Latency Input gibt es einfach noch nicht genug Infos. Mehr als »Der Controller reagiert schneller« kann man dazu einfach noch nicht sagen. Und Raytraced Audio lässt sich auch schnell beschreiben: Alles aus dem Beitrag hier, nur eben den Sound eines Spiels übertragen.
Wenn ihr aber noch fragen habt, gerne auf Twitter oder hier in den Kommentaren, dann beantworte ich diese natürlich so gut ich kann und wenn es sich anbietet, gibt es einen weiteren Beitrag in dieser Reihe. Alle Beiträge dazu findet ihr auf jeden Fall auf dieser Seite. Sobald es neue Informationen zur Xbox Series X gibt, welche Erklärung bedürfen, kommt natürlich ein weiterer Beitrag dazu :)