Was ist ein Fragment in der 3D-Grafikprogrammierung?

37

Was ist ein Fragment in einem Fragment-Shader? Wikipedia sagt, dass:

Im Allgemeinen kann man sich ein Fragment als die Daten vorstellen, die zum Schattieren des Pixels benötigt werden, sowie die Daten, die zum Testen benötigt werden, ob das Fragment überlebt, um ein Pixel zu werden (Tiefe, Alpha, Schablone, Schere, Fenster-ID usw.).

Sind es also Texturen, Eckpunkte oder etwas anderes?

Albus Dumbledore
quelle

Antworten:

31

In der Computergrafik sind Fragmente die Daten, die erforderlich sind, um einen Einzelpixelwert eines Zeichnungsprimitivs im Einzelbildpuffer zu erzeugen.

Diese Daten können umfassen, sind aber nicht beschränkt auf:

  • Rasterposition
  • Tiefe
  • interpolierte Attribute (Farbe, Texturkoordinaten usw.)
  • Schablone
  • Alpha
  • Fenster ID

Beim Zeichnen einer Szene werden Zeichnungsprimitive in Fragmente gerastert, die texturiert und mit dem vorhandenen Einzelbildpuffer kombiniert werden. Wie ein Fragment mit den Daten kombiniert wird, die sich bereits im Bildspeicher befinden, hängt von verschiedenen Einstellungen ab. In einem typischen Fall kann ein Fragment verworfen werden, wenn es weiter entfernt ist als das Pixel, das sich bereits an dieser Stelle befindet (entsprechend dem Tiefenpuffer). Wenn es näher als das vorhandene Pixel ist, kann es das ersetzen, was bereits vorhanden ist, oder, wenn Alpha-Blending verwendet wird, kann die Farbe des Pixels durch eine Mischung aus der Farbe des Fragments und der vorhandenen Farbe des Pixels ersetzt werden, wie im Fall von Zeichnen eines durchscheinenden Objekts.

Im Allgemeinen kann man sich ein Fragment als die Daten vorstellen, die zum Schattieren des Pixels benötigt werden, sowie die Daten, die zum Testen benötigt werden, ob das Fragment überlebt, um ein Pixel zu werden (Tiefe, Alpha, Schablone, Schere, Fenster-ID usw.).

Aus Wikipedia

concept3d
quelle
6

Ein Fragment besteht einfach aus den Daten, die sich aus dem Beitrag der drei Scheitelpunkte um das Pixel ergeben, das Sie schattieren.

Im Vertex-Shader geben Sie einige Daten pro Vertex aus (Farbe, Texturkoordinaten, ...). Im Fragment-Shader erhalten Sie dann für jedes Pixel einen gewichteten Durchschnitt dieser Werte, mit denen Sie die endgültigen Farben des Pixels erstellen.

XGouchet
quelle
Das Pixel und alle anderen Daten auf unsichtbaren Puffern wie oben erwähnt.
StarWeaver
4

Genauso wie ein Vertex-Shader auf Vertices wirkt, wirkt ein Fragment- (oder Pixel-) Shader nur auf Pixel.

Die kommunistische Ente
quelle
Entschuldigung, aber dies ist nicht korrekt, ohne das Wort "Rastarisierung" und Interpolationen zu erwähnen.
Notabene
Noch schlimmer ist, sagt es Pixel - die aus Fragmenten verschieden sind, vor allem , wenn das Multisampling AA Render Targets beteiligt sind, Deckung zu alpha, oder einer Reihe von anderen Situationen - Ich Abstimmung , wenn ich die rep hatte
jheriko
4

Was ist ein Fragment in einem Fragment-Shader?

Das einzige, was genau gesagt werden kann, ist die Definition der Ein- und Ausgänge des Fragment-Shaders.

Da dies getan wurde / zu umfangreich ist, werde ich mich auf die intuitive visuelle Seite konzentrieren.

Ein Fragment ist die Rasterausgabe

Das OpenGL-Wiki sagt:

Ein Fragment ist eine Sammlung von Werten, die vom Rasterizer erzeugt werden.

Dies ist sinnvoll, da der Fragment-Shader dem Rasterizer folgt, der seine Eingabe erzeugt.

Und dies ist die visuelle Darstellung der Rasterizer-Ausgabe:

Bildquelle .

Die Eingabe des Rasters ist ein 3D-Dreieck und eine Sichtweise, und die Ausgabe ist eine Reihe von Pixeln, die möglicherweise auf dem Bildschirm angezeigt werden (wenn sie nicht von anderen blockiert werden).

Jedes dieser kleinen Quadrate (die als ein einzelnes Pixel codiert sind) ist ein Teil des Dreiecks, und Fragment ist nur ein anderer Name für Stück.

Ciro Santilli ist ein Schauspieler
quelle
Downvoter, bitte erläutern Sie, damit ich Inhalte lernen und verbessern kann ;-)
Ciro Santilli
Die Informationen in der oberen Antwort, gemischt mit Ihren visuellen Erklärungen, sind am besten.
StarWeaver