Die Illusion von Raum: Wie der neue Spiderman Räume ohne Geometrie rendert

Published on October 01, 2018

Die Illusion von Raum: Wie der neue Spiderman Räume ohne Geometrie rendert

Ursprünglicher Autor: Joost van Dongen
  • Übersetzung

In dem kürzlich veröffentlichten Spider-Man-Spiel von Marvel haben viele Gebäude außerhalb der Fenster ein Interieur. Sie sehen gut aus, scheinen aber mit cleverem Rendering implementiert worden zu sein - die Geometrie der Innenräume existiert nicht wirklich und wird vom Shader generiert. Ich habe keine offiziellen Aussagen von Insomniac darüber gesehen, wie sie es gemacht haben, aber auf der Grundlage des Effekts wird wahrscheinlich die Technik der inneren Kartierung implementiert , die ich 2007 bei der Arbeit an meiner Dissertation entwickelt habe. Früher habe ich nicht in einem Blog darüber geschrieben, deshalb ist jetzt der richtige Zeitpunkt, um den merkwürdigen kleinen Shader zu erklären, den ich mir ausgedacht habe.

Beginnen wir mit Marvels Spider-Man-Gameplay. Das Spiel sieht einfach toll aus. Site Kotaku hat ein separates Video zu den Fenstern aufgenommen:


Wie Sie in etwa 40 Sekunden Video sehen können, sind Räume nicht Teil der Geometrie: Wo es offensichtlich ein Fenster geben sollte, gibt es eine Tür. Darüber hinaus sehen wir in einem Raum aus verschiedenen Blickwinkeln des Gebäudes ein anderes Interieur. In einigen Fällen befindet sich sogar eine Mauer um die Ecke des Gebäudes. All dies macht uns verständlich, dass Räume simuliert werden. In Bezug auf die Perspektive werden sie jedoch korrekt angezeigt und weisen eine echte Tiefe auf.Ich denke, die Nachteile solcher Räume beim Spielen sind nicht sehr wichtig, weil die Spieler Räume normalerweise nicht so genau studieren: Innenräume sind nur der Hintergrund und nicht Gegenstand sorgfältiger Untersuchungen. Ich glaube, dass diese Art der Raumgestaltung einer Stadt Tiefe und Leben verleiht, ohne zu viel Ressourcen aufzuwenden.


Um Ressourcen zu sparen, haben Gebäude in Spielen oft kein Interieur, wie im Screenshot von GTA V zu sehen ist.

Zunächst möchte ich erklären, dass mein Beitrag keine Beschwerde ist: Ich freue mich, dass meine Technik in einem so großen Spiel und in keiner Weise eingesetzt wurde Ich beschuldige Insomniac nicht, gestohlen zu haben. Wie ich bereits in der ersten Veröffentlichung zum Thema Interior Mapping sagte, wäre es mir eine Ehre, wenn jemand diese Technik anwenden würde. Wenn Insomniac meine Idee in meiner Technik wirklich ausgenutzt hat, finde ich das großartig. Wenn sie nicht benutzt wird, scheint sie sich etwas Seltsames einfallen zu lassen. Dann würde mich interessieren, wie es gemacht wurde.

Wie funktioniert die Innenaufteilung? Die Idee ist, dass das Gebäude selbst keine zusätzliche Geometrie enthält. Innenräume existieren nur im Shader. Dieser Shader führt ein Raycasting mit Wänden, Decken und Böden durch, um zu berechnen, was der Spieler im Innenraum sehen soll.


Von links nach rechts: nur Fenster mit Reflexionen, Fenster mit Innenabbildung, ein Rahmenmodell - Innenabbildung fügt keine Polygone hinzu.

Ein Raycast, der für Raycasts verwendet wird, ist einfach ein Strahl von einer Kamera zu einem Pixel. Das Pixel, das wir rendern, befindet sich außerhalb des Gebäudes. Daher wird nur ein Teil des Strahls pixelweise verwendet, da dies genau der Teil ist, der sich tatsächlich im Gebäude befindet.

Raycasting mag wie eine komplizierte und kostspielige Operation erscheinen, aber in diesem speziellen Fall ist es tatsächlich sehr einfach und schnell. Der Trick ist, dass Sie eine einfache Einschränkung hinzufügen können: Bei der Innenaufteilung befinden sich die Decken und Böden in einem konstanten Abstand. Wenn wir das wissen, können wir leicht herausfinden, in welchem ​​Raum wir uns befinden und wo sich der Boden und die Decke in diesem Raum befinden. Decken und Böden selbst sind unendlich geometrische Ebenen. Die Berechnung des Schnittpunkts zwischen der unendlichen Ebene und dem Strahl erfordert nur wenige Schritte und verbraucht nur wenig Ressourcen.


Der Raum hat 6 Ebenen: Decke, Boden und 4 Wände. Wir müssen jedoch nur drei davon berücksichtigen, da wir wissen, in welche Richtung wir schauen. Wenn wir zum Beispiel nach oben schauen, müssen wir den Boden darunter nicht überprüfen, da wir die Decke darüber sehen. In ähnlicher Weise müssen wir anstelle von 4 Wänden nur zwei in der Richtung betrachten, in die wir schauen.

Um zu bestimmen, was wir sehen, müssen wir den Schnittpunkt des Strahls mit jeder dieser drei Ebenen berechnen. Der Schnittpunkt mit dem Strahl, der der Kamera am nächsten liegt, gibt Auskunft darüber, welche der Ebenen in diesem Pixel zu sehen sind. Dann verwenden wir den Schnittpunkt als Koordinate der Textur, um die Farbe des Pixels zu ermitteln. Wenn sich der Strahl beispielsweise an der Position (x, y, z) mit der Decke schneidet, verwenden wir die Texturen (x, y) als Koordinaten und ignorieren z.

Hier habe ich eine gute Optimierung hinzugefügt: Ein Teil der Schnittberechnungen für jede der drei Ebenen kann gleichzeitig durchgeführt werden. Die verwendeten Shader arbeiteten mit float4 mit der gleichen Geschwindigkeit wie mit float, so dass dank der geschickten Variablenverpackung Schnittpunkte aller drei Strahlen mit den Ebenen gleichzeitig durchgeführt werden konnten. Dies hat mir einige Ressourcen gespart und mir geholfen, auch 2007 eine hohe Bildrate bei der Innenabbildung zu erzielen. Mir wurde gesagt, dass moderne Grafikkarten mit float schneller funktionieren als mit float4; Dies bedeutet, dass diese Optimierung auf der aktuellen Hardware nicht mehr funktioniert.


Die Innen-Zuordnung ohne Fenstertexturen zeigt, dass Räume mit der richtigen Perspektive und mit Texturen gerendert werden, obwohl keine zusätzliche Geometrie erforderlich ist.

Weitere Details zur Arbeit des Interior Mappings finden Sie in meinem Artikel . Dieser Artikel wurde 2008 auf der Computer Graphics International Conference veröffentlicht. Das Vorhandensein dieser begutachteten Publikation ist meine erste (und einzige) Bewerbung für den stolzen Titel eines Wissenschaftlers. In diesem Artikel werden auch zusätzliche Experimente zum Hinzufügen von Details beschrieben, z. B. Ändern des Wandabstands für ungleich große Räume und zufällige Auswahl von Texturen aus einem Texturatlas für eine größere Variabilität der Räume. Außerdem werden die beiden in den folgenden Abbildungen gezeigten Varianten ausführlich beschrieben.


Die Beleuchtung in den Räumen kann dynamisch ein- und ausgeschaltet werden, um Tag und Nacht zu simulieren. Dies geschieht unter Verwendung der Rauschtextur, aus der wir lesen, wobei der Raumindex als Koordinaten der Textur verwendet wird.

Da wir im Flugzeug nur Strahlen aussenden, sind alle Räume einfache Quadrate mit Texturen. Alle Möbel im Raum werden auf der Textur sein und bleiben daher flach. Bei Spiderman macht sich dies bei der Annäherung an die Kamera bemerkbar: Die Tische in den Räumen sind ebene Texturen an den Wänden. Wie im Bild unten zu sehen ist, können Sie unsere Technik durch eine oder mehrere zusätzliche Schichten von Texturen pro Raum ergänzen, was jedoch auf die zusätzlichen Leistungskosten zurückzuführen ist.


Durch Raytracing auf einer anderen Ebene parallel zur Außenfläche des Gebäudes können Sie dem Raum Möbel und Personen hinzufügen. Sie bleiben jedoch weiterhin flach.

Nach der Veröffentlichung dieses Beitrags teilte mir einer der Programmierer von Simcity (2013) mit, dass in diesem Spiel auch die Technik der inneren Zuordnung verwendet wurde. In ihr sieht sie sehr cool aus und die Entwickler haben ein großartiges Video darüber aufgenommen. Sie haben meine ursprüngliche Idee perfektioniert, indem sie alle Texturen in einer Textur gespeichert und Räume mit unterschiedlichen Tiefen hinzugefügt haben. Der innere Zuordnungsteil beginnt um 1:00 Uhr:


Wenn Sie diese Technik genauer kennenlernen möchten, können Sie meine Interior-Mapping-Demo mit dem Quellcode herunterladen . Wenn Sie in Unreal Engine 4 arbeiten, können Sie Interior Mapping als Standard-Engine-Funktion als Funktion von InteriorCubeMap finden.

Nach so vielen Jahren ist es sehr cool, endlich zu sehen, dass meine Interior-Mapping-Technik für die Produktion von Videospielen in großem Maßstab verwendet wird! Wenn Sie mit Spielen vertraut sind, die etwas Ähnliches verwenden, dann schreiben Sie mir darüber.