Exzellentes Spiel Sie spielen den neuesten Call of Mario: Deathduty Battleyard auf Ihrem PC. Sie blicken auf einen wunderschönen 4K-Ultra-Breitbild-Monitor und bewundern die atemberaubende Landschaft und die komplizierten Details. Haben Sie sich jemals gefragt, wie diese Grafiken dorthin gekommen sind? Sie fragen sich, was Ihr PC tut, um dies zu tun?

Willkommen zu unserer 101 zur Erstellung von 3D-Spielen: Eine Anleitung für Anfänger, wie man ein grundlegendes Framework für Spielgüte erstellt.

Jedes Jahr werden weltweit Hunderte neuer Spiele veröffentlicht - einige für Mobiltelefone, andere für Konsolen, andere für PCs. Die behandelten Formate und Genres sind ebenso umfangreich, aber es gibt ein Genre, das von Spieleentwicklern wahrscheinlich mehr als jedes andere Genre entdeckt wurde: 3D. Die erste Diskussion der ersten und ein kurzer Scan der Diskussionen Guinness Weltrekorde Datenbank generiert verschiedene Antworten. Wir hätten Knight Lore von Ultimate, das 1984 veröffentlicht wurde, als würdigen Start wählen können, aber die in diesem Spiel erstellten Bilder waren ausschließlich 2D-gesprochen - kein Teil der verwendeten Informationen ist wirklich 3D.

Wenn wir also verstehen wollen, wie das heutige 3D-Spiel seine Bilder erzeugt, brauchen wir ein anderes Starter-Beispiel: Siegerlauf Von Anfang an alles in drei Dimensionen zu tun, war das erste seiner Art, bei dem Techniken verwendet wurden, die vielleicht keine Million Meilen von dem entfernt sind, was jetzt passiert. Natürlich wird jedes Spiel über 30 nicht das gleiche sein wie das F1 2018 des Codemasters, aber das grundlegende Schema, sie alle zu machen, ist nicht viel anders.







In diesem Artikel untersuchen wir den Prozess, dem ein 3D-Spiel folgt, um ein Grundbild für einen Monitor oder Fernseher zu erstellen. Wir beginnen mit der Schlussfolgerung und fragen uns: "Was schaue ich an?"

Von dort aus analysieren wir jeden Schritt, um das Bild zu erhalten, das wir sehen. Auf dem Weg werden wir Software und Anweisungen wie Eckpunkte und Pixel, Texturen und Übergänge, Puffer und Schattierungen behandeln. Wir werden auch untersuchen, wo die Grafikkarte für all diese Geräte geeignet ist und warum sie benötigt wird. Mit diesem 101 werden Sie Ihre Spiele und Ihren PC in einem neuen Licht betrachten und diese Grafiken mit etwas mehr Bewunderung schätzen.




Abmessungen des Rahmens: Pixel und Farben

Beginnen wir mit einem 3D-Spiel, also haben wir zunächst etwas und werden wahrscheinlich die 2007-Version von Crytek aus keinem anderen Grund als dem wertvollsten Spiel aller Zeiten verwenden. Crysis. Im Bild unten suchen wir nach dem Kamerabild des Monitors, der das Spiel zeigt.




Dieses Bild normalerweise Rahmenaber was genau schauen wir uns an? Verwenden Sie eine Makroobjektivkamera anstelle eines Screenshots im Spiel. CSI: TECH NEWS und fordern Sie jemanden, es zu verbessern!




Leider sind die Bildschirmblendung und die Hintergrundbeleuchtung den Bilddetails voraus, aber wenn wir sie etwas verbessern ...




Wir können sehen, dass der Rahmen auf dem Monitor aus einem Raster einzelner farbiger Elemente besteht, und wenn wir genau hinschauen, bestehen die Blöcke selbst aus 3 kleinen Bits. Eins zu drei Pixel (Abkürzung für Bildelement) und die meisten Monitore malen sie in drei Farben: Rot, Grün und Blau (auch bekannt als RGB). Für jeden neuen Frame, der vom Monitor angezeigt wird, muss eine Liste von Tausenden, wenn nicht Millionen von RGB-Werten erstellt und in einem Speicherbereich gespeichert werden, auf den der Monitor zugreifen kann. Diese Arten von Speicherblöcken werden aufgerufen Tamponsnatürlich zum Monitor Bildspeicher, Framebuffer.

Dies ist eigentlich der letzte Punkt, mit dem wir begonnen haben. Jetzt müssen wir zum Anfang gehen und den Prozess durchlaufen, um dorthin zu gelangen. Name Gips es wird oft verwendet, um es zu beschreiben, aber die Wahrheit ist, dass es eine lange Liste von verknüpften, aber unterschiedlichen Stadien ist, die sich in Bezug auf das, was sie sind, stark voneinander unterscheiden. Stellen Sie sich vor, Sie wären Koch und würden eine Mahlzeit zubereiten, die einem mit einem Michelin-Stern ausgezeichneten Restaurant würdig ist: Das Ergebnis ist ein Teller mit leckerem Essen, aber es gibt viel zu tun, bevor Sie hineinkommen. einige Grundzutaten.

Bausteine ​​benötigt: Modelle und Texturen

Die Grundbausteine ​​eines 3D-Spiels sind die visuellen Elemente, die die zu erstellende Welt füllen. Filme, Fernsehsendungen, Theaterproduktionen und dergleichen brauchen Schauspieler, Kostüme, Requisiten, Hintergründe, Lichter - die Liste ist ziemlich groß. 3D-Spiele sind nicht anders und alles, was in einem erstellten Framework zu sehen ist, wird von Künstlern und Modellierern entworfen. Um dies zu veranschaulichen, gehen wir zur alten Schule und schauen uns ein Modell aus der Quake II-Identität von Software an:

Quake II wurde vor 20 Jahren veröffentlicht und war wie jedes zwanzigjährige 3D-Spiel ein technologisches Tour-Kraftpaket, obwohl die Modelle ein wenig blockig aussahen. Dies macht es jedoch einfacher zu erkennen, warum diese Entität erstellt wurde.

Im ersten Bild können wir sehen, dass der klobige Freund verbundene Dreiecke bildet, von denen jedes als Eckpunkte bezeichnet wird. Ecke oder der Peak für eine davon. Jeder Scheitelpunkt fungiert als Punkt im Raum, so dass er mindestens 3 Zahlen hat, um ihn zu beschreiben, d. H. x-, y-, z-Koordinaten. Ein 3D-Spiel benötigt jedoch mehr als das, und jeder Scheitelpunkt hat einen zusätzlichen Wert, wie z. B. die Farbe des Scheitelpunkts, die Richtung, in die er zeigt (ja, die Punkte können eigentlich nirgendwo hinschauen ... rollen Sie einfach mit!). Wie hell und durchscheinend er ist. ob oder nicht usw.

Eine bestimmte Menge von Werten, die Eckpunkte immer haben, Texturkarten. Dies ist ein Bild der "Kleidung", die das Modell tragen sollte. Da es sich jedoch um ein einfaches Bild handelt, sollte die Karte eine Ansicht für jede mögliche Richtung enthalten, in die wir das Modell betrachten können. In unserem Quake II-Beispiel können wir sehen, dass dies ein ziemlich einfacher Ansatz ist: vorne, hinten und an den Seiten (Armen). Ein modernes 3D-Spiel verfügt tatsächlich über mehrere Texturkarten für Modelle, die jeweils sehr detailliert sind. Einige der Karten sehen nicht wie Materialien oder Merkmale aus, sondern enthalten Informationen darüber, wie Licht von der Oberfläche reflektiert wird. Jeder Scheitelpunkt enthält einen Satz von Koordinaten in der zugehörigen Texturabbildung des Modells, sodass er am Scheitelpunkt "verbunden" werden kann. Dies bedeutet, dass sich die Textur mitbewegt, wenn der Scheitelpunkt verschoben wird.

In einer 3D-gerenderten Welt beginnt alles, was gesehen wird, als Eckpunkte und eine Sammlung von Texturkarten. Sie werden in miteinander verknüpften Speicherpuffern zusammengefasst - a Eckstoßstange enthält Informationen zu Ecken; einer Verzeichnispuffer es zeigt uns, wie die Ecken verbunden sind, um Formen zu bilden; einer Schweißpuffer enthält Speichergewebe und Teile, die für die spätere Verwendung beim Rendern reserviert sind; einer Befehlspuffer Liste der Anweisungen, was mit allen zu tun ist.

Dadurch wird der erforderliche Rahmen erstellt, der zum Erstellen des endgültigen Rasters aus farbigen Pixeln verwendet wird. Bei einigen Spielen kann es zu großen Datenmengen kommen, da es sehr langsam ist, die Puffer für jeden neuen Frame neu zu erstellen. Die Spiele speichern alle Informationen, die erforderlich sind, um die gesamte potenziell sichtbare Welt zu erstellen, in Puffern zu speichern oder eine Vielzahl von Ansichten abzudecken und sie dann nach Bedarf zu aktualisieren. Zum Beispiel wird ein Rennspiel wie F1 2018 alles in einer großen Stoßstangensammlung enthalten, während ein Open-World-Spiel wie Bethesdas Skyrim Daten in die Stoßstangen hinein und aus diesen heraus bewegt, während sich die Kamera um die Welt bewegt.

Bearbeiten der Szene: Peak Stage

Mit allen verfügbaren visuellen Informationen beginnt ein Spiel mit der Verarbeitung für die visuelle Anzeige. Zunächst beginnt die Szene an einer Standardposition, alle grundsätzlich positionierten Modelle, Lichter usw. Dies ist das Nullquadrat - es ist der Ausgangspunkt der Diagramme und wird normalerweise nicht angezeigt, sondern einfach gerendert, um die Dinge am Laufen zu halten. Um zu zeigen, was in der Anfangsphase des Erstellungsprozesses passiert, Echtzeit-Rendering-Website. Öffnen wir es mit einem sehr einfachen "Spiel": einem Quader auf dem Boden.

Diese besondere Form enthält 8 Eckpunkte, die jeweils durch eine Liste von Zahlen erklärt werden, und sie bilden ein Muster mit 12 Dreiecken dazwischen. Sogar ein Dreieck oder ein ganzes Objekt Primitive. Während diese Grundelemente verschoben, gedreht und skaliert werden, durchlaufen Zahlen eine Reihe von mathematischen Operationen und werden entsprechend aktualisiert.

Beachten Sie, dass sich die Punktnummern des Modells nicht ändern, sondern nur die Werte, die angeben, wo sich die Welt befindet. Die Einbeziehung relevanter Mathematik würde den Rahmen dieses 101 sprengen, aber der wichtige Teil dieses Prozesses besteht darin, alles dahin zu bringen, wo es zuerst sein sollte. Dann ist es Zeit für eine Färbung.

Verwenden wir ein anderes Modell mit mehr als der zehnfachen Anzahl von Ecken, die der vorherige Quader hatte. Die grundlegendste Art der Farbwiedergabe verwendet die Farbe jedes Scheitelpunkts und berechnet dann, wie sich die Oberflächenoberfläche zwischen ihnen ändert. es ist bekannt als Interpolasyon.

Mehr Ecken in einem Modell zu haben, ist nicht nur realistischer, sondern liefert auch bessere Ergebnisse bei der Farbinterpolation.

In dieser Phase der Rendering-Sequenz kann die Wirkung von Licht auf die Szene detailliert untersucht werden. Beispielsweise kann vorgestellt werden, wie die Materialien des Modells Licht reflektieren. Solche Berechnungen müssen die Position und Richtung der Kamera berücksichtigen, die die Welt betrachtet, sowie die Position und Richtung der Lichter.

Es gibt eine Reihe verschiedener mathematischer Techniken, die hier verwendet werden können. Einige sind einfach, andere sehr komplex. Im obigen Bild sehen wir, dass der Prozess auf der rechten Seite schönere und realistischere Ergebnisse liefert, aber es überrascht nicht, dass die Arbeit länger dauert.

An dieser Stelle ist anzumerken, dass wir Objekte mit wenigen Eckpunkten im Vergleich zum neuesten 3D-Spiel betrachten. Gehen Sie in diesem Artikel etwas zurück und schauen Sie sich Crysis 'Bild genau an: Allein in dieser Szene gibt es mehr als eine Million Dreiecke. Wir können visuell verstehen, wie viele Dreiecke in einem modernen Spiel verschoben werden. Unigine's Valley Vergleich (herunterladen).

Jedes Objekt in diesem Bild wird durch verbundene Scheitelpunkte modelliert, sodass sie Grundelemente aus Dreiecken bilden. Durch Vergleich können wir einen Drahtgittermodus ausführen, mit dem das Programm die Kanten jedes Dreiecks mit einer hellweißen Linie rendern kann.

Bäume, Pflanzen, Felsen, Boden, Berge - alle bestehen aus Dreiecken, die jeweils nach Position, Richtung und Farbe berechnet werden, wobei die Position der Lichtquelle sowie die Position und Richtung der Kamera berücksichtigt werden. Alle an den Ecken vorgenommenen Änderungen müssen in das Spiel zurückgeführt werden, damit es weiß, wo sich alles befindet, um den nächsten Frame zu erstellen. Dies erfolgt durch Aktualisieren des Scheitelpunktpuffers.

Überraschenderweise ist dies nicht der schwierige Teil des Erstellungsprozesses, und mit der richtigen Hardware endet alles in nur einer Tausendstelsekunde! Zur nächsten Stufe.

Eine Dimension verlieren: Rasterisierung

Sobald alle Ecken durchgearbeitet sind und unsere 3D-Szene dort fertig ist, wo alles sein sollte, geht das Rendern in eine entscheidende Phase. Bisher war das Spiel wirklich dreidimensional, aber nicht das endgültige Bild. Das bedeutet, dass eine Reihe von Änderungen vorgenommen werden müssen, um die angezeigte Welt von einem 3D-Raum mit Tausenden von verbundenen Punkten in eine 2D-Leinwand mit einzelnen farbigen Pixeln zu verwandeln. . Bei den meisten Spielen umfasst dieser Vorgang mindestens zwei Schritte: Bildschirmbereichsprojektion ve Pixelierung.

Wenn Sie das Web-Rendering-Tool erneut verwenden, können Sie es erzwingen, um zu zeigen, wie das Volumen der Welt anfänglich in ein flaches Bild umgewandelt wird. Der Standort der Kamera, die die 3D-Szene betrachtet, befindet sich ganz links. Linien, die über diesen Punkt hinausgehen, Kegelstumpf (wie eine Art Pyramide) und alles in Kegelstumpf könnte möglicherweise im letzten Frame erscheinen. Eine kleine Straße nach Frustum Aussicht, - Dies ist eigentlich das, was der Monitor anzeigt, und ein ganzer Stapel Mathematik wird verwendet, um alles im Kegelstumpf aus der Perspektive der Kamera in das Sichtfeld zu projizieren.

Obwohl die Grafiken im Ansichtsfenster 2D angezeigt werden, sind die darin enthaltenen Daten immer noch 3D. Diese Informationen werden dann verwendet, um zu bestimmen, welche Grundelemente sichtbar sind oder sich überlappen. Dies kann überraschend schwierig sein, da ein Primitiv einen Schatten werfen kann, der im Spiel sichtbar ist, auch wenn er nicht primitiv sein kann. Es wird die Abschaffung von Primitiven genannt Keulen und es kann einen signifikanten Unterschied darin machen, wie schnell der gesamte Rahmen gerendert wird. Nachdem dies alles erledigt ist - sichtbare und unsichtbare Grundelemente sortieren, Dreiecke außerhalb meines Kegelstumpfes zusammenfassen usw. - Die letzte Phase von 3D wird geschlossen und der Rahmen wird durch Rasterung vollständig 2D.

Das Bild oben zeigt ein sehr einfaches Beispiel eines Frameworks, das ein Grundelement enthält. Das Pixelraster des Rahmens wird mit den Kanten der Form unten verglichen, und wo sie sich überlappen, wird ein Pixel zum Rendern markiert. Das Ergebnis im gezeigten Beispiel ist dem ursprünglichen Dreieck nicht sehr ähnlich, aber wir verwenden nicht genügend Pixel. Dies führte zu folgendem Problem: Überlappung, obwohl es viele Möglichkeiten gibt, damit umzugehen. Deshalb Lösung Dies hat einen großen Einfluss darauf, wie ein Spiel aussieht (die Gesamtzahl der im Frame verwendeten Pixel): Die Pixel repräsentieren nicht nur besser die Form der Grundelemente, sondern verringern auch den Effekt des unerwünschten Alias.

Wenn dieser Teil der Rendering-Sequenz abgeschlossen ist, hängt er von der großen ab: der endgültigen Farbe aller Pixel im Frame.

Bringen Sie die Lichter: Pixel Bühne

Jetzt kommen wir zu den schwierigsten Schritten in der Renderkette. Vor Jahren war es nichts anderes als Kleidung im Modell (auch als Texturen bekannt), die mit Informationen in Pixeln (zunächst aus den Ecken) um Objekte auf der Welt gewickelt wurde. Das Problem hierbei ist, dass während die Texturen und der Rahmen 2D sind, die Welt, an der sie befestigt sind, auf der obersten Stufe gebogen, verschoben und umgeformt wird. Es wird jedoch mehr Mathematik verwendet, um dies zu erklären, obwohl die Ergebnisse einige seltsame Probleme verursachen können.

In diesem Bild wird eine einfache Schachbrett-Texturkarte auf eine flache Oberfläche angewendet, die sich in die Ferne erstreckt. Das Ergebnis ist ein Durcheinander, bei dem der Spitzname seinen hässlichen Kopf nachwächst. Die Lösung enthält kleinere Versionen von Texturkarten ( Matching), wiederholte Verwendung von Daten aus diesen Geweben ( Filtration), und selbst Mehr Mathe, alles zusammen. Der Effekt davon ist ziemlich offensichtlich:

Früher war dies eine wirklich schwierige Aufgabe für jedes Spiel, aber nicht mehr, weil die großzügige Verwendung anderer visueller Effekte wie Reflexionen und Schatten dazu führt, dass das Rendern von Texturen zu einem relativ kleinen Teil des Pixels wird. Verarbeitungsstufe. Das Spielen von Spielen mit höheren Auflösungen führt zu einer höheren Arbeitsbelastung in der Raster- und Pixelphase des Renderprozesses, jedoch zu einer relativ geringen Auswirkung in der Spitzenphase. Obwohl die anfängliche Färbung aufgrund der Lichter in der Spitzenphase erfolgt, können hier auch hellere Lichteffekte verwendet werden.

Im obigen Bild können wir die Farbänderungen zwischen den Dreiecken nicht mehr leicht erkennen, was den Eindruck erweckt, dass dies ein glattes, nahtloses Objekt ist. In diesem speziellen Beispiel besteht die Kugel tatsächlich aus der gleichen Anzahl von Dreiecken, die wir sehen. grüne Kugel vor Die Pixelfarbroutine erweckt jedoch den Eindruck, dass sie viel mehr Dreiecke aufweist.

In vielen Spielen muss die Pixelstufe mehrmals ausgeführt werden. Zum Beispiel muss ein Spiegel oder eine Seeoberfläche, die die Erde von der Kamera aus reflektiert, bearbeitet worden sein, damit die Erde beginnen kann. Name jedes Übergangs bestehen und ein Rahmen kann leicht 4 oder mehr Übergänge enthalten, um das endgültige Bild zu erzeugen.

Manchmal muss auch die Bergbühne neu gezeichnet werden, um die Welt aus einer anderen Perspektive neu zu zeichnen und diese Ansicht als Teil der vom Spieler angezeigten Szene zu verwenden. Dafür Ziele setzen - Puffer, die als endgültiges Repository des Frames fungieren, aber in einem anderen Durchgang als Textur verwendet werden können.

Lesen Sie weiter, um die potenzielle Komplexität der Pixelstufe besser zu verstehen Rahmenanalyse von Adrian Courrèges und in diesem Spiel werden Sie von den unglaublichen Schritten überrascht sein, die erforderlich sind, um einen einzelnen Frame zu erstellen.

All diese Arbeiten am Frame müssen als fertiges Ergebnis oder als temporärer Speicher in einem Puffer gespeichert werden. Im Allgemeinen verfügt ein Spiel über mindestens zwei Puffer für die endgültige Ansicht: Einer ist "in Arbeit" und der andere wartet darauf, dass der Monitor auf den Bildschirm oder in der Anzeigephase zugreift. Es muss immer ein Frame-Puffer zum Erstellen vorhanden sein. Wenn alle voll sind, muss eine Aktion ausgeführt werden, um Dinge zu verschieben und einen neuen Puffer zu starten. Der letzte Teil beim Signieren eines Frames ist ein einfacher Befehl (z. verfügbar) und jedoch werden die letzten Bildpuffer geändert, der Monitor empfängt das zuletzt gerenderte Bild und das nächste Bild kann gestartet werden.

In diesem Bild von Ubisoft Assassins Creed OdysseyWir betrachten den Inhalt eines fertigen Bildpuffers. Stellen Sie sich das wie eine Tabelle mit Zeilen und Spalten vor, die nur Zahlen enthalten. Diese Werte werden als elektrisches Signal an den Monitor oder das Fernsehgerät gesendet und die Farbe der Bildschirmpixel wird auf die erforderlichen Werte geändert. CSI: TECH NEWS Weil wir es nicht mit unseren Augen machen können, sehen wir ein flaches, kontinuierliches Bild, aber unser Gehirn Tiefe - also 3D. Es ist ein Rahmen für Spielgüte, aber da hinter den Kulissen so viel los ist (sorry Wortspiel), ist es einen Blick wert, wie Programmierer mit all dem umgehen.

Prozess verwalten: APIs und Anweisungen

Zu verstehen, wie ein Spiel all diese Übungen ausführt und verwaltet (Mathematik, Ecken, Texturen, Lichter, Stoßstangen, Name…), ist eine Mammutaufgabe. Glücklicherweise gibt es Hilfe in Form von Aussagen Programmierschnittstelle oder kurz API.

Build-APIs reduzieren die Gesamtkomplexität, indem sie Bibliotheken mit Strukturen, Regeln und Code bereitstellen, mit denen Programmierer vereinfachte Anweisungen unabhängig von der beteiligten Hardware verwenden können. Wählen Sie ein 3D-Spiel aus, das in den letzten 3 Jahren für den PC veröffentlicht wurde. Es wird mit einer der drei bekannten APIs erstellt: Direct3D, OpenGL oder Vulkan. Es gibt andere, besonders in der mobilen Szene, aber wir werden uns an die für diesen Artikel halten.

Obwohl es Unterschiede in Bezug auf Anweisungen und Operationsanweisungen gibt (z. B. einen Codeblock zum Bearbeiten von Pixeln in DirectX, Pixel Shader;; Vulkan Teil Shader) sollte das Endergebnis des erstellten Rahmens nicht anders oder unterschiedlicher sein.

Es wird einen Unterschied geben, wo die gesamte Hardware, die für das Rendern verwendet wird, ausfällt. Dies liegt daran, dass die Anweisungen, die mithilfe der API zum Ausführen der Hardware gegeben werden, übersetzt werden müssen. Dies wird von den Treibern des Geräts übernommen, und die Hardwarehersteller müssen viel Ressourcen und Zeit aufwenden, um sicherzustellen, dass die Treiber die Konvertierung so schnell und genau wie möglich durchführen. möglich.

Verwenden wir eine frühere Beta-Version von Croteams Spiel 2014 Talos-Prinzip Zur Veranschaulichung, da es die 3 genannten APIs unterstützt. Um die Unterschiede zu maximieren, die die Kombination aus Treiber und Benutzeroberfläche manchmal hervorrufen kann, haben wir den integrierten Standard-Benchmark mit einer Auflösung von 1080p bei maximalen visuellen Einstellungen ausgeführt. Der verwendete Computer wurde zu Standardzeiten ausgeführt und verfügte über einen Intel Core i7-9700K, Nvidia Titan X (Pascal) und 32 GB DDR4-RAM.

  • DirectX 9 = durchschnittlich 188,4 fps
  • DirectX 11 = durchschnittlich 202,3 fps
  • OpenGL = durchschnittlich 87,9 fps
  • Vulkan = durchschnittlich 189,4 fps

Eine vollständige Analyse der Schlussfolgerungen hinter diesen Zahlen fällt nicht in den Geltungsbereich dieses Artikels, und dies bedeutet sicherlich nicht, dass eine API "besser" ist als eine andere (dies ist eine Beta-Version, denken Sie daran). Daher stellt die Programmierung für verschiedene APIs verschiedene Herausforderungen dar und ist derzeit weist darauf hin, dass sich die Leistung immer ändern wird. Im Allgemeinen wählen Spieleentwickler die API aus, mit der sie am meisten arbeiten, und optimieren ihren Code auf dieser Basis. Manchmal das Wort Motor- Es wird verwendet, um den Rendering-Code zu beschreiben, aber technisch gesehen ist eine Engine das komplette Paket, das alle Aspekte eines Spiels behandelt, nicht nur seine Grafiken.

Das Erstellen eines vollständigen Programms von Grund auf neu, um 3D-Spiele zu erstellen, ist keine einfache Sache. Daher lizenzieren viele Spiele heutzutage vollständige Systeme von anderen Entwicklern (z. Unwirkliche Engine); Sie können sich ein Bild von der Skalierung machen, indem Sie die Open Source-Engine für anzeigen. id Software Erdbeben und durchsuchen Sie die Datei gl_draw.c - dieses einzelne Element enthält Anweisungen zu den verschiedenen im Spiel durchgeführten Builds und repräsentiert nur einen kleinen Teil der gesamten Engine. Das Erdbeben ist über 20 Jahre alt und alles Spiel (einschließlich aller Elemente, Sounds, Musik usw.) Es ist 55 MB groß. im Gegensatz zu Ubisoft Far Cry 5 Menge nur Vom Spiel verwendete Shader für eine 62-MB-Datei.

Zeit ist alles: mit der richtigen Hardware

Alles, was wir bisher beschrieben haben, kann von der CPU jedes Computersystems berechnet und verarbeitet werden. Moderne x86-64-Prozessoren unterstützen problemlos alle erforderlichen Berechnungen, und für diese Dinge gibt es spezielle Teile. Das Ausführen dieser Aufgabe zum Erstellen eines Frameworks erfordert jedoch viele sich wiederholende Berechnungen und einen erheblichen Umfang an paralleler Verarbeitung. CPUs sind nicht dafür ausgelegt, da sie vom Design her zu allgemein sind. Spezielle Chips für diese Art von Arbeit werden natürlich genannt GPU'lar (Grafikprozessoren) und Mathematik wie DirectX, OpenGL und Vulkan sind so aufgebaut, dass sie die erforderliche Mathematik sehr schnell und weitgehend parallel ausführen.

Eine Möglichkeit, dies zu demonstrieren, besteht darin, einen Benchmark zu verwenden, mit dem wir einen Frame mit einer CPU erstellen und dann benutzerdefinierte Hardware verwenden können. Wir werden V-Beam ADVANCED von Chaos Group verwenden. Dieses Tool führt tatsächlich Raytracing durch und nicht das Rendering, das wir in diesem Artikel betrachten. Die meisten Staus erfordern jedoch ähnliche Hardwareaspekte.

Um zu verstehen, was eine CPU leisten kann und was die richtige, speziell entwickelte Hardware leisten kann, haben wir den Vergleich der V-ray-GPU in drei Modi durchgeführt: Nur CPU, Nur GPU und dann CPU + GPU. Die Ergebnisse sind sehr unterschiedlich:

  • Nur CPU-Test = 53 Mathe
  • Nur GPU-Test = 251 Mathe
  • CPU + GPU testi = 299 mpath

Da ein 5-facher Leistungsunterschied nicht trivial ist, können wir die Maßeinheiten in diesem Vergleich ignorieren. Aber dies ist kein sehr spielerischer Test, also probieren wir etwas anderes aus und gehen in eine alte Schule. 3DMark03 von Futuremark. Durch Anwenden des einfachen Wings of Fury-Tests können wir alle Eck-Shader (d. H. Alle Routinen zum Verschieben und Erstellen von Farbdreiecken) mithilfe der CPU erzwingen.

Das Ergebnis sollte eigentlich keine Überraschung sein, aber es ist immer noch viel ausgeprägter als das, was wir im Röntgentest gesehen haben:

  • CPU-Peak-Shader = durchschnittlich 77 fps
  • GPU-Corner-Shader = durchschnittlich 1580 fps

Während die CPU alle Scheitelpunktberechnungen durchführte, dauerte es durchschnittlich 13 Millisekunden, um jeden Frame anzuzeigen und anzuzeigen. Wenn Sie diese Mathematik auf die GPU übertragen, wird diese Zeit auf 0,6 Millisekunden reduziert. Mit anderen Worten, es war 20 Mal schneller.

Wenn wir den komplexesten Test im Vergleich versuchen, Mutter Natur, ist der Unterschied noch ausgeprägter. Bei CPU-gerenderten Peak-Shadern betrug das durchschnittliche Ergebnis 3,1 fps! Wenn Sie die GPU mitbringen, steigt die durchschnittliche Bildrate auf 1388 fps: etwa 450-mal schneller. Beachten Sie, dass 3DMark03 jetzt 16 Jahre alt ist und der Test nur Ecken in der CPU behandelt - die Rasterisierung und Pixelphase werden weiterhin über die GPU durchgeführt. Was wäre, wenn es modern wäre und alles in Software gemacht würde?

Lass es uns versuchen Unigine Valley Wieder ein Benchmarking-Tool - relativ neu, da die Grafiken denen in Spielen wie Ubisofts Far Cry 5 sehr ähnlich sind; Neben dem Standard-DirectX 11-GPU-Bus bietet er auch einen vollständigen softwarebasierten Renderer. Die Ergebnisse erfordern nicht viel Analyse, aber die Ausführung der Version des DirectX 11-Tests mit der niedrigsten Qualität auf der GPU ergab durchschnittlich 196 Bilder pro Sekunde. Softwareversion? Abgesehen von ein paar Abstürzen zeichnet der leistungsstarke Testcomputer durchschnittlich 0,1 Bilder pro Sekunde - fast zweitausend mal langsamer.

Der Grund für einen solchen Unterschied liegt in der Form der Verwendung von Mathematik und Daten-3D-Rendering. In einer CPU, Gleitkommaeinheiten (FPUs) führen die Berechnungen in jedem Kern durch; Das Modell i7-9700K des Test-PCs verfügt über 8 Kerne mit jeweils zwei FPUs. Obwohl sich die Einheiten in Titan X im Design unterscheiden, können beide die gleiche grundlegende Mathematik im gleichen Datenformat ausführen. Diese spezielle GPU verfügt über mehr als 3500 Einheiten, um eine vergleichbare Berechnung durchzuführen, und obwohl der Takt nicht in der Nähe des gleichen Standorts wie die CPU angezeigt wird (1,5 GHz gegenüber 4,7 GHz), übertrifft die GPU den Zentralprozessor um die Anzahl der transparenten Einheiten.

Während die Titan X keine generische Grafikkarte ist, übertrifft selbst ein Budgetmodell jede CPU, sodass alle 3D-Spiele und APIs für dedizierte, dedizierte Hardware ausgelegt sind. Laden Sie V-ray, 3DMark oder einen Unigine-Benchmark herunter und testen Sie Ihr eigenes System. Veröffentlichen Sie die Ergebnisse im Forum, damit Sie sehen können, wie gut GPUs für das Rendern von Grafiken in Spielen sind.

Einige letzte Worte auf unserer 101 Seite

Dies war eine kurze Studie darüber, wie ein Quadrat in einem 3D-Spiel gerendert wird, von Punkten im Raum bis zu einem Farbpixel auf einem Monitor.

Im einfachsten Fall ist der gesamte Prozess nichts anderes als das Arbeiten mit Zahlen, da dies ohnehin jeder Computer tut. In diesem Artikel bleibt jedoch viel zu tun, um sich auf die Grundlagen zu konzentrieren (wir werden wahrscheinlich später eingehender darauf eingehen, wie Computergrafiken erstellt werden). Wir haben keine der verwendeten realen Mathematikarten wie die euklidische lineare Algebra, die Trigonometrie und die Differentialrechnung, die von den Root- und Pixel-Shadern ausgeführt werden, berücksichtigt. Wir haben erklärt, wie Texturen durch statistische Abtastung verarbeitet werden, und wir haben großartige visuelle Effekte wie die Okklusion des Bildschirmraums, die Reduzierung von Raytrace-Rauschen, die Anzeige mit hohem Dynamikbereich oder temporäres Anti-Aliasing beiseite gelegt.

Aber wenn Sie den nächsten Call of Mario: Deathduty Battleyard abfeuern, werden Sie nicht nur die Grafiken mit einem neuen Gefühl des Staunens sehen, sondern es wird Sie auch jucken, mehr zu erfahren.