Ich bin Anfänger und lerne etwas über Computeranimation (für Spiele). Bisher ist die einzige Methode, auf die ich gestoßen bin, das Zeichnen jedes Frames, jedes Frame-Update. Zu Beginn eines jeden Frames wird der gesamte Frame gelöscht, und dann werden die für diesen Frame erforderlichen Elemente neu gezeichnet.
Meine Frage ist, ob diese Methode die einzige ist, die zum Erstellen von Animationen und Spielen verwendet wird. Es scheint ein bisschen ineffizient zu sein. Ich verstehe auch nicht ganz, wie diese Methode für 3D- Spiele funktionieren würde . Könnte jemand dies bitte näher erläutern?
Antworten:
Sehr alte Spiele verwendeten eine Technik, bei der nur die Teile eines Frames neu gezeichnet werden, die sich auf diesem Frame geändert haben. Woran ich mich erinnern kann, das Spiel "Little Big Adventure" verwendet diese Technik (1994). Man sieht aber, dass das Spiel die meiste Zeit über eine statische Kamera verfügt. Nur wenn Sie den sichtbaren Bereich verlassen, wird die Szene neu gezeichnet. Wenn Sie das Spiel spielen, werden Sie auch eine kleine Verzögerung in diesem Bild bemerken. Auf modernen GPUs mit modernen Game-Engines haben sich die Dinge geändert. Auf jedem Frame wird alles neu gezeichnet. Abhängig von der Rendering-Technik können die Dinge sogar mehrmals gerendert werden. Die Rechenleistung einer GPU ist einfach unglaublich hoch, wenn Sie sie richtig einsetzen. Die Wiederverwendung findet jedoch statt. Beispielsweise könnte eine Engine beschließen, die Schattenkarte nur alle fünf Frames zu aktualisieren. Oder die Beleuchtung wird nicht aktualisiert, solange sich die Lichtquellen nicht ändern.
quelle
Nein.
Zumindest, wenn Sie alte Spiele aus den 70er Jahren einbeziehen, die Vektoranzeigen verwendeten.
Zum Beispiel das weit verbreitete Spiel Asteroids, das ursprünglich für Vektoranzeigen entwickelt wurde, bei denen es sich um eine grundlegend andere Art der Darstellung von Grafiken auf einem Bildschirm handelt.
https://en.wikipedia.org/wiki/Vector_monitor
Moderne Grafiken sind zu 100% für die Rasterung gedacht, bei der per Definition der Inhalt eines Grafikpuffers für jeden Frame in die Anzeige geschrieben wird.
quelle
Auf der untersten Ebene berechnet der Grafikprozessor Ihres Computers tatsächlich jeden Frame von Grund auf und sendet ihn an Ihren Bildschirm. Sie sind dem jedoch nur ausgesetzt, wenn Sie diese einfachen Dinge selbst verwalten. [1] Jede Grafik- (und damit Spiel-) Engine erledigt diese Dinge für Sie, und Sie können die Szene frei ausdrücken In Bezug auf viele Entitäten, die Sie zwischen Frames ändern könnten, die aber dauerhaft sind.
Die Elemente im 3D-Raum sind beständig. Die Grafik-Engine berechnet das Bild auf Ihrem Bildschirm erneut auf etwaige Änderungen (Kamerabewegung usw.).
[1] ... wenn Sie zum Beispiel Ihre eigene Engine [2] mit so etwas wie OpenGL schreiben. Selbst in diesem Fall würden Sie wahrscheinlich dauerhafte Dinge zwischen Frames speichern.
[2] Welches ist keine Option für Ihr aktuelles Fähigkeitsniveau.
quelle
Kurze Antwort: Nein.
Lange Geschichte:
Als ich in der Schule etwas Spielprogrammierung gelernt habe, wurde uns Folgendes beigebracht:
Entscheide, welche fps-Rate wir im Spiel haben wollten (zum Beispiel 30).
Schreiben Sie einen Code, der für jedes Intervall 1 zu einem Zähler hinzufügt (33 ms für 30 fps). Dieser Code wird gleichzeitig mit der Spieleschleife ausgeführt.
Dann reduziert die Spielschleife, die die Berechnungen für das Spiel durchführt (Spielstatusaktualisierung), den gleichen Zähler für jedes Bild um 1. Die Grafikberechnungen und das Zeichnen auf dem Bildschirm werden jedoch nur ausgeführt, wenn der Zähler auf Null steht.
Das Ergebnis ist, dass sich die grafische Framerate in Abhängigkeit davon ändert, wie gut die CPU die Berechnungen im Spiel handhabt. Wenn im Spiel nicht zu viel passiert, sind die Berechnungen einfach und die Grafik-Framerate wird höher als das tatsächliche Spielstatus-Update (im Grunde wird Zyklen verschwendet, da wir denselben Spielstatus mehr als einmal auf dem Bildschirm zeichnen).
Aber dann passiert viel im Spiel, die CPU wird mehr zu tun haben und Spielstatusaktualisierungen werden gegenüber dem Zeichnen auf dem Bildschirm vorrangig behandelt.
Die meiste Zeit wird das Spiel mit der vorgesehenen Geschwindigkeit aktualisiert, erscheint jedoch "verzögert", da nicht jedes Update auf dem Bildschirm angezeigt wird. Dies ist möglicherweise vorzuziehen, wenn sich das Spiel insgesamt verlangsamt, da Sie erzwingen, dass jedes Update auf dem Bildschirm angezeigt wird.
Dies geschah alles mit C ++ und ohne Spiel-Engine oder Grafikkarte. Alles lief auf einer Single-Core-CPU. Wir haben einige Bibliotheken für 2D-Grafiken verwendet.
quelle
Bevor man sagen kann, ob Videospiele die Anzeige in jedem Frame "zeichnen", muss zunächst definiert werden, was mit "zeichnen" gemeint ist. Es gibt sicherlich viele Videospiele, bei denen sicherlich nicht alle Bilder von Grund auf neu zusammengestellt werden. in der Tat, viele Spiele - Plattformen nie voll Bitmaps zusammenbauen überhaupt .
Es gibt einige Ansätze, mit denen Videospiele eine Anzeige generieren können. Bei einer sehr kleinen Zahl schaltet die CPU den Elektronenstrahl für jedes Pixel ein und aus oder setzt für Vektor-Scan-Spiele die XY-Koordinate für jeden zu zeichnenden Punkt. Die meisten Spiele, die dies tun, tun dies hauptsächlich, um zu demonstrieren, dass die CPU schnell genug ist. Üblicherweise haben Spiele Hardware, die ohne CPU-Beteiligung wiederholt Pixel- oder Vektormuster auf dem Display ausgibt. Dieses Muster kann erzeugt werden, indem Daten sequentiell aus einem Speicherbereich gelesen und jedes Bit oder jede Gruppe von Bits als eine Pixelfarbe interpretiert werden (dies wird als Bitmap-Anzeige bezeichnet). In einigen Fällen kann die Hardware ein Byte Speicher für jede 8x8, 16x16, oder einen anderen Größenbereich der Anzeige und verwenden Sie dann dieses Byte, um einen Speicherbereich auszuwählen, der für Pixeldaten gelesen werden soll (dies wird häufig als Zeichentabelle-Anzeige bezeichnet). Einige Hardwareplattformen können mehrere Bitmap-Anzeigen mit konfigurierbaren Positionen überlagern. Diese werden als Sprites bezeichnet.
Bei einigen Plattformen kann das Anzeigemuster nicht geändert werden, während es an den Bildschirm gesendet wird. Stattdessen müssen alle Aktualisierungen vorgenommen werden, nachdem der Balken ein Bild gezeichnet hat, bevor er das nächste gezeichnet hat. Auf solchen Plattformen muss alles, was auf einem Frame erscheinen soll, vor dem Start dieses Frames in die Display-Hardware geladen werden, und das Display kann nur ein Muster anzeigen, das auf einmal eingerichtet werden kann. Wenn die CPU nicht mehr läuft, während der Frame angezeigt wird, wird derselbe Frame auf unbestimmte Zeit angezeigt. Auf anderen Plattformen kann das Muster geändert oder neu konfiguriert werden, während es auf dem Bildschirm angezeigt wird. Dies ermöglicht es, einen Bildschirm darzustellen, der viel komplizierter ist, als die Videoschaltung selbst handhaben könnte.
Die meisten PC-Spiele verwenden Hardware, die zum Zeichnen eines einzelnen Bitmap-Bildschirms konfiguriert ist, und zeichnen dann auf diesen Bildschirm alles, was anders sein muss als das, was bereits vorhanden ist. Manchmal ist es einfacher, Dinge zu zeichnen, ohne zu berücksichtigen, ob dies in einem bestimmten Fall tatsächlich erforderlich ist, aber wenn der Code leicht erkennen kann, dass ein Teil des Bildschirms nicht geändert werden muss, kann die Leistung durch Überspringen dieses Teils verbessert werden. Heutige Plattformen sind oft schnell genug, um den gesamten Bildschirm im Verlauf eines Frames um ein Vielfaches zu zeichnen, was in der Vergangenheit jedoch nicht der Fall war. Der schnellstmögliche Code zum Schreiben aller Pixel auf dem hochauflösenden Bildschirm des Apple II-Computers benötigt beispielsweise mehr als zwei Frames und der schnellstmögliche Code zum Kopieren aller Pixel auf dem Apple II-Computer. s hochauflösender Bildschirm aus einem anderen Puffer würde das Doppelte dauern. Um eine gute Leistung zu erzielen, müssen Spiele nur Dinge aktualisieren, die sich tatsächlich geändert haben, und genau das haben gute Spiele im Allgemeinen getan.
quelle
Kurz gesagt, ich würde sagen, dass nicht alle Bilder gezeichnet sind, sondern nur diejenigen, die für die Darstellung Ihrer Geschichte oder Ihres Themas zum Spiel oder zum Spielen erforderlich sind. Außerdem spielt der Zeitpunkt der Dinge, die in bestimmten Fällen passieren sollen, eine Rolle.
quelle