DGL
https://delphigl.com/forum/

was ist ein shader?
https://delphigl.com/forum/viewtopic.php?f=20&t=7954
Seite 1 von 2

Autor:  sNIk [ Fr Nov 14, 2008 19:49 ]
Betreff des Beitrags:  was ist ein shader?

kann mir jemand erklären, was shader sind? wie ich verstanden habe, kann man mit shadern geometrische objekte bearbeiten. sprich tex-mapping, beleuchtung, usw. und natürlich, dass die operationen direkt auf der GPU ausgeführt werden. ich verstehe bloß den begriff nicht.

Autor:  Lord Horazont [ Fr Nov 14, 2008 20:38 ]
Betreff des Beitrags: 

Der Begriff Shader kommt vom englischen (to) shade, was sowas wie Schattieren bedeuten dürfte. Mit den (klassischen) Shadern (Fragment- und Vertexshader) ist es möglich, die Farbe und somit die Schattierung der Geometrien zu beeinflussen. Die Vertexshader können zusätzlich auch noch die Positionen der Vertices verändern, werden aber (zumindest von mir) hauptsächlich zum übergeben der Vertexwerte an den Fragmentshader verwendet.

Mit den neuen Geometry-Shadern kann man offensichtlich auch Geometrie direkt auf der GPU erzeugen lassen, ohne den Umweg über den Bus gehen zu müssen.

Korrektur erlaubt ;).

Gruß Lord Horazont

Autor:  Traude [ Fr Nov 14, 2008 20:43 ]
Betreff des Beitrags: 

Shader sind Programme (mit einer C-ähnlichen Programmiersprache) die auf der Grafikkarte ausgeführt werden und deren Aufgabe es ist, etwas zu zeichnen.

Es gibt
----Vertex-Shader: damit kann man Vertices (=Punkte) bearbeiten,
----Pixel- bzw. Fragment-Shader: damit kann man Pixel bzw. Sub-Pixel bearbeiten
----Geometrie-Shader: das sind die neuesten Shader, damit kann man Primitive (= Dreiecke,Vierecke,.....) bearbeiten, aber frag mich hier nichts Genaues. Sie sind in OpenGL bisher glaub ich auch nicht enthalten.

Für OpenGL kann man Shader als Text-Datei erstellen und es gibt Befehle, mit denen man diese Programme kompilieren, linken und ausführen kann.

Da Shader auf der Grafikkarte ausgeführt werden und nicht in der CPU, haben sie gegenüber der älteren Zeichentechnik einen beträchtlichen Geschwindigkeitsvorteil.

Autor:  sNIk [ Fr Nov 14, 2008 20:47 ]
Betreff des Beitrags: 

@lord: genau das hat mich verwirrt ... ich kenne den begriff to shade aus dem reallife, also schattieren. was mich verwirrt hat, war das mit den geometrien. aber weiter gehts ... :)

Autor:  sNIk [ Fr Nov 14, 2008 21:10 ]
Betreff des Beitrags: 

Traude hat geschrieben:
Shader sind Programme (mit einer C-ähnlichen Programmiersprache) die auf der Grafikkarte ausgeführt werden und deren Aufgabe es ist, etwas zu zeichnen.

Es gibt
----Vertex-Shader: damit kann man Vertices (=Punkte) bearbeiten,
----Pixel- bzw. Fragment-Shader: damit kann man Pixel bzw. Sub-Pixel bearbeiten
----Geometrie-Shader: das sind die neuesten Shader, damit kann man Primitive (= Dreiecke,Vierecke,.....) bearbeiten, aber frag mich hier nichts Genaues. Sie sind in OpenGL bisher glaub ich auch nicht enthalten.

Für OpenGL kann man Shader als Text-Datei erstellen und es gibt Befehle, mit denen man diese Programme kompilieren, linken und ausführen kann.

Da Shader auf der Grafikkarte ausgeführt werden und nicht in der CPU, haben sie gegenüber der älteren Zeichentechnik einen beträchtlichen Geschwindigkeitsvorteil.



inwiefern kann man die vertices "bearbeiten"? scale, translate und rotate? oder gibts da mehr möglichkeiten?

Autor:  Traude [ Fr Nov 14, 2008 21:40 ]
Betreff des Beitrags: 

Die Befehle Translate/Rotate/Scale gibt es in Shadern nicht mehr, weil Shader einfach Programme sind, und dadurch viel mehr Möglichkeiten der Manipulation bieten. Du kannst Vertices (=Vektoren) in Shadern mit den Vektor- und Matrizenfunktionen manipuileren, also so etwas, was Du in Mathebüchern oder auch massenhaft im Internet finden kannst . Dadurch bist Du viel freier als in der alten fixen Rendering Pipeline.

Autor:  sNIk [ Sa Nov 15, 2008 11:15 ]
Betreff des Beitrags: 

danke! und weiter gehts, bin für erklärungen aller art dankbar. :)

Autor:  Flash [ Sa Nov 15, 2008 11:43 ]
Betreff des Beitrags: 

Könnt ihr eure Erklärungen in den Shader Artikel mit einfließen lassen.

@sNIk: Hast du den Artikel im Wiki schon gelesen?

Autor:  Lord Horazont [ Sa Nov 15, 2008 20:18 ]
Betreff des Beitrags: 

Für Geometry-Shader ist der Ausdruck "bearbeiten" glaube ich falsch. Das kann man mit dem Vertexshader. Die Geometryshader können Geometrie erzeugen, wenn ich mich recht erinnere.

Gruß Lord Horazont

Autor:  sNIk [ So Nov 16, 2008 12:34 ]
Betreff des Beitrags: 

Lord Horazont hat geschrieben:
Für Geometry-Shader ist der Ausdruck "bearbeiten" glaube ich falsch. Das kann man mit dem Vertexshader. Die Geometryshader können Geometrie erzeugen, wenn ich mich recht erinnere.

Gruß Lord Horazont


ja, so habe ich das eigentlich auch verstanden. :)

Autor:  Traude [ Mo Nov 17, 2008 14:45 ]
Betreff des Beitrags: 

Tja - bin eben nicht so der Experte für Geometrieshader. :wink:

Aber ich weiß jetzt, dass es eine Extension für OpenGL gibt, siehe dort: http://developer.download.nvidia.com/opengl/specs/GL_EXT_geometry_shader4.txt.

Autor:  TAK2004 [ Mo Nov 17, 2008 16:22 ]
Betreff des Beitrags: 

Es gibt 3 Shader Programmarten, Geometry Shader, Vertex Shader und Fragment Shader.
Jeder dieser Programme übernimmt die Funktionalität eines Schrittes, in der Renderpipeline.
Der Geometry Shader ist der zuerst aufgerufende Shader, welcher dafür sorgt, dass die herreingekommenden Meshes verarbeitet werden.
In die Renderpipeline kommen Meshdaten hinein, in Form von glBegin(...) ... glEnd(...) bzw. über VBO und diese werden nun auf richtigkeit geprüft. Dann werden diese im Geometry Shader zur veränderung frei gegeben. Man kann also aus einen Dreieck und den Normal z.B. das Dreieck in viele kleine zerlegen und dann geht es in der Renderpipeline weiter.(Ich habe noch keine Geometry Shader verwendet oder mich dazu groß belesen und daher weiß ich nicht ob der Schritt mit dem zerlegen in Triangle davor oder danach passiert.)
Später kommt der Vertex Shader, dieser hat die Aufgabe die Vertice zu transformieren und zu manipulieren, also Vertice Positionen in die ModelView zu bringen und eventuell noch Texturkoordinaten oder die Farbwerte zu ändern. Dieser Schritt stellt in der normalen Pipeline eigentlich die transformation von Vertice in die Modelview und die manipulation der Farbwerte für die Fog realisierung.
In der Pipeline würde nun das Clipping passieren und daher wird das auf alle Objekte angewendet, die wir rein gegeben haben, auch wenn sie nicht im Sichtbereich sein werden.
Dann kommt die Bildschirm Projektion, also alle Vertice werden so Transformiert, das sie eine 2D Punkt repräsentieren.
Nun wird noch die Geometry noch beschnitten, damit sie nicht Bildschirmpunkte zurück gibt, die ausserhalb des Bildpuffers liegen.
Dabei wird das Triangle übrigens wieder in Triangle zerlegt, im blödesten Fall kommen glaube 3 neue raus.
Der Rasterizer läuft nun über das einzelnde Triangle, indem er über Lineare interpolation und scanline die Kantenpixel findet und nun zu dem Pixel Shading kommt.
Zuerst kommt der Scissor test und ist dieser erfolgreich, dann wird der Fragment Shader aufgerufen oder der Treiber Code verwendet.
Der Rasterizer übergibt alle Informationen zu dem Pixel mit, die er zur verfügung hat(Texturkoordinaten(gleiche wie bei Farbe),Bildschirmkoordinaten(x,y bekommt man nicht direkt, sondern über Funktion dFdx und dFdy),Farbe(interpolation zwischen 3 kanten und mittelwert bilden), Tiefenwert, Texturdaten).
Der Fragment Shader soll nun den Endgültigen Pixelwert errechnen und da kann man eine menge einfliessen lassen.

Autor:  MarvDasSchaf [ Mi Nov 19, 2008 00:10 ]
Betreff des Beitrags: 

Der geometry Shader hört sich sehr interessant an. Gibt es eigentlich irgendwelche Spiele oder Tech-Demos wo man den Shader mal in Aktion sehen kann? Ich denke da einfach mal an eine voll zerstörbare Umgebung. Bisher dominiert ja die Meinung das DX10 ein ziemlicher Schuss in den Ofen gewesen ist, aber wenn man den Geometry Shader für eine zerstörbare Umgebung nutzen könnte, wäre das für mich der größte Fortschritt seit Ewigkeiten.

Autor:  TAK2004 [ Mi Nov 19, 2008 09:50 ]
Betreff des Beitrags: 

Aktuell wird der Geometry Shader für LOD und Displacement Mapping verwendet, sonnst gibt es noch keinen großen einsatzbereich.
ATI und NV haben Videos bzw. Demos auf ihren Seiten, dazu musst mal in die gf8800 und aufwärts oder hd2xxx und aufwärts gucken.

Autor:  dj3hut1 [ Do Nov 20, 2008 09:08 ]
Betreff des Beitrags: 

Hallo MarvDasSchaf,

einige Demos für Geometry-Shader findest du hier : http://www.humus.name/index.php?page=3D

Viele Grüße
dj3hut1

Seite 1 von 2 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/