Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

1

08.12.2012, 13:55

Wie oft wird der Fragmentshader aufgerufen ?

Hallo Forum

Eine eher banale Frage für die Cracks unter euch.
Mir ist immer noch nicht richtig klar wann bzw. wie oft der Fragmentshader aufgerufen wird.
Vertexshader ist klar. Einmal pro Vertex. Da kann man sich was drunter vorstellen.
Bei Fragmentshadern heißt es immer einmal pro Fragment.
Wie genau definiert man hier Fragment ?

Danke
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

2

08.12.2012, 14:01

Fragment ist in dem Fall nur ein anderes Wort für Pixel. Also für jeden Pixel einmal.

3

08.12.2012, 14:10

Naja, es hat schon einen guten Grund, dass er Fragmentshader heißt und nicht Pixel Shader. Ein Fragment-Shader berechnet ein Fragment, ein Pixel des Ausgabebildes wird aus mehreren Fragmenten zusammengesetzt. Also zum Beispiel wenn Objekte hintereinander liegen, oder man transparente Objekte hat, hat man sehr viel mehr Fragmente, als Pixel. Bei nicht transparenten Objekten nennt man das Overdraw und natürlich ist das etwas, dass man irgendwie vermeiden möchte, weil man Fragmente berechnet die man später nie sehen wird. Durch Early-Z Test kann man da z.b. schon einiges machen.

Aber ja, wenn du ein Dreieck renderst, dass 100 Pixel groß ist, wird der Fragmentshader 100 mal aufgerufen. (Da man pro Dreieck nur ein Fragment pro Pixel hat).
Lieber dumm fragen, als dumm bleiben!

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

4

08.12.2012, 15:19

Nicht ganz: der Pixelshader läuft nach meinem Wissen auch für alle Fragmente eines Pixels bei bestimmten AntiAliasing-Methoden. Ich weiß nicht genau, welche AA-Modi das sind - bei manchen dieser Modi läuft der FragmentShader für alle Fragmente, also z.B. 4x pro Pixel, bei anderen läuft der Shader nur einmal pro Pixel und das Ergebnis wird dann je nach Coverage auf x Fragmente des Pixels dupliziert.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

5

08.12.2012, 15:25

Aber ja, wenn du ein Dreieck renderst, dass 100 Pixel groß ist, wird der Fragmentshader 100 mal aufgerufen. (Da man pro Dreieck nur ein Fragment pro Pixel hat).


Jetzt bin ich verwirrt !
Der Fragmentshader arbeitet doch mit relativen Geometriedaten.
Ich Zeichne doch kein Dreieck mit einer Seitenlänge von 100 Pixeln sondern mit so was wie 0.5.
Die konkrete Umsetzung in Bildschirmpixel macht doch der Rasterizer und der kommt doch erst am
Ende der Renderpipe wenn der Fragmentshader schon durchlaufen worden ist. ?(
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

08.12.2012, 15:34

Nope. Der Rasterizer braucht doch den Fragmentshader, damit er überhaupt entscheiden kann, was er rastern muss.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

7

08.12.2012, 15:55

Nope. Der Rasterizer braucht doch den Fragmentshader, damit er überhaupt entscheiden kann, was er rastern muss.


Komme ich nicht so ganz mit ehrlich gesagt.
Kannst du das noch etwas präziser darstellen.
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

08.12.2012, 16:05

OK, ich sag's anders:
Woher soll ein Fragment- bzw. Pixelshader wissen, was er für eine Farbe in ein Raster zu setzen hat, wenn er vor der Rasterisierung gerufen wird?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

9

08.12.2012, 16:15

OK, ich sag's anders:
Woher soll ein Fragment- bzw. Pixelshader wissen, was er für eine Farbe in ein Raster zu setzen hat, wenn er vor der Rasterisierung gerufen wird?


Also wird der Fragmentshader nach dem Rastereizer aufgerufen und berechnet, aus seinen relativen Daten, für jeden Pixel des Rasters eine Farbe ?
Wenn ich also einen Renderaufruf (glDraw oder so) mit einem Viewport 640x480 durchlaufe wird der Fragmentshader 640*480=307200 mal durchlaufen ?
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

08.12.2012, 16:26

Wenn ich also einen Renderaufruf (glDraw oder so) mit einem Viewport 640x480 durchlaufe wird der Fragmentshader 640*480=307200 mal durchlaufen ?


Ein Pixel wird nicht zwangsläufig nur einmal gezeichnet.
@D13_Dreinig

Werbeanzeige