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.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
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
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
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.
@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 ...
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?
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
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.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
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
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
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.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2622 Wohnort: Berlin
Programmiersprache: Go, C/C++
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.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Mi Aug 13, 2008 12:39 Beiträge: 26 Wohnort: Berlin
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.
_________________ Der frühe Wurm wird vom Vogel gefangen.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2622 Wohnort: Berlin
Programmiersprache: Go, C/C++
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.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.