Grafikpipeline

Im Computergrafik, a Computergrafikpipeline, Rendering Pipelineoder einfachGrafikpipeline, Ist ein konzeptionelles Modell, das beschreibt, in welchen Schritten ein Grafiksystem ausführen mussmachen Eine 3D -Szene zu einem 2D -Bildschirm.[1] Einmal 3D-Modell wurde zum Beispiel in a erstellt Videospiel oder eine andere 3D -Computeranimation, die Grafikpipeline ist der Prozess, dieses 3D -Modell in das zu verwandeln, was der Computer anzeigt.[2] Da die für diesen Vorgang erforderlichen Schritte von der verwendeten Software und der verwendeten Hardware und den gewünschten Anzeigeneigenschaften abhängen, gibt es keine universelle Grafikpipeline für alle Fälle. Grafik Anwendungsprogrammierschnittstellen (APIs) wie zum Beispiel Direct3d und OpenGL wurden erstellt, um ähnliche Schritte zu vereinen und die Grafikpipeline eines gegebenen Hardware -Beschleuniger. Diese APIs werden die zugrunde liegende Hardware abstrahieren und den Programmierer vom Schreiben von Code fernhalten, um die Grafik -Hardware -Beschleuniger zu manipulieren (Beschleuniger (AMD/Intel/Nvidia etc.).

Das Modell der Grafikpipeline wird normalerweise in Echtzeit-Rendering verwendet. Oft werden die meisten Pipeline -Schritte in Hardware implementiert, was eine Besonderheit ermöglicht Optimierungen. Der Begriff "Pipeline" wird in ähnlicher Weise wie die Pipeline in Prozessoren verwendet: die einzelnen Schritte der Pipeline, die parallel laufen, solange ein bestimmter Schritt das enthält, was er benötigt.

Konzept

Die 3D -Pipeline bezieht sich normalerweise auf die häufigste Form des Computer -3D -Renderings 3D -Polygon -Rendering, anders als Raytracing und Raycasting. Beim Raycasting stammt ein Strahl an dem Punkt, an dem sich die Kamera befindet, und wenn dieser Strahl eine Oberfläche trifft, die Farbe und die Farbe und Beleuchtung von dem Punkt auf der Oberfläche, an dem der Strahlungsschlag berechnet wird. Im 3D -Polygon wird das Gegenteil geschieht - der Bereich, der in der Kamera angezeigt wird, wird berechnet, und dann entsteht Strahlen aus allen Teilen jeder Oberfläche im Hinblick auf die Kamera und werden zurück zur Kamera zurückgeführt.[3]

Struktur

Eine Grafikpipeline kann in drei Hauptteile unterteilt werden: Anwendung, Geometrie und Rasterung.[4]

Graphics pipeline 2 en.svg

Anwendung

Der Anwendungsschritt wird von der Software im Hauptprozessor ausgeführt (Zentralprozessor). Während des Anwendungsschritt Eingabegeräte oder während einer Animation. Die neue Szene mit all ihren Primitive, normalerweise Dreiecke, Linien und Punkte, werden dann an den nächsten Schritt in der Pipeline weitergegeben.

Beispiele für Aufgaben, die normalerweise im Anwendungsschritt ausgeführt werden, sind Kollisionserkennung, Animation, Morphing und Beschleunigungstechniken unter Verwendung räumlicher Unterteilungschemata wie z. Quadtrees oder Octrees. Diese werden auch verwendet, um die zu einem bestimmten Zeit erforderliche Hauptspeicher zu verringern. Die "Welt" eines modernen Computerspiels ist weitaus größer als das, was gleichzeitig in den Gedächtnis passen könnte.

Geometrie

Der Geometrieschritt (mit Geometrie -Pipeline), was für den größten Teil der Operationen mit verantwortlich ist Polygone und ihre Eckpunkte (mit Scheitelpunktpipeline), kann in die folgenden fünf Aufgaben unterteilt werden. Es hängt von der jeweiligen Umsetzung ab, wie diese Aufgaben als tatsächliche parallele Pipeline -Schritte organisiert werden.

Geometry pipeline en.svg

Definitionen

A Scheitel (Plural: Scheitelpunkte) ist ein Punkt der Welt. Viele Punkte werden verwendet, um den Oberflächen zu verbinden. In besonderen Fällen, Punktwolken werden direkt gezeichnet, aber dies ist immer noch die Ausnahme.

A Dreieck ist die häufigste geometrische Primitive von Computergrafiken. Es wird durch seine drei Eckpunkte und a definiert Normaler Vektor - Der normale Vektor dient dazu, die Vorderseite des Dreiecks anzuzeigen, und ist ein Vektor, der senkrecht zur Oberfläche ist. Das Dreieck kann mit einer Farbe oder mit a versehen sein Textur (Bild "geklebt"). Dreiecke werden gegenüber Rechtecken bevorzugt, weil die drei Punkte auf einem einzigen immer existieren Flugzeug.

Das Weltkoordinatensystem

Die Welt Koordinatensystem ist das Koordinatensystem, in dem die virtuelle Welt erstellt wird. Dies sollte einige Bedingungen erfüllen, damit die folgende Mathematik leicht anwendbar ist:

  • Es muss ein rechteckiges kartesisches Koordinatensystem sein, bei dem alle Achsen gleich skaliert sind.

Wie die Einheit des Koordinatensystems definiert ist, bleibt dem Entwickler überlassen. Ob daher der Einheitsvektor des Systems in Wirklichkeit bis zu einem Meter oder einem entsprechen soll Ångström hängt von der Anwendung ab.

Beispiel: Wenn wir einen Flugsimulator entwickeln wollen, können wir das Weltkoordinatensystem auswählen, damit sich der Ursprung in der Mitte der Erde befindet und das Gerät auf einen Meter eingestellt ist. Um den Hinweis auf die Realität zu erleichtern, definieren wir außerdem, dass die X -Achse den Äquator auf dem Null -Meridian schneiden sollte und die Z -Achse durch die Pole fließt. In einem rechtshändigen System verläuft die Y-Achse durch den 90 ° -East-Meridian (irgendwo in der Indischer Ozean). Jetzt haben wir ein Koordinatensystem, das jeden Punkt auf der Erde in dreidimensionalem beschreibt Kartesischen Koordinaten. In diesem Koordinatensystem modellieren wir jetzt die Prinzipien unserer Welt, Berge, Täler und Ozeane.
Notiz: Abgesehen von der Computergeometrie,, geografische Koordinaten werden für die verwendet Erde, dh, Breite und Längengradsowie Höhen über dem Meeresspiegel. Die ungefähre Umwandlung - wenn man nicht die Tatsache betrachtet, dass die Erde keine genaue Sphäre ist - ist einfach:
mit r = Radius der Erde [6,378,137 m], lat = Breite, lang = Längengrad, Hasl = Höhe über dem Meeresspiegel.
Alle folgenden Beispiele gelten in einem rechtshändigen System. Für ein linkshändiges System müssen die Zeichen möglicherweise austauscht werden.

Die in der Szene enthaltenen Objekte (Häuser, Bäume, Autos) sind häufig in ihrem eigenen Objektkoordinatensystem (auch als Modellkoordinatensystem oder lokales Koordinatensystem bezeichnet) aus Gründen der einfacheren Modellierung entwickelt. Um diese Objekte den Koordinaten im Weltkoordinatensystem oder des globalen Koordinatensystems der gesamten Szene zuzuweisen, werden die Objektkoordinaten mittels Übersetzung, Rotation oder Skalierung transformiert. Dies geschieht durch Multiplizieren der entsprechenden Transformationsmatrizen. Zusätzlich können mehrere unterschiedlich transformierte Kopien aus einem Objekt gebildet werden, zum Beispiel ein Wald aus einem Baum; Diese Technik heißt Instanz.

Um ein Modell eines Flugzeugs in der Welt zu platzieren, bestimmen wir zunächst vier Matrizen. Da wir im dreidimensionalen Raum arbeiten, brauchen wir vierdimensionale Homogene Matrizen Für unsere Berechnungen.

Erstens brauchen wir drei Rotationsmatrizen, nämlich eines für jede der drei Flugzeugerachsen (vertikale Achse, Querachse, Längsachse).

Um die x -Achse (normalerweise definiert als Längsachse im Objektkoordinatensystem)

Um die y -Achse (normalerweise definiert als Querachse im Objektkoordinatensystem)

Um die Zachse (normalerweise definiert als vertikale Achse im Objektkoordinatensystem)

Wir verwenden auch eine Übersetzungsmatrix, die das Flugzeug an den gewünschten Punkt unserer Welt bewegt:.

Anmerkung: Die obigen Matrizen sind transponiert in Bezug auf die im Artikel Rotationsmatrix. Weiter unten finden Sie eine Erklärung warum.

Jetzt konnten wir die Position der Eckpunkte des Flugzeugs in Weltkoordinaten berechnen, indem wir jeden Punkt nacheinander mit diesen vier Matrizen multiplizieren. Seit der Multiplikation einer Matrix mit einem Vektor ist ziemlich teuer (zeitaufwändig), man nimmt normalerweise einen anderen Weg ein und multipliziert zunächst die vier Matrizen. Die Multiplikation von zwei Matrizen ist noch teurer, muss jedoch nur einmal für das gesamte Objekt ausgeführt werden. Die Multiplikationen und sind äquivalent. Danach könnte die resultierende Matrix auf die Eckpunkte angewendet werden. In der Praxis wird die Multiplikation mit den Eckpunkten jedoch immer noch nicht angewendet, aber die Kameramatrizen (siehe unten) werden zuerst bestimmt.

Für unser Beispiel von oben muss die Übersetzung jedoch etwas anders bestimmt werden, da die gemeinsame Bedeutung von hoch - Abgesehen von am Nordpol - stimmt nicht mit unserer Definition der positiven Z -Achse überein, und daher muss das Modell auch um das Erdzentrum gedreht werden: Der erste Schritt drückt den Ursprung des Modells auf die richtige Höhe über der Erdoberfläche und wird dann durch Breiten- und Längengrad gedreht.

Die Reihenfolge, in der die Matrizen angewendet werden, ist wichtig, weil die Matrix-Multiplikation ist nicht kommutativ. Dies gilt auch für die drei Rotationen, wie dies durch ein Beispiel demonstriert werden kann: Der Punkt (1, 0, 0) liegt auf der x-Achse, wenn man ihn zuerst um 90 ° um die x- und dann um die y-Achse dreht Es endet auf der Zachse (die Drehung um die x -Achse hat keinen Einfluss auf einen Punkt auf der Achse). Wenn andererseits zuerst um die Y -Achse und dann um die x -Achse um die Y -Achse dreht, befindet sich der resultierende Punkt auf der y -Achse. Die Sequenz selbst ist willkürlich, solange sie immer gleich ist. Die Sequenz mit x, dann y, dann z (roll, pech, hämisch) ist oft die intuitivste, da die rotation führt, dass die kompass richtung mit der Richtung der "nase" übereinstimmt.

Es gibt auch zwei Konventionen, um diese Matrizen zu definieren, je nachdem, ob Sie mit Spaltenvektoren oder Zeilenvektoren arbeiten möchten. Verschiedene Grafikbibliotheken haben hier unterschiedliche Vorlieben. OpenGL bevorzugt Spaltenvektoren, DirectX Reihenvektoren. Die Entscheidung bestimmt, aus welcher Seite die Punktvektoren mit den Transformationsmatrizen multipliziert werden sollen. Für Säulenvektoren wird die Multiplikation von rechts durchgeführt, d.h. , wo vaus und vin sind 4x1 Säulenvektoren. Die Verkettung der Matrizen erfolgt auch von rechts nach links, d. H. Zum Beispiel , wenn zuerst rotierend und dann wechselt.

Bei Reihenvektoren funktioniert dies genau umgekehrt. Die Multiplikation findet jetzt von links ab als mit 1x4-Reihen-Vektoren und die Verkettung ist Wenn wir uns zuerst auch drehen und uns dann bewegen. Die oben gezeigten Matrizen sind für den zweiten Fall gültig, während die für Säulenvektoren transponiert sind. Die Regel [5] Gilt gilt für die Multiplikation mit Vektoren, dass Sie die Multiplikationsreihenfolge durch Transponieren der Matrix wechseln können.

Das Interessante an dieser Matrixkettung ist, dass ein neues Koordinatensystem durch jede solche Transformation definiert wird. Dies kann wie gewünscht erweitert werden. Zum Beispiel kann der Propeller des Flugzeugs ein separates Modell sein, das dann durch Übersetzung in die Flugzeugnase platziert wird. Diese Übersetzung muss nur die Verschiebung vom Modellkoordinatensystem zum Propellerkoordinatensystem beschreiben. Um das gesamte Flugzeug zu zeichnen, wird die Transformationsmatrix für das Flugzeug zuerst bestimmt, die Punkte transformiert und dann die Propellermodellmatrix an die Matrix des Flugzeugs multipliziert, und dann werden die Propellerpunkte transformiert.

Die auf diese Weise berechnete Matrix wird auch als die genannt Weltmatrix. Es muss für jedes Objekt in der Welt vor dem Rendern bestimmt werden. Die Anwendung kann hier Änderungen einführen, z. B. ändern die Position des Flugzeugs gemäß der Geschwindigkeit nach jedem Rahmen.

Kamera -Transformation

Links: Position und Richtung des virtuellen Betrachters (Kamera), wie vom Benutzer definiert. Rechts: Positionieren der Objekte nach der Kamera -Transformation. Die helle Grauzone ist das sichtbare Volumen.

Zusätzlich zu den Objekten definiert die Szene auch eine virtuelle Kamera oder einen Betrachter, der die Position und Sichtrichtung in Bezug auf die von der Szene wiedergegeben wird. Die Szene wird so transformiert, dass die Kamera am Ursprung entlang der Z -Achse schaut. Das resultierende Koordinatensystem wird als Kamerakoordinatensystem bezeichnet und die Transformation heißt Kamera -Transformation oder Transformation anzeigen.

Die Ansichtsmatrix wird normalerweise von der Kameraposition, dem Zielpunkt (wo die Kamera aussieht) und ein "UP -Vektor" ("Up" aus dem Sicht des Betrachters) bestimmt. Die ersten drei Hilfsvektoren sind erforderlich:
Zaxis = normal(cameraPosition - cameraTarget)
Xaxis = normal(cross(cameraUpVector, Zaxis))
Yaxis = cross(Zaxis, Xaxis )
Mit normaler (v) = Normalisierung des Vektors V;
Kreuz (v1, v2) = Kreuzprodukt von v1 und v2.
Schließlich die Matrix:
mit Punkt (v1, v2) = Skalarprodukt von v1 und v2.

Projektion

Das 3D -Projektion Schritt verwandelt das Ansichtsvolumen in einen Würfel mit den Eckpunktkoordinaten (-1, -1, 0) und (1, 1, 1); Gelegentlich werden auch andere Zielvolumina verwendet. Dieser Schritt heißt Projektionobwohl es ein Volumen in ein anderes Volumen umwandelt, da die resultierenden Z -Koordinaten nicht im Bild gespeichert sind, sondern nur in verwendet werden Z-Pufferen im späteren Rasterschritt. In einem Perspektive Illustration, a zentrale Projektion wird genutzt. Um die Anzahl der angezeigten Objekte zu begrenzen, werden zwei zusätzliche Ausschnittebenen verwendet. Das visuelle Volumen ist daher eine verkürzte Pyramide (frustum). Die Parallele oder orthogonale Projektion wird zum Beispiel für technische Darstellungen verwendet, da es den Vorteil hat, dass alle Parallelen im Objektraum ebenfalls parallel im Bildraum sind und die Oberflächen und Volumina unabhängig vom Abstand vom Betrachter die gleiche Größe haben. Karten verwenden beispielsweise eine orthogonale Projektion (sogenannte Orthophoto), aber schräge Bilder einer Landschaft können auf diese Weise nicht verwendet werden - obwohl sie technisch gesehen zugeführt werden können, scheinen sie so verzerrt, dass wir sie nicht nutzen können. Die Formel zur Berechnung einer Perspektive -Mapping -Matrix lautet:

Mit h = cot (fieldofView / 2.0) (Aperturwinkel der Kamera); W = H / Aspektratio (Seitenverhältnis des Zielbildes); nahe = kleinster Abstand, um sichtbar zu sein; weit = die längste Entfernung, um sichtbar zu sein.

Die Gründe, warum hier die kleinste und größte Entfernung gegeben werden muss, sind einerseits, dass diese Entfernung durch die Skalierung der Szene geteilt wird (weiter entfernte Objekte sind in einem perspektivischen Bild kleiner als in der Nähe von Objekten). und andererseits, um die z -Werte auf den Bereich von 0..1 zu skalieren, um die zu füllen Z-Puffer. Dieser Puffer hat oft nur eine Auflösung von 16 Bits, weshalb die Nah- und Fernen Werte sorgfältig ausgewählt werden sollten. Ein zu großer Unterschied zwischen der Nähe und dem FAR-Wert führt zu sogenannten Z-Kämpfe Wegen der geringen Auflösung des Z-Puffer. Aus der Formel ist auch ersichtlich, dass der Nahwert nicht 0 sein kann, da dieser Punkt der Schwerpunkt der Projektion ist. Zu diesem Zeitpunkt gibt es kein Bild.

Um der Vollständigkeit willen die Formel zur parallele Projektion (orthogonale Projektion):

mit W = Breite des Zielwürfels (Dimension in Einheiten des Weltkoordinatensystems); H = W / Aspektratio (Seitenverhältnis des Zielbildes); nahe = kleinster Abstand, um sichtbar zu sein; weit = die längste Entfernung, um sichtbar zu sein.

Aus Gründen der Effizienz werden die Kamera- und Projektionsmatrix normalerweise zu einer Transformationsmatrix kombiniert, sodass das Kamerakoordinatensystem weggelassen wird. Die resultierende Matrix ist normalerweise für ein einzelnes Bild gleich, während die Weltmatrix für jedes Objekt anders aussieht. In der Praxis werden Sicht und Projektion daher vorbereitet, so dass nur die Weltmatrix während des Displays angepasst werden muss. Komplexere Transformationen wie die Vertex -Mischung sind jedoch möglich. Frei programmierbar Geometrie -Shader Das kann auch die Geometrie ändern.

Im tatsächlichen Rendering -Schritt wird die Weltmatrix * Kamera -Matrix * -Projektionsmatrix berechnet und schließlich auf jeden einzelnen Punkt angewendet. Somit werden die Punkte aller Objekte direkt auf das Bildschirmkoordinatensystem übertragen (zumindest fast ist der Wertebereich der Achsen noch -1..1 für den sichtbaren Bereich, siehe Abschnitt "Fenster-Viewport-Transformation").

Beleuchtung

Oft enthält eine Szene leichte Quellen an verschiedenen Positionen, um die Beleuchtung der Objekte realistischer erscheinen zu lassen. In diesem Fall wird für jeden Scheitelpunkt ein Gewinnfaktor für die Textur berechnet, basierend auf den Lichtquellen und den mit dem entsprechenden Dreieck verbundenen Materialeigenschaften. Im späteren Rasterungsschritt werden die Scheitelpunktwerte eines Dreiecks über seine Oberfläche interpoliert. Eine allgemeine Beleuchtung (Umgebungslicht) wird auf alle Oberflächen angewendet. Es ist die diffuse und damit richtungsunabhängige Helligkeit der Szene. Die Sonne ist eine gerichtete Lichtquelle, die angenommen werden kann, dass sie unendlich weit entfernt ist. Die von der Sonne auf einer Oberfläche bewirkte Beleuchtung wird durch Bildung des skalaren Produkts des Richtungsvektors von der Sonne und dem normalen Vektor der Oberfläche bestimmt. Wenn der Wert negativ ist, zeigt sich die Oberfläche der Sonne.

Ausschnitt

Ausschnitt von Primitiven gegen den Würfel. Das blaue Dreieck wird weggeworfen, während das Orangendreieck abgeschnitten ist und zwei neue Scheitelpunkte erzeugt
Frustum

Nur die Primitiven, die sich im visuellen Volumen befinden, müssen tatsächlich sein Rastered (gezeichnet). Dieses visuelle Volumen ist definiert als das Innere von a frustum, eine Form in Form einer Pyramide mit einem abgeschnittenen Oberteil. Primitive, die vollständig außerhalb des visuellen Volumens liegen, werden verworfen; Das nennt man Frustum Culling. Weitere Ausrüstungsmethoden wie das Rückflächen -Culling, die die Anzahl der zu berücksichtigenden Primitiven verringern, können theoretisch in jedem Schritt der Grafikpipeline ausgeführt werden. Primitive, die nur teilweise im Würfel sind abgeschnitten gegen den Würfel. Der Vorteil des vorherigen Projektionsschritts besteht darin, dass das Clipping immer gegen denselben Würfel stattfindet. Nur die - möglicherweise abgeschnittenen - Primitiven, die innerhalb des visuellen Volumens liegen, werden an den letzten Schritt weitergeleitet.

Fenster-Viewport-Transformation

Fenster-Viewport-Transformation

Um das Bild auf einen beliebigen Zielbereich (Ansichtsfenster) des Bildschirms auszugeben, eine andere Transformation, die Fenster-Viewport-Transformation, muss angewendet werden. Dies ist eine Verschiebung, gefolgt von Skalierung. Die resultierenden Koordinaten sind die Gerätekoordinaten des Ausgabegeräts. Das Ansichtsfenster enthält 6 Werte: Höhe und Breite des Fensters in Pixel, der oberen linken Ecke des Fensters in Fensterkoordinaten (normalerweise 0, 0) und die minimalen und maximalen Werte für Z (normalerweise 0 und 1).

Formal:
Mit VP = ViewPort; v = Punkt nach Projektion

Auf modernen Hardware werden die meisten Geometrieberechnungsschritte in der durchgeführt Scheitelpunkt Shader. Dies ist im Prinzip frei programmierbar, führt jedoch im Allgemeinen zumindest die Transformation der Punkte und die Beleuchtungsberechnung durch. Für die DirectX -Programmierschnittstelle ist die Verwendung eines benutzerdefinierten Vertex -Shaders aus Version 10 erforderlich, während ältere Versionen immer noch einen Standard -Shader haben.

Rasterisierung

Der Rasterisierungsschritt ist der letzte Schritt vor der Fragment -Shader -Pipeline, die alle Primitiven sind rasterisiert mit. Im Rasterisierungsschritt werden diskrete Fragmente aus kontinuierlichen Primitiven geschaffen.

In dieser Phase der Grafikpipeline werden die Gitterpunkte auch als Fragmente bezeichnet, um eine größere Unterscheidungskraft zu erhalten. Jedes Fragment entspricht einem Pixel im Rahmenpuffer und entspricht einem Pixel des Bildschirms. Diese können gefärbt (und möglicherweise beleuchtet) werden. Darüber hinaus ist es notwendig, das sichtbare, näher am Beobachterfragment bei überlappenden Polygonen zu bestimmen. Ein Z-Puffer wird normalerweise für diese sogenannte Verwendung verwendet Versteckte Oberflächenbestimmung. Die Farbe eines Fragments hängt von der Beleuchtung, Textur und anderen materiellen Eigenschaften des sichtbaren Primitiven ab und wird häufig unter Verwendung der Dreieckscheibeneigenschaften interpoliert. Wo verfügbar, a Fragment Shader (auch genannt Pixel Shader) wird für jedes Fragment des Objekts im Rastering -Schritt ausgeführt. Wenn ein Fragment sichtbar ist, kann es jetzt mit bereits vorhandenen Farbwerten im Bild gemischt werden, wenn Transparenz oder Multi-Sampling verwendet wird. In diesem Schritt werden ein oder mehrere Fragmente zu einem Pixel.

Um zu verhindern, dass der Benutzer die allmähliche Rasterisierung der Primitiven sieht, findet eine doppelte Pufferung statt. Die Rasterisierung erfolgt in einem speziellen Speicherbereich. Sobald das Bild vollständig rasterisiert wurde, wird es in den sichtbaren Bereich des Bildspeichers kopiert.

Umgekehrt

Alle verwendeten Matrizen sind nicht singulär und damit invertierbar. Da die Multiplikation zweier nichtsingulärer Matrizen eine weitere nichtsinguläre Matrix erzeugt, ist auch die gesamte Transformationsmatrix invertierbar. Die Inverse ist erforderlich, um Weltkoordinaten aus Bildschirmkoordinaten neu zu berechnen - zum Beispiel, um das angeklickte Objekt aus der Mauszeigerposition zu bestimmen. Da jedoch der Bildschirm und die Maus nur zwei Dimensionen haben, ist der dritte unbekannt. Daher wird ein Strahl an der Cursorposition in die Welt projiziert und dann wird der Schnittpunkt dieses Strahls mit den Polygonen in der Welt bestimmt.

Shader

There are 11 phases, each enumerated here. Vertex shader and 3D code are the input into animation and transformation. The second phase is the hull shader, tesselation, and the domain shader. The third phase is the geometry shader. The fourth phase is the perspective transformation. The fifth phase is the clipping and backface culling. The 6th phase is triangle rasterization, which outputs texture coordinates. The seventh phase, texture cache, starts separately and takes textures as an input. The seventh phase and the texture coordinates go to the 8th phase, texture filtering. From the 6th phase and the output of the 8th phase, texels, goes to the 9th phase, early Z and pixel shading, which also takes a pixel shader as input. The 10th phase is Z-test, alpha blending, and anti-aliasing. Then the 11th phase is post-processing, which outputs back to back buffer.

Klassische Grafikkarten liegen immer noch relativ nahe an der Grafikpipeline. Mit steigenden Anforderungen an die GPUDie Beschränkungen wurden allmählich entfernt, um mehr Flexibilität zu schaffen. Moderne Grafikkarten verwenden eine frei programmierbare, sader-kontrollierte Pipeline, die den direkten Zugriff auf einzelne Verarbeitungsschritte ermöglicht. Um den Hauptprozessor zu lindern, wurden zusätzliche Verarbeitungsschritte in die Pipeline und die GPU verschoben.

Die wichtigsten Shader -Einheiten sind Scheitelpunkt -Shader, Geometrie -Shader, und Pixel -Shader.

Das Einheitlicher Shader wurde eingeführt, um alle Einheiten voll auszunutzen. Dies gibt Ihnen einen großen Pool von Shader -Einheiten. Nach Bedarf ist der Pool in verschiedene Gruppen von Shadern unterteilt. Eine strenge Trennung zwischen den Shader -Typen ist daher nicht mehr nützlich.

Es ist auch möglich, einen sogenannten Berechnungsteiler zu verwenden, um Berechnungen aus der Anzeige einer Grafik auf der GPU durchzuführen. Der Vorteil ist, dass sie sehr parallel laufen, aber es gibt Einschränkungen. Diese universellen Berechnungen werden auch genannt Allzweck-Computing auf Grafikverarbeitungseinheiten, oder Gpgpu kurz.

Siehe auch

Quellen

  • Tomas Akenine-Möller, Eric Haines: Echtzeit-Rendering. AK Peters, Natick, Mass. 2002, ISBN1-56881-182-9.
  • Michael Bender, Manfred Brill: Computergrafik: Ein anwendungsorientieres lehrbuch. Hanser, München 2006, ISBN3-446-40434-1.
  • Fischer, Martin (2011-07-04). Pixel-Fabrik. Wie Grafikchips Spielewelten auf Schirm Zaubern. C't Magazin für Computer Technik. Heise Zeitschriften Verlag. p. 180. ISSN 0724-8679.

Verweise

  1. ^ "Grafikpipeline". Microsoft. 30. Mai 2018. Abgerufen 15. Juni 2015.
  2. ^ "Vortrag: Grafikpipeline und Animation". Archiviert von das Original am 7. Dezember 2017. Abgerufen 15. Juni 2015.
  3. ^ Lawrence, Jason (22. Oktober 2012). "3D -Polygon -Rendering -Pipeline" (PDF). web.archive.org. Archiviert (PDF) Aus dem Original am 29. Dezember 2016. Abgerufen 2019-09-19.
  4. ^ Tomas Akenine-Möller, Eric Haines: Echtzeit-Rendering, S. 11. (PDF)
  5. ^ K. Nipp, D. Stoffer; Lineare Algebra; v/d/f Hochschulverlag der Eth Zürich; Zürich 1998, ISBN3-7281-2649-7.

Externe Links