Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jun 16, 2024 01:39

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: was ist ein shader?
BeitragVerfasst: Fr Nov 14, 2008 19:49 
Offline
DGL Member

Registriert: Do Okt 30, 2008 00:59
Beiträge: 30
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 14, 2008 20:38 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 14, 2008 20:43 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 14, 2008 20:47 
Offline
DGL Member

Registriert: Do Okt 30, 2008 00:59
Beiträge: 30
@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 ... :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 14, 2008 21:10 
Offline
DGL Member

Registriert: Do Okt 30, 2008 00:59
Beiträge: 30
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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 14, 2008 21:40 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 15, 2008 11:15 
Offline
DGL Member

Registriert: Do Okt 30, 2008 00:59
Beiträge: 30
danke! und weiter gehts, bin für erklärungen aller art dankbar. :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 15, 2008 11:43 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Könnt ihr eure Erklärungen in den Shader Artikel mit einfließen lassen.

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

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 15, 2008 20:18 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 16, 2008 12:34 
Offline
DGL Member

Registriert: Do Okt 30, 2008 00:59
Beiträge: 30
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. :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 17, 2008 14:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 17, 2008 16:22 
Offline
DGL Member
Benutzeravatar

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

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 19, 2008 00:10 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 19, 2008 09:50 
Offline
DGL Member
Benutzeravatar

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

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 20, 2008 09:08 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo MarvDasSchaf,

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

Viele Grüße
dj3hut1

_________________
Wenn Gauß heute lebte, wäre er ein Hacker.
Peter Sarnak, Professor an der Princeton University


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Shader


Wer ist online?

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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.180s | 15 Queries | GZIP : On ]