Bildpuffer auf der GPU: Typen, Art und Eigenschaften

Bildpuffer auf der GPU

Haben Sie sich jemals gefragt, wo die Bilder, die Sie auf dem Bildschirm Ihres PCs, Ihrer Konsole oder Ihrer PostPC-Geräte sehen, gespeichert sind? Nun, in Bildpuffern, aber was ist ihre Natur und woraus besteht sie? Wie wirkt es sich auf die Leistung unserer PCs aus, welche Formen des Renderns einer Szene gibt es und was sind ihre Unterschiede?

A GPU erzeugt eine große Menge an Informationen pro Sekunde in Form mehrerer Bilder, die vom Fernseher schnell auf unsere Netzhaut übertragen werden. Die Größe dieser Bilder und die gespeicherten und verarbeiteten Informationen sind enorm. Bildpuffer aufgrund der Speicherung im VRAM sind einer der Gründe, warum Speicher mit hoher Bandbreite erforderlich ist.

Was ist der Bildpuffer?

Bildpuffer

Der Bildpuffer ist ein Teil des VRAM, in dem die Informationen jedes Pixels auf dem Bildschirm des nächsten Rahmens gespeichert werden. Dieser Puffer wird im VRAM gespeichert und alle x Millisekunden von der GPU generiert.

Aktuelle GPUs arbeiten mit mindestens zwei Bildpuffern. Im ersten schreibt die GPU den nächsten Frame, der auf dem Bildschirm angezeigt wird, im zweiten ist der bereits erzeugte vorherige Frame, der an den Bildschirm gesendet wird.

Bildpuffer

Der Backbuffer oder der Backe Buffer wird als derjenige bezeichnet, der von der GPU generiert wird, und der Frontbuffer oder Front Buffer wird vom Display-Treiber gelesen und an den Videoausgang gesendet. Während der vordere Puffer für jedes Pixel den Wert der roten, grünen und blauen Komponenten speichert, kann er im hinteren Puffer eine vierte Komponente, Alpha, speichern, die den Transparenz- oder Halbtransparenzwert eines Pixels speichert.

Was ist der Bildschirmtreiber?

Der Anzeigetreiber ist eine Hardware, die in der GPU enthalten ist. Er ist dafür verantwortlich, den Bildpuffer im VRAM zu lesen und die Daten in ein Signal umzuwandeln, das der Videoausgang unabhängig vom Typ verstehen kann.

In Systemen wie NVIDIA G-SYNC, AMD FreeSync / Adaptive Sync und dergleichen sendet der Display-Controller nicht nur Daten an den Monitor oder das Fernsehgerät, sondern steuert auch, wann jedes Bild beginnt und endet.

Bildpuffer und traditionelles 3D-Rendering

Obwohl unsere Bildschirme in 2D sind, werden seit mehr als zwanzig Jahren 3D-Szenen in Echtzeit auf ihnen gerendert. Dazu muss der Rückpuffer in zwei differenzierte Puffer aufgeteilt werden:

  • Farbpuffer: Hier wird der Wert der Farb- und Alphakomponenten jedes Pixels notiert.
  • Tiefenpuffer: Wo der Tiefenwert jedes Pixels zeigt.

Beim Rendern einer 3D-Szene stellen wir fest, dass mehrere Pixel unterschiedliche Werte im Tiefenpuffer haben, sich jedoch in den beiden anderen Dimensionen an derselben Stelle befinden. Hier müssen diese zusätzlichen Pixel verworfen werden, da sie für den Betrachter nicht sichtbar sind Das Verwerfen erfolgt durch Vergleichen der Position jedes Pixels im Tiefenpuffer, wobei die am weitesten von der Kamera entfernten Pixel verworfen werden.

Der Tiefenpuffer

Búferes de imagen Z-Puffer

Der Tiefenpuffer oder besser bekannt als Z-Puffer speichert die Entfernung jedes Pixels einer 3D-Szene in Bezug auf den Blickwinkel oder die Kamera. Dies kann in einem dieser beiden Momente erzeugt werden.

  • Nach der Rasterphase und vor der Texturierungsphase.
  • Nach der Texturierungsphase.

Da die rechenintensivste Stufe die des Pixel- / Fragment-Shaders ist, muss der Farbwert und damit der Pixel- oder Fragment-Shader von Hunderttausenden und sogar Millionen nicht sichtbaren Pixeln berechnet werden, um den Z-Puffer unmittelbar nach der Texturierung der Szene zu generieren .

Transparencias Raytracing

Das Gegenstück dazu vor der Texturierung ist, dass wir feststellen können, dass ein Pixel nach dem anderen transparent verworfen wird, wenn die Werte für Farbe und Transparenz, Alpha-Kanal, nicht vorhanden sind, sodass es in der endgültigen Szene nicht sichtbar ist.

Um dies zu vermeiden, rendern Entwickler die Szene normalerweise in zwei Teilen: Der erste Teil rendert die Objekte nicht hinter einem transparenten oder halbtransparenten Objekt, während der zweite nur diese Objekte rendert.

Bildpufferung und verzögertes Rendern

Eine der Neuheiten, die in den späten 2000er Jahren beim Rendern von Grafiken zu sehen waren, war das verzögerte Rendern oder das verzögerte Rendern, bei dem zuerst die Szene gerendert wurde, eine Reihe zusätzlicher Puffer namens G-Buffer generiert wurde, und dann in einem nächsten Schritt die Beleuchtung des berechnet wurde Szene.

Die Tatsache, dass mehrere Bildpuffer benötigt werden, vervielfacht die Anforderungen an den Speicher und erfordert daher eine größere Speichermenge für die Speicherung sowie eine Füllrate und damit eine höhere Bandbreite.

mehrere luces

Das verzögerte Rendern wurde jedoch durchgeführt, um eines der Leistungsprobleme der klassischen Rasterung zu beheben, bei dem jede Wertänderung in einem Pixel, sei es aufgrund von Luminanz oder Chrominanz, ein Umschreiben im Bildpuffer beinhaltet, was sich in einer großen Menge von umsetzt im VRAM zu übertragende Daten

Dank des verzögerten Renderns gehen die Kosten für die Anzahl der Lichter in der Szene von exponentiell zu logarithmisch über, wodurch sich der Rechenaufwand beim Rendern von Szenen mit mehreren Lichtquellen verringert.

Bildpuffer als Schattenkarte

Mapas Sombras Z-Puffer

Da die Rasterung bei der Berechnung der indirekten Beleuchtung nicht sehr gut ist, müssen Tricks gefunden werden, um darin Schattenkarten zu generieren.

Die einfachste Methode besteht darin, die Szene mit der Licht- oder Schattenquelle wie mit der Kamera zu rendern. Anstatt jedoch ein vollständiges Bild zu rendern, wird nur der Tiefenpuffer generiert, der später als Schattenkarte verwendet wird.

Dieses System wird in den kommenden Jahren aufgrund des Aufstiegs von Ray Tracing verschwinden, das die Erzeugung von Schatten in Echtzeit auf viel präzisere Weise ermöglicht, weniger Rechenleistung erfordert und ohne dass eine große Schattenkarte in VRAM erstellt werden muss.