Beste Antwort
Shader sind spezielle Programme, die von Grafikhardware zur Erzeugung von Bildern verwendet werden. Sie sind normalerweise in kleinere Programme unterteilt, die verschiedene Aspekte des Hardware-Rendering-Prozesses behandeln.
Es gibt jedoch verschiedene Varianten Die häufigsten sind Pixel und Vertex -Shader.
Die Der Vertex-Shader ist für das Anwenden von Änderungen an der Eingabegeometrie verantwortlich. Normalerweise bedeutet dies, dass die 3D-Geometrie auf die 2D-Projektionsebene des Ausgabebilds projiziert wird. Manchmal können Sie der Geometrie jedoch auch hier eine prozedurale Bewegung oder Verformung hinzufügen.
Der Pixel-Shader nimmt die Ausgabe des Vertex-Shaders und generiert die Pixel, die im endgültigen Bild angezeigt werden. Meistens basiert dies auf einer Variation der -Rendering-Gleichung , bei der die Blickrichtung des Pixels mit den Richtungen der Lichtquellen und den Eigenschaften der Oberfläche verglichen wird Dies kann jedoch alles sein, von einer zufälligen Rauschfunktion bis hin zu einer komplexen Simulation oder Raytracing.
Der Teil davon, der sich am meisten von der normalen Programmierung unterscheidet, besteht darin, dass sowohl Vertex- als auch Pixel-Shader extrem parallelisiert. Jeder Vertex-Shader wird gleichzeitig auf jedem Vertex in den Eingabedaten ausgeführt. Jeder Pixel-Shader wird gleichzeitig auf jedem Pixel im endgültigen Bild ausgeführt. Das bedeutet, dass es schwierig ist, basierend auf dem Status eines anderen Pixels etwas zu tun. Alle Pixel werden unabhängig voneinander gleichzeitig ausgeführt. Effekte, die den Kontext kennen müssen, müssen häufig mehrere Pixel-Shader nacheinander ausführen und die Ergebnisse in temporären Bildern speichern.
Dies gibt Ihnen einen anständigen, sehr einfachen Überblick über die Funktionsweise:
Antwort
Ein „Pixel-Shader“ (ein schlechter Name für einen „Fragment-Shader“) ist ein kleines Programm, das viele Male parallel auf der GPU ausgeführt wird, um die Farbe von Fragmenten zu bestimmen. Grundsätzlich sind Fragmente Pixel konzeptionell sehr ähnlich, daher die Namensverwirrung.
Wenn Geometrie zum Zeichnen eingereicht wird, werden die Scheitelpunkte vom „Vertex-Shader“ transformiert. Die Pipeline erstellt Grundelemente wie Dreiecke oder Linien. Nachdem sie auf den Bildschirm projiziert und abgeschnitten wurden, berechnet der Raster alle berührten Pixel und interpoliert alle Werte zwischen Scheitelpunkten wie Farben, Texturkoordinaten oder Normalen . Der Fragment-Shader wird für jedes der Fragmente ausgeführt, um die endgültige Farbe zu ermitteln. Andere Operationen wie Tiefen- / Alpha- / Schablonentests werden durchgeführt, und dann können Fragmente im Fall von Multisample-Antialiasing möglicherweise zusammen gemittelt werden, bevor sie schließlich zu tatsächlichen Pixelfarben werden, die in den Bildschirmpuffer geschrieben oder gemischt werden sollen.
Bild aus hier .