Geometry Engine in Gaming-GPUs: Nutzen und Betrieb

Geometrie-Engine in Gaming-GPUs

Dreidimensionale Grafiken begleiten uns seit zwei Jahrzehnten und damit auch die GPUs, die sie erzeugen und an den Bildschirm unserer Monitore senden. Heute sind es äußerst komplexe Stücke, die aus verschiedenen Elementen bestehen, einige neu, andere seit Jahren im Inneren. Diejenige, die wir in diesem Artikel behandeln werden, ist die Geometry Engine.

Mit dem Fortschritt der Echtzeitgrafiken werden auch die GPUs und damit scheinen neue Probleme gelöst oder alte vergrößert. Das bedeutet, dass alte Lösungen nicht mehr effizient sind und neue geschaffen werden müssen. Die neue Grafikgeneration wird nicht nur auf Raytracing basieren, sondern auf einer deutlichen Erhöhung der Geometrie der Szene. Hier kommt die Geometry Engine ins Spiel, ein wesentliches Element, das es zu verbessern gilt GPU Effizienz in diesem neuen Paradigma.

Ein bisschen Geschichte, um Verwirrung zu beseitigen

sterben

Historisch bezog sich die Geometry Engine oder die Geometry Engine auf die Hardware, die für die Durchführung der Manipulationsprozesse der Szenengeometrie vor der Rasterung verantwortlich ist. Das heißt, bevor die Dreiecke, aus denen die dreidimensionale Szene besteht, in Pixelfragmente umgewandelt wurden.

Die erste Geometry Engine war die Idee von Jim Clark in den frühen 1980er Jahren und war der Beginn der legendären Silicon Graphics. Dank dieser Innovation war es möglich, die 3D-Szenenmanipulation von Minicomputern auf Workstations zu verlagern, die nur einen Bruchteil der Größe und der Kosten der ersteren hatten.

Erst in den späten 90er Jahren wurden 3D-Spiele populär, aber die ersten 3D-Karten hatten keine Geometry Engine und verließen sich darauf CPU die Möglichkeit, die Szenengeometrie zu berechnen. Es war nicht bis zum PC-Start des ersten NVIDIA GeForce, dass der GE vollständig in einen Grafikchip integriert wurde. Von NVIDIA Marketing als T&L bezeichnet.

Im Laufe der Jahre und der Einführung der Shader wurde die Geometry Engine als Hardware komplett ersetzt und jetzt sind es die Shader Units, die sich darum kümmern. Diese Änderung trat ab DirectX 10 auf, als die Geometry Engine als Hardware von NVIDIA verschwand und AMD GPUs, obwohl ihre Bedeutung in letzter Zeit von einer neuen Art von Einheit übernommen wurde, die in den fortschrittlichsten Architekturen enthalten ist, und darüber werden wir in diesem Artikel sprechen.

Der primitive Assembler

Eckpunkte Primitivas Fragmentos

Elemente in einer dreidimensionalen Spielszene werden unter Verwendung von Dreiecken gerendert, um die verschiedenen Elemente der Szene zusammenzusetzen, die aus Scheitelpunkten bestehen. Die erste Stufe der grafischen Pipeline, nachdem der Befehlsprozessor die Bildschirmliste gelesen hat, ist der Vertex-Shader und sein Name ist darauf zurückzuführen, dass er mit Vertices und nicht mit Primitiven oder Dreiecken arbeitet, also unabhängig .

Es ist eine Einheit namens Primitive Assembler, die dafür verantwortlich ist, diese Scheitelpunkte zu verbinden, nicht nur um Dreiecke zu erzeugen, sondern auch um die verschiedenen Modelle zu rekonstruieren, aus denen die Szene besteht, indem ihre verschiedenen Scheitelpunkte miteinander verbunden werden. Der Primitive Assembler ist ein fester Funktionsbaustein in allen GPUs, die diese Funktion automatisch ausführen, ohne dass eine Codebeteiligung in der Bildschirmliste erforderlich ist. Schlicht und einfach wird alles, was auf der Vertex-Shader-Bühne innerhalb der 3D-Pipeline läuft, an den Primitive Assembler und von dort an den nächsten Prozess in der Stufe gesendet.

Tessellation

Für den Fall, dass in der GPU eine Tessellationseinheit vorhanden ist, die für die Unterteilung der Vertices verantwortlich ist, wird der Primitive Assembler direkt nach dem Tessellationsprozess ausgeführt, da die neue Konfiguration der Vertices andere Vereinigungsberechnungen erfordert als die Vertices, aus denen die verschiedene Elemente der Szene.

Der Clipper und das Entfernen überflüssiger Geometrie

Culling-Geometrie-Engine

In einer dreidimensionalen Szene gibt es viele grafische Primitive oder Dreiecke in der Szene. Jedoch sind nicht alle von ihnen in jedem Frame für den Spieler sichtbar, und daher ist es notwendig, in jedem Frame die gesamte nicht sichtbare Geometrie vor der Rasterisierungsstufe zu verwerfen. Da jeder Vertex, der nicht gesehen, aber nicht verworfen wird, später gerastert, texturiert und auch später verworfen wird, weil beim Zeichnen ein anderes Pixel mit höherer Priorität vorhanden ist.

Der Grund? Denken Sie daran, dass in der traditionellen 3D-Pipeline ein Vertex-Shader für jeden Vertex in der Szene ausgeführt wird, aber ein Pixel-Shader für jeden Vertex und die Anzahl der Pixel pro Dreieck normalerweise um eine Größenordnung höher ist. Aus diesem Grund ist es wichtig, Geometrie auszuschließen, die in der Szene nicht sichtbar ist. Dazu werden zwei Algorithmen verwendet:

  • Die erste erkennt die Scheitelpunkte außerhalb des Sichtfeldes des Spielers und wird View Frustum Culling genannt.
  • Die zweite eliminiert stattdessen diejenigen, die sich im Sichtfeld befinden, die aber von anderen größeren und näheren Elementen verdeckt werden, und wird als Back Face Culling bezeichnet.

Der Culling-Prozess kann nun auch über eine feste Funktion durchgeführt werden und eliminiert die Dreiecke und sogar nicht sichtbare Objekte vollständig. Aber was passiert, wenn ein Objekt teilweise sichtbar ist? Nun, je nachdem, wie die Hardware implementiert ist, wird sie nicht oder das Objekt vollständig eliminiert.

Was ist die Geometry Engine in einer aktuellen GPU?

LOD-Mesh-Shading-Geometrie-Engine

Nachdem die Probleme in Primitive Assembler und Clipper erklärt wurden, müssen wir über die Geometry Engine sprechen, die nichts anderes als eine neue Hardware ist, die die gleichen Fähigkeiten wie der Primitive Assembler und der Clipper vereint, jedoch mit a Höhere Präzision. Da es die Fähigkeit hat, überflüssige Geometrie zu eliminieren, jedoch auf Scheitelpunktebene. Dies bedeutet, dass, wenn ein Objekt teilweise außerhalb des Bildschirms oder nicht vollständig ausgeblendet ist, die nicht sichtbaren Scheitelpunkte entfernt und nur der sichtbare Teil neu erstellt wird.

Das andere Dienstprogramm der Geometry Engine hat mit der Erstellung im Detaillierungsgrad der Objekte in der Szene zu tun, wobei diese je nach Entfernung unterschiedliche Detaillierungsgrade, Levels of Detail oder LOD in Englisch, aufweisen. Die Geometry Engine hat die Fähigkeit, nicht sichtbare Scheitelpunkte basierend auf der Entfernung intelligent zu entfernen und so die ursprüngliche Form des Objekts beizubehalten. Stellen Sie sich dies als eine umgekehrte Tesselation vor, bei der Sie die Anzahl der Scheitelpunkte zum Generieren von Details nicht erhöhen, sondern sie verringern.

Dies ist auch angesichts des Übertesselungsproblems wichtig, es muss berücksichtigt werden, dass die GPU beim Tesselieren der Vertices keinen Beweis für ihre tatsächliche Position im Frame-Raum hat, sodass am Ende ein Problem auftritt, das ist die Übertesselung. Das heißt, die GPU berechnet mehr Scheitelpunkte in Objekten in der Ferne, die nicht gesehen werden, aber deren Daten vorhanden sind. Die Geometrie-Engine, die Zugriff auf die Informationen über die Geometrie der Szene hat, kann diese leicht eliminieren. Vergessen wir nicht, dass der traditionelle Clipper nur das entfernt, was aus dem Bild oder versteckt ist.

Die Geometry Engine in der neuen DX12 Ultimate-Pipeline

DX12 Ultimate

Mit DirectX 12 Ultimate ändert sich der Teil der 3D-Pipeline vor der Rasterung komplett, da ein guter Teil der Funktionen von der Ausführung über eine feste Funktion in den Shader-Einheiten der GPU ausgeführt wird. Zum Beispiel erreicht die Tesselation einen Punkt, der in einer festen Funktionseinheit nicht mehr ausgeführt wird, um zu den Einheiten überzugehen, und daher wird die Einheit verschwinden.

Im Fall der Geometry Engine wird diese nicht verschwinden, aber sie ist die einzige, die Zugriff auf die Informationen hat, wie die Scheitelpunkte miteinander verbunden sind. Jeder Algorithmus, der den Zugriff auf die Liste der Szenengeometrie beinhaltet, bedeutet, dass man die Geometry Engine durchlaufen muss, die die Liste der Scheitelpunkte und ihre Beziehungen zueinander steuert.

Mit Blick auf die Zukunft wird eines der Dinge, die wir sehen werden, die Erstellung von BVH-Strukturen für Raytracing aus der GPU sein. Die Hardware, die für diese Aufgabe entwickelt wird, ist die Geometry Engine. Die hat heute Zugriff auf den L2-Cache der GPU, wo die Informationen der Vertices temporär gespeichert werden. Es wird erwartet, dass die Speicherkapazität in der GPU in den folgenden Jahren erheblich zunehmen wird.