Wie sind 3D-Spiele so effizient? [geschlossen]


188

Es gibt etwas, das ich nie verstanden habe. Wie kann ein großes PC-Spiel wie GTA IV 50% meiner CPU nutzen und mit 60 fps laufen, während eine DX-Demo einer rotierenden Teekanne mit 60 fps satte 30% verbraucht?


124
Ich verstehe nicht, was an dieser Frage falsch ist - es ist ganz natürlich, neugierig zu sein, wie andere Entwickler bestimmte Dinge erreicht haben. Wir sollten diese Art von Neugier fördern und nicht mit engen Stimmen bestrafen.
John Feminella

2
@ user146780: wer hat die Frage gestellt ... Die besten Programmierer, die ich getroffen habe, haben in CGI gearbeitet. Gurus von SGI, Leute, die an der Parallelisierung von Adobe Photoshop arbeiten usw. Die Leute hier wissen nicht, wie kompliziert es ist, ein modernes Spiel zu schreiben, und wie geschickt diese Programmierer sind. Wenn Sie eine demütigende Erfahrung machen möchten, schauen Sie, was die Deutschen von Cryotech mit der Crysis-Engine gemacht haben. Es gibt Videos auf Youtube. Du wirst es einfach nicht glauben. Es geht nicht nur darum, "Octrees zu verwenden". Typischerweise sind diese Programmierer einfach viel erfahrener als die durchschnittlichen Programmierer. Und Sie können wetten, dass die GT4-Codierer sehr gut sind.
SyntaxT3rr0r

2
du hast gta4 mit 60fps laufen lassen? GW! gta4 ist ein POS, der ziemlich schlecht läuft. Ich habe gehört, dass Force dies auch tut. Ich würde sagen, Euphorie ist der Schuldige. Ehrlich gesagt ist "CPU-Auslastung" eine sehr schlechte Methode zum Vergleichen. Entkappen Sie einfach die Framerate und sehen Sie, welche am schnellsten läuft. Das ist der richtige Weg, dies zu tun. Denken Sie auch daran, dass dieses "komplizierte Spiel" zwar viele Dinge rendert, es aber immer noch nur einen Bildschirm gibt, und wenn es in der richtigen Reihenfolge gerendert wird, kann es sein, dass Sie fast die gleiche Menge an Pixelarbeit wie Ihr Spiel haben "einfache" Demo und Pixelarbeit ist wirklich das, was es tötet.
Matt

8
Sie benötigen einen Profiler, der Ihnen zeigt, wie oft die GPU (Graphics Processing Unit) verwendet wird. Ich wette, GTA IV zeigt Ihnen ~ 99% und die Demo 3%.
0scar

Aus Erfahrung waren ungefähr 10% der Spielprogrammierer, mit denen ich zusammengearbeitet habe, gut, der Rest war bestenfalls durchschnittlich. Einige waren völlig inkompetent.
Skizz

Antworten:


69

Im Allgemeinen liegt es daran

  1. Die Spiele sind optimal in Bezug auf das, was sie rendern müssen, und
  2. Sie nutzen Ihre Hardware besonders.

Eine einfache Optimierung besteht beispielsweise darin, nicht zu versuchen, Dinge zu zeichnen, die nicht sichtbar sind. Stellen Sie sich eine komplexe Szene wie ein Stadtbild aus Grand Theft Auto IV vor . Der Renderer rendert nicht alle Gebäude und Strukturen. Stattdessen wird nur das gerendert, was die Kamera sehen kann. Wenn Sie mit Blick auf die Originalkamera zur Rückseite derselben Gebäude fliegen könnten, würden Sie eine halb gebaute, ausgehöhlte Schalenstruktur sehen. Jeder Punkt, den die Kamera nicht sehen kann, wird nicht gerendert. Da Sie ihn nicht sehen können, müssen Sie nicht versuchen, ihn Ihnen zu zeigen.

Darüber hinaus gibt es optimierte Anweisungen und spezielle Techniken, wenn Sie gegen eine bestimmte Hardware entwickeln, um noch bessere Beschleunigungen zu ermöglichen.

Der andere Teil Ihrer Frage ist, warum eine Demo so viel CPU verbraucht:

... während eine DX-Demo einer rotierenden Teekanne mit 60 fps satte 30% verbraucht?

Demos von Grafik-APIs (wie dxdemo) greifen häufig auf einen sogenannten Software-Renderer zurück, wenn Ihre Hardware nicht alle Funktionen unterstützt, die für ein hübsches Beispiel erforderlich sind. Diese Funktionen können beispielsweise Schatten, Reflexion, Raytracing, Physik usw. umfassen.

Dies ahmt die Funktion eines Hardware-Geräts mit vollem Funktionsumfang nach, das wahrscheinlich nicht vorhanden ist, um alle Funktionen der API zu demonstrieren. Da die Hardware jedoch nicht vorhanden ist, wird sie stattdessen auf Ihrer CPU ausgeführt. Das ist viel ineffizienter als das Delegieren an eine Grafikkarte - daher Ihre hohe CPU-Auslastung.


3
Eine DX-Demo verwendet auch Ihre Hardware. Also, was ist "besonders"?
Tur1ng

3
Es ist jedoch unwahrscheinlich, dass eine Demo optimal ist.
µBio

2
@ tur1ng, die Teekannen-Demo hat möglicherweise Reflexion , Schatten und andere Effekte aktiviert .
Nick Dandoulakis

2
Die Teekanne hat möglicherweise mehr Polygone als eine GTA4-Szene. Tatsache ist, dass der derzeitige Engpass beim Grafik-Rendering eher Textureffekte wie von Bump-Mapping abgeleitete Techniken zum Hinzufügen von Details und andere Post-Rendering-Effekte sind.
Klaim

5
Texturen - Die Teekanne wird aus einer großen Anzahl einzelner Dreiecke mit Normalen und Lichtinteraktionen erstellt. Was im Spiel wie eine wahnsinnig komplexe 3D-Welt aussieht, sind oft recht einfache große Blöcke, die mit einem detaillierten Bild bedeckt sind. Ein Großteil der "3D" ist clevere Schatten und Perspektive künstlerische Effekte in einem statischen 2D-Bild auf der 3D-Form gezeichnet
Martin Beckett

96

Geduld, technische Fähigkeiten und Ausdauer.

Der erste Punkt ist, dass eine DX-Demo in erster Linie eine Lehrhilfe ist, daher dient sie der Klarheit und nicht der Ausführungsgeschwindigkeit.

Es ist ein ziemlich großes Thema, das sich verdichten muss, aber bei der Entwicklung von Spielen geht es in erster Linie darum, Ihre Daten und Ihre Ausführungspfade fast pathologisch zu verstehen.

  1. Ihr Code basiert auf zwei Dingen - Ihren Daten und Ihrer Zielhardware.
  2. Der schnellste Code ist der Code, der niemals ausgeführt wird. Sortieren Sie Ihre Daten in Stapel und führen Sie nur teure Vorgänge mit den Daten aus, die Sie benötigen
  3. Die Art und Weise, wie Sie Ihre Daten speichern, ist entscheidend - streben Sie einen zusammenhängenden Zugriff an, damit Sie die Stapelverarbeitung mit hoher Geschwindigkeit durchführen können.
  4. Parellisieren Sie alles, was Sie können
  5. Moderne CPUs sind schnell, moderner RAM ist sehr langsam. Cache-Fehler sind tödlich.
  6. Schieben Sie so viel wie möglich auf die GPU - sie verfügt über einen schnellen lokalen Speicher, sodass die Daten durchgebrannt werden können. Sie müssen jedoch Abhilfe schaffen, indem Sie Ihre Daten korrekt organisieren.
  7. Vermeiden Sie viele Renderstate-Switches (stapeln Sie ähnliche Scheitelpunktdaten erneut zusammen), da dies dazu führt, dass die GPU blockiert
  8. Swizzle deine Texturen und stelle sicher, dass sie Zweierpotenzen sind - dies verbessert die Textur-Cache-Leistung auf der GPU.
  9. Verwenden Sie so viele Detailstufen wie möglich - niedrige / mittlere / hohe Versionen von 3D-Modellen und wechseln Sie je nach Entfernung zum Kameraplayer - es macht keinen Sinn, eine hochauflösende Version zu rendern, wenn nur 5 Pixel auf dem Bildschirm angezeigt werden.

39

3D-Spiele sind großartig darin, Ihre Augen auszutricksen. Zum Beispiel gibt es eine Technik, die als Screen Space Ambient Occlusion (SSAO) bezeichnet wird und ein realistischeres Gefühl vermittelt, indem die Teile einer Szene beschattet werden, die sich in der Nähe von Oberflächendiskontinuitäten befinden. Wenn Sie sich die Ecken Ihrer Wand ansehen, werden Sie feststellen, dass sie in den meisten Fällen etwas dunkler als die Zentren erscheinen.

Der gleiche Effekt kann mit Radiosity erzielt werden, das auf einer ziemlich genauen Simulation basiert. Radiosity berücksichtigt auch mehr Effekte von reflektierenden Lichtern usw., ist jedoch rechenintensiv - es handelt sich um eine Raytracing-Technik.

Dies ist nur ein Beispiel. Es gibt Hunderte von Algorithmen für Echtzeit-Computergrafiken, die im Wesentlichen auf guten Näherungswerten basieren und in der Regel viele Annahmen treffen. Beispielsweise muss die räumliche Sortierung sehr sorgfältig ausgewählt werden, abhängig von der Geschwindigkeit, der typischen Position der Kamera sowie dem Ausmaß der Änderungen an der Szenengeometrie.

Diese 'Optimierungen' sind enorm - Sie können einen Algorithmus effizient implementieren und zehnmal schneller ausführen, aber wenn Sie einen intelligenten Algorithmus wählen, der ein ähnliches Ergebnis liefert ("Betrug"), können Sie von O (N ^ 4) zu O ( log (N)).

Die Optimierung der tatsächlichen Implementierung macht Spiele noch effizienter, aber das ist nur eine lineare Optimierung.


30

Eeeeek!

Ich weiß, dass diese Frage alt ist, aber es ist aufregend, dass niemand VSync erwähnt hat !!! ???

Sie haben die CPU-Auslastung des Spiels mit 60 fps mit der CPU-Auslastung der Teekannen-Demo mit 60 fps verglichen.

Ist es nicht offensichtlich, dass beide (mehr oder weniger) mit genau 60 fps laufen? Das führt zur Antwort ...

Beide Apps laufen mit aktiviertem vsync! Dies bedeutet, dass die Rendering-Framerate auf das "vertikale Leerintervall" Ihres Monitors festgelegt ist. Die Grafikhardware (und / oder der Treiber) wird nur mit max. 60 fps. Bildwiederholfrequenz von 60 fps = 60 Hz (Hz = pro Sekunde). Sie verwenden also wahrscheinlich eine ziemlich alte, flackernde CRT oder ein allgemeines LCD-Display. Auf einer CRT mit 100 Hz werden wahrscheinlich Frameraten von bis zu 100 Hz angezeigt. VSync gilt in ähnlicher Weise auch für LCD-Displays (sie haben normalerweise eine Bildwiederholfrequenz von 60 Hz).

Die Teekannen-Demo läuft also möglicherweise viel effizienter! Wenn 30% der CPU-Zeit verbraucht werden (im Vergleich zu 50% der CPU-Zeit für GTA IV), verbraucht es wahrscheinlich weniger CPU-Zeit pro Frame und wartet nur länger auf das nächste vertikale Leerintervall. Um beide Apps zu vergleichen, sollten Sie vsync deaktivieren und erneut messen (Sie werden für beide Apps viel höhere fps messen).

Manchmal ist es in Ordnung, vsync zu deaktivieren (die meisten Spiele haben eine Option in den Einstellungen). Manchmal sehen Sie "Zerreißen von Artefakten", wenn vsync deaktiviert ist.

Details dazu und warum es verwendet wird, finden Sie unter Wikipedia: http://en.wikipedia.org/wiki/Vsync


Ich stimme zu, um einen besseren Vergleich zu erhalten, sollten Sie vsync deaktivieren. Die Wurzel des Problems bleibt jedoch bestehen. 30% für die Teekanne gegenüber 50% CPU-Auslastung für das Spiel sind ein geringerer Unterschied als normalerweise zu erwarten. Aber ich erinnere mich an die frühen Tage, als das Umgebungs-Mapping gerade erst populär wurde und die coole nVidia-Demo zu dieser Zeit eine Teekanne mit Umgebungs-Mapping war, die sich drehte. Diese Demos erreichten früher normalerweise nicht einmal 60 fps. Ich denke, mein Punkt ist, dass diese Teekannen-Demos oft die Grenzen eines neuen visuellen Effekts überschreiten.
Steve Wortham

25

Während viele Antworten hier hervorragende Hinweise darauf geben, wie ich stattdessen die einfachere Frage nach dem Warum beantworten werde

Das vielleicht beste Beispiel (sicherlich eines der bekanntesten) ist die Id-Software. Sie erkannten sehr früh in den Tagen von Commander Keen (lange vor 3D), dass sie einen cleveren Weg gefunden hatten, um etwas 1 zu erreichen , auch wenn es sich um moderne Hardware (in diesem Fall eine EGA-Grafikkarte!) Handelte, die grafisch überlegen war die Konkurrenz, dass dies Ihr Spiel hervorheben würde. Dies stimmte, aber sie erkannten weiter, dass sie, anstatt sich selbst neue Spiele und Inhalte einfallen zu lassen, die Technologie lizenzieren und so Einnahmen von anderen erzielen konnten, während sie in der Lage waren, die nächste Generation von Motoren zu entwickeln und damit die Konkurrenz erneut zu überholen .

Die Fähigkeiten dieser Programmierer (gepaart mit Geschäftssinn) haben sie reich gemacht.

Das heißt, es ist nicht unbedingt Geld, das solche Menschen motiviert. Es ist wahrscheinlich genauso der Wunsch zu erreichen, zu erreichen. Das Geld, das sie in den frühen Tagen verdient haben, bedeutet einfach, dass sie jetzt Zeit haben, sich dem zu widmen, was ihnen Spaß macht. Und während viele externe Interessen haben, programmieren fast alle immer noch und versuchen Wege zu finden, um es besser zu machen als die letzte Iteration.

Einfach ausgedrückt hatte die Person, die die Teekannen-Demo geschrieben hat, wahrscheinlich eines oder mehrere der folgenden Probleme:

  • weniger Zeit
  • weniger Ressourcen
  • weniger Belohnungsanreiz
  • weniger interner und externer Wettbewerb
  • kleinere Ziele
  • weniger Talent

Das letzte mag hart klingen 2, aber es gibt eindeutig einige, die besser sind als andere, Glockenkurven haben manchmal extreme Enden und sie neigen dazu, von den entsprechenden extremen Enden dessen angezogen zu werden, was mit dieser Fähigkeit gemacht wird.

Die geringeren Ziele dürften tatsächlich der Hauptgrund sein. Das Ziel der Teekannen-Demo war genau das, eine Demo. Aber keine Demo der Programmierer Geschicklichkeit 3 . Es wäre eine Demo einer kleinen Facette eines (großen) Betriebssystems, in diesem Fall DX-Rendering.

Für diejenigen, die sich die Demo ansehen, ist es unerheblich, dass sie viel mehr CPU verbraucht als erforderlich , solange sie gut genug aussieht. Es gäbe keinen Anreiz, Abfälle zu beseitigen, wenn es keinen Begünstigten gäbe. Im Vergleich dazu würde ein Spiel gerne Ersatzzyklen für eine bessere KI, einen besseren Klang, mehr Polygone und mehr Effekte haben.


  1. In diesem Fall reibungsloses Scrollen auf der PC-Hardware
  2. Wahrscheinlich mehr als ich, also sind wir uns darüber klar
  3. Genau genommen wäre es auch eine Demo für seinen / ihren Manager gewesen, aber auch hier wäre der Antrieb Zeit und / oder visuelle Qualität.

17

Aus einigen Gründen

  • 3D-Game-Engines sind stark optimiert
  • Die meiste Arbeit erledigt Ihr Grafikadapter
  • 50% Hm, lass mich raten, dass du einen Dual Core hast und nur ein Core verwendet wird ;-)

EDIT: Um ein paar Zahlen zu geben

2,8 GHz Athlon-64 mit NV-6800 GPU. Die Ergebnisse sind:

  • CPU: 72,78 Mflops
  • GPU: 2440,32 Mflops

@stacker: Bedeuten Sie, dass alle Berechnungen, die in erstklassigen 3D-Spielen stattfinden, die nicht von der GPU durchgeführt werden, tatsächlich Mono-Threaded sind und zufällig 100% der CPU füllen würden? Bedeutet das, dass die Spielleistungen an einen Nicht-GPU-Kern gebunden wären? Ich finde das sehr schwer zu glauben.
SyntaxT3rr0r

4
Dies bedeutet nicht, dass das Programm ein Mono-Thread ist - es bedeutet nur, dass mindestens ein Thread so schnell wie möglich läuft. Was ist vernünftig, denn warum soll es langsamer werden? Auf der anderen Seite sind viele Spiele fast ausschließlich Mono-Threaded. Es ist sehr schwierig, komplexe Simulationen beim Multithreading effektiv zu schreiben, da die typische Situation in gleichzeitigen / verteilten Systemen, etwas mehr Latenz zu akzeptieren, um viel mehr Durchsatz zu erzielen, für ein Spiel, das reagieren soll, nicht gut ist.
Kylotan

8

Manchmal ist in einer Szene mehr los als es scheint. Zum Beispiel bedeutet eine rotierende Teekanne mit Tausenden von Scheitelpunkten, Umgebungszuordnung, Bump-Zuordnung und anderen komplexen Pixel-Shadern, die alle gleichzeitig gerendert werden, eine Menge Verarbeitung. Oft sind diese Teekannen-Demos nur dazu gedacht, einen besonderen Effekt zu zeigen. Sie nutzen die GPU möglicherweise auch nicht immer optimal, wenn absolute Leistung nicht das Ziel ist.

In einem Spiel sehen Sie möglicherweise ähnliche Effekte, diese werden jedoch normalerweise kompromittiert ausgeführt, um die Bildrate zu maximieren. Diese Optimierungen erstrecken sich auf alles, was Sie im Spiel sehen. Das Problem lautet: "Wie können wir die spektakulärste und realistischste Szene mit der geringsten Rechenleistung erstellen?" Dies macht Spielprogrammierer zu den besten Optimierern überhaupt.


4
  1. Szenenmanagement. kd-Bäume, Frustrum Culling, Bsps, heirarchische Begrenzungsrahmen, Teilsichtbarkeitssets.
  2. LOD. Auswechseln von Versionen mit niedrigeren Details, um weit entfernte Objekte zu ersetzen.
  3. Betrüger. Wie LOD, aber nicht einmal ein Objekt, nur ein Bild oder eine Werbetafel.
  4. SIMD.
  5. Benutzerdefinierte Speicherverwaltung. Ausgerichteter Speicher, weniger Fragmentierung.
  6. Benutzerdefinierte Datenstrukturen (dh keine STL, relativ minimale Vorlagen).
  7. Montage an Orten, hauptsächlich für SIMD.

4

Bei all den qualifizierten und guten Antworten fehlt immer noch die, die wichtig ist: Der Zähler für die CPU-Auslastung von Windows ist nicht sehr zuverlässig. Ich denke, dass diese einfache Teekannen-Demo nur die Rendering-Funktion in ihrer Leerlaufschleife aufruft und beim Pufferwechsel blockiert.

Jetzt zeigt der Windows-CPU-Auslastungszähler nur an, wie viel CPU-Zeit in jedem Prozess verbracht wird, nicht jedoch, wie diese CPU-Zeit verwendet wird. Versuchen Sie, a hinzuzufügen

Sleep(0);

kurz nach der Rückkehr von der Rendering-Funktion und vergleichen.


Ich hatte eine DX-Teekannen-Demo, die immer 25% meiner CPU verbrauchte. Es stellte sich heraus, dass ich auf einem Quad-Core war und, um die Spielschleife mit 60 fps zu sperren, eine "Sind wir schon da" -Schleife hatte, die ständig die Zeit überprüfte. Ich habe es in den Ruhezustand geändert (timeToNextFrame) und die CPU-Auslastung ist auf nahe 0 gesunken.
Jonathan Pierce

3

Darüber hinaus gibt es vom künstlerischen Standpunkt aus viele, viele Tricks, um Rechenleistung zu sparen. In vielen Spielen, insbesondere in älteren, werden Schatten vorberechnet und direkt in die Texturen der Karte "eingebrannt". Oft versuchten die Künstler, Flugzeuge (zwei Dreiecke) zu verwenden, um Dinge wie Bäume und Spezialeffekte darzustellen, wenn sie größtenteils gleich aussehen würden. Nebel in Spielen ist ein einfacher Weg, um das Rendern weit entfernter Objekte zu vermeiden. Oft haben Spiele mehrere Auflösungen für jedes Objekt für Fern-, Mittel- und Nahansichten.


1

Der Kern jeder Antwort sollte folgende sein: - Die Transformationen, die 3D-Engines ausführen, werden meist in Additionen und Multiplikationen (lineare Algebra) (keine Verzweigungen oder Sprünge) angegeben. Die Operationen einer Zeichnung eines einzelnen Frames werden häufig so angegeben, dass sie mehrfach sind Die Aufgaben eines solchen Add-Mul können parallel ausgeführt werden. GPU-Kerne sind sehr gute Add-Mul-Kerne, und sie haben Dutzende oder Hunderte von Add-Mull-Kernen.

Die CPU muss nur noch einfache Dinge erledigen - wie KI und andere Spielelogiken.


1

Wie kann ein großes PC-Spiel wie GTA IV 50% meiner CPU nutzen und mit 60 fps laufen, während eine DX-Demo einer rotierenden Teekanne mit 60 fps satte 30% verbraucht?

Während GTA wahrscheinlich effizienter ist als die DX-Demo, ist die Messung der CPU-Effizienz auf diese Weise im Wesentlichen fehlerhaft. Effizienz kann beispielsweise dadurch definiert werden, wie viel Arbeit Sie pro Zeit erledigen. Ein einfaches Gegenbeispiel: Spawnen Sie einen Thread pro logischer CPU und lassen Sie eine einfache Endlosschleife darauf laufen. Sie erhalten eine CPU-Auslastung von 100%, die jedoch nicht effizient ist, da keine nützliche Arbeit geleistet wird.

Dies führt auch zu einer Antwort: Wie kann ein Spiel effizient sein? Bei der Programmierung von "Great Big Games" wird ein großer Aufwand betrieben, um das Spiel in allen Aspekten zu optimieren (was heutzutage normalerweise auch Multi-Core-Optimierungen umfasst). Bei der DX-Demo geht es nicht darum, schnell zu laufen, sondern Konzepte zu demonstrieren.


1

Ich denke, Sie sollten sich eher die GPU-Auslastung als die CPU ansehen ... Ich wette, die Grafikkarte ist in GTA IV viel geschäftiger als im Teapot-Beispiel (sie sollte praktisch im Leerlauf sein).

Vielleicht könnten Sie so etwas wie diesen Monitor verwenden, um das zu überprüfen:

http://downloads.guru3d.com/Rivatuner-GPU-Monitor-Vista-Sidebar-Gadget-download-2185.html

Auch die Framerate ist zu berücksichtigen, möglicherweise läuft das Teekannen-Sample mit voller Geschwindigkeit (möglicherweise 1000 fps) und die meisten Spiele sind auf die Aktualisierungsfrequenz des Monitors (ca. 60 fps) beschränkt.


1

Schauen Sie sich die Antwort auf vsync an. Deshalb laufen sie mit der gleichen Bildrate.

Zweitens ist die CPU in einem Spiel führend. Eine vereinfachte Erklärung ist, dass die Hauptspielschleife nur eine Endlosschleife ist:

while(1) { 
  update();
  render();
}

Selbst wenn Ihr Spiel (oder in diesem Fall die Teekanne) nicht viel bringt, verbrauchen Sie immer noch CPU in Ihrer Schleife.

Die 50% CPU in GTA ist "produktiver" als die 30% in der Demo, da es höchstwahrscheinlich überhaupt nicht viel bringt; Aber die GTA aktualisiert Unmengen von Details. Selbst wenn Sie der Demo ein "Sleep (10)" hinzufügen, wird die CPU wahrscheinlich um eine Tonne reduziert.

Schauen Sie sich zum Schluss die GPU-Nutzung an. Die Demo nimmt wahrscheinlich <1% auf einer modernen Grafikkarte ein, während die GTA während des Spiels wahrscheinlich die Mehrheit übernehmen wird.

Kurz gesagt, Ihre Benchmarks und Messungen sind nicht genau.


1

Die DX-Teekannen-Demo verwendet nicht 30% der CPU, um nützliche Arbeit zu leisten. Es ist beschäftigt zu warten, weil es nichts anderes zu tun hat.


0

Nach dem, was ich über die Unreal-Serie weiß, sind einige Konventionen wie die Kapselung gebrochen. Der Code wird je nach Spiel zu Bytecode oder direkt zu Maschinencode kompiliert. Außerdem werden Objekte in Form von Maschen gerendert und verpackt, und Dinge wie Texturen, Beleuchtung und Schatten werden vorberechnet, während dies für eine reine 3D-Animation in Echtzeit erforderlich ist. Wenn das Spiel tatsächlich läuft, gibt es auch einige Optimierungen, z. B. nur die sichtbaren Teile eines Objekts zu rendern und Texturdetails nur aus der Nähe anzuzeigen. Schließlich ist es wahrscheinlich, dass Videospiele so konzipiert sind, dass sie zu einem bestimmten Zeitpunkt das Beste aus einer Plattform herausholen (z. B. Intelx86 MMX / SSE, DirectX, ...).


0

Ich denke, hier fehlt ein wichtiger Teil der Antwort. Die meisten Antworten sagen Ihnen, dass Sie "Ihre Daten kennen" sollen. Tatsache ist, dass Sie auf die gleiche Weise und mit der gleichen Wichtigkeit auch Ihre:

  • CPU (Uhr und Caches)
  • Speicher (Frequenz und Latenz)
  • Festplatte (in Bezug auf Geschwindigkeit und Suchzeiten)
  • GPU (#cores, clock und seine Speicher / Caches)
  • Schnittstellen: Sata-Controller, PCI-Revisionen usw.

ABER darüber hinaus könnten Sie mit den aktuellen modernen Computern niemals ein echtes 1080p-Video mit >> 30 ftp abspielen (ein einzelnes 1080p-Bild mit 64 Bit würde 15 000 Ko / 14,9 MB benötigen). Der Grund dafür liegt in der Probenahme / Präzision. Ein Videospiel würde niemals eine doppelte Genauigkeit (64 Bit) für Pixel, Bilder, Daten usw. verwenden, sondern eine geringere benutzerdefinierte Genauigkeit (~ 4-8 Bit) und manchmal eine geringere Genauigkeit, die mit Interpolationstechniken neu skaliert wird, um eine angemessene Berechnung zu ermöglichen Zeit.

Es gibt auch andere Techniken wie das Abschneiden der Daten (sowohl mit OpenGL-Standard als auch mit Software-Implementierung), Datenkomprimierung usw. Beachten Sie auch, dass aktuelle GPUs hinsichtlich der Hardwarefähigkeit> 300-mal schneller sein können als die aktuellen CPUs. Ein guter Programmierer kann jedoch einen 10-20-fachen Faktor erhalten, es sei denn, Ihr Problem ist vollständig optimiert und vollständig parallelisierbar (insbesondere aufgabenparallelisierbar).

Aus Erfahrung kann ich Ihnen sagen, dass Optimierung wie eine Exponentialkurve ist. Um eine optimale Leistung zu erzielen, kann die erforderliche Zeit unglaublich wichtig sein.

Um zur Teekanne zurückzukehren, sollten Sie sehen, wie die Geometrie dargestellt, abgetastet und mit welcher Präzision Vs in GTA 5 in Bezug auf Geometrie / Texturen und vor allem die Details (Präzision, Probenahme usw.) angezeigt wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.