Bei alten Spielen wie Mario64 oder DukeNukem3D handelt es sich bei allen Spiegeln des Spiels im Wesentlichen nur um Löcher in der Wand, hinter denen eine gespiegelte Kopie der Geometrie vor dem Spiegel platziert ist. Im Falle von DukeNukem3D kann man sogar No-Clip aktivieren und in diesen gespiegelten Raum gehen.
Im Gegensatz dazu verwenden moderne Spiele einen Render-to-Texture-Ansatz für Spiegel. Dies führt dazu, dass die Spiegel bei Annäherung merklich pixelig werden. Eines der ersten Spiele, denen ich auffiel, war Luigi's Mansion, aber es scheint in fast allen modernen Spielen verwendet zu werden.
Welche Änderungen an der Hardware oder den Engines haben dazu geführt, dass der zweite Ansatz heutzutage so dominant geworden ist, und welche Vorteile hat er? In Bezug auf reine Grafiken scheint der erste Ansatz überlegen zu sein, da keine Pixelprobleme auftreten.
Antworten:
Grundsätzlich bietet die Verwendung von RTT mehr Freiheit für alle.
quelle
Nein, Sie irren sich - so haben die Spiegel von Duke Nukem 3D überhaupt nicht funktioniert.
DN3D verwendete eine Portal-Engine . Eine Verbindung zwischen zwei beliebigen Sektoren war zu einem gewissen Grad willkürlich, und als die Rendering-Engine zu einem Portal kam, wusste sie, dass sie damit beginnen musste, einen anderen Sektor in diesem zu rendern. Der Sektor hinter dem Spiegel war im Grunde genommen ein Platzhalter, um mit einer Eigenart des Motors fertig zu werden - der einzige Punkt des Sektors bestand darin, größer zu sein als das, was man "reflektiert" haben musste. Es enthielt keine echte Geometrie. Tatsächlich funktionierte es ziemlich genau so, wie "Portale" in Portal funktionieren - mit der Ausnahme, dass Portal (das auf einer Portal-Engine basiert) die Portale zur Laufzeit erstellt und die Häufigkeit der Portale begrenzt ist (z. B. A) -> B -> A -> B -> A ...), während Build (DN3D) einfach abstürzt, wenn der Stapel überläuft und Sie einen Spiegel auf einen anderen Spiegel richten.
Es ist offensichtlich, wie einfach es ist, damit einen Spiegel zu implementieren - ein Portal zu erstellen, das zurück in den Raum zeigt. Dies bedeutete, dass das Rendern des Spiegels genau so viel kosten würde wie das Rendern des Raums selbst, was eine hervorragende Leistung und Konsistenz ergibt. So lange Sie keinen Spiegel auf einen anderen gerichtet haben. Wenn Sie den Quellcode der Build-Engine durchsehen, werden Sie feststellen, dass
es überhaupt keine Spiegel für die Codebehandlung gibt - es muss keinen geben, da Portale so funktionieren.HINWEIS: Es gibt tatsächlich Code, um die gerenderten Pixel zu spiegeln - es Kippt einfach nicht die Geometrie und die verschiedenen Sprites und Effekte. Der Redakteur musste jedoch in der Lage sein, diese "gefälschten" Portale zu erstellen - im Rückblick auf sich. Wenn Sie mehr über die ziemlich intelligente Build-Engine erfahren möchten, gibt es eine großartige Analyse von Fabien Sanglard unter Interna der Build-Engine . Die gesamte Engine wurde als Open-Source-Engine entwickelt und auf moderne Plattformen portiert, obwohl die alte Engine unter Windows 10 noch einwandfrei funktioniert (für Sie getestet: P). Viele der auf Build basierenden Spiele wurden auch aus Open-Source-Quellen hergestellt und / oder neu erstellt.Warum wird das nicht mehr verwendet? Nun, einige Motoren bevorzugen nicht länger Portale. Es ist schwierig, viele Grafik-Hacks und -Optimierungen anzuwenden - ich kann Sie nicht auf etwas Bestimmtes hinweisen, aber viele Nachbearbeitungen hängen von Hacks ab, die in einer echten Portal-Engine nicht funktionieren würden (sie gehen von einer Menge Annahmen aus) nicht mehr halten). Dies ist im Grunde das gleiche Problem, das diese Spiele mit stereoskopischen Bildern haben - die Hacks funktionieren nicht mehr.
Vor allem wurden Spiegel komplizierter. Sie können komplexe Formen und Texturen haben, sich auf dem Boden befinden (auch als "Wasser" bekannt) usw. Während alle diese Probleme in einer Portal-Engine lösbar sind, wird RTT zu einer einfacheren Wahl und GPUs sind schnell genug damit umgehen.
Trotz alledem gibt es viele Spiele mit 3D-Hardwarebeschleunigung, die die Dinge "real" machen. Von den älteren Spielen zum Beispiel Quake 3 oder Alien vs. Predator. Soweit ich weiß, verwenden Source-Engine-Spiele immer noch "echte" Spiegel. Wenn Sie damit rechnen, dass sich Menschen dem Spiegel nähern und Sie sicherstellen können, dass nicht zu viele reflektierende Oberflächen gleichzeitig vorhanden sind (z. B. durch ebenes Design), sind Portalspiegel nach wie vor sehr attraktiv.
quelle
RTT wäre verwendet worden, wenn es möglich gewesen wäre, aber die Hardware-Rendering-Pipeline war eine Möglichkeit.
Ältere Hardware hatte auch Einschränkungen, die das Rendern von Texturen verhinderten. Das Schreiben in den Arbeitsspeicher bedeutet, dass nicht gleichzeitig gelesen werden kann. Um die Renderleistung zu verbessern, wurde der Zielpuffer nur zum Schreiben gesperrt, nur die Anzeige-Hardware konnte daraus lesen. Sie könnten das Lesen anfordern, aber das hat den RAM gesperrt und das Rendern musste warten, bis die Sperre aufgehoben wurde, bevor es den nächsten Frame starten konnte. RTT würde einen großen Engpass in der Pipeline verursachen, und daher wurden andere Lösungen verwendet.
Bevor Hardware-Rendering-Pipelines die Norm waren, wurde RTT verwendet, um die Rendering-Last zu reduzieren. 3D-Rendering für Sprites zur Bereitstellung von Pseudo-3D-Inhalten. Das Rendern von Texturen war damals viel zu kostspielig (CPU), um verwendet zu werden, abgesehen von Spezialmaschinen, die außerhalb des allgemeinen Verbrauchermarktes lagen.
quelle
Duke Nukem behandelt, dass die anderen Antworten teilweise korrekt sind, wenn die Geometrie hinter dem Spiegel neu gerendert wird. Es gibt Bereiche hinter Spiegeln, die tatsächlich keine Geometrie enthalten (in Spieledatendateien). Die Geometrie wird zur Laufzeit tatsächlich neu gerendert. Der Grund für die Existenz dieser Bereiche besteht darin, zu vermeiden, dass beim Bearbeiten des Levels versehentlich ein Teil des Levels dort platziert wird :
da es sich um einen markierten Bereich handelt, wird dort keine Geometrie versehentlich platziert.
quelle