ich hab mal ne frage zu Vertex und PixelShadern... Und zwar: Was macht man damit??? *g*
Wie man sie programmiert etc bla bla is alles kein thema, nur ich verstehe im moment nochnet so ganz was man damit tolles machen können soll, was nicht auch so machbar wäre (vorallem die VertexShader)... *guckt unsicher*
Ich hab z.B. gelesen das man mit VertexShadern z.B. MotionBlur gut lösen kann, oder ClothSimulations... aber, nen VertexShader macht doch nix anderes als nen Vertex zu transformieren etc, oder???
Au'revoir, Aya~
PS: Bitte nich auf SoS' Tutorial verweisen, das hab ich mir gestern mal durchgelesen (bzw, sehr gutes Tutorial! ).
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Also erstmal wollen wir uns von der D3D-Terminologie (die stellenweise auch nicht korrekt ist losreissen), und nutzen lieber die OpenGL-Begriffe : VertexShader (D3D) = <span style='color:blue'>VertexProgramm (OGL)</span> PixelShader (D3D) = <span style='color:blue'>FragmentProgramm (OGL)</span>
Was man damit machen kann?Sehr sehr viel, und zwar besonders mit Fragmentprogrammen.
Vertexprogramme : Das ein VP nicht viel mehr machen kann, als ein Vertex zu "transformieren" hast du ja bereits festgestellt, und ist auch teilweise korrekt.Allerdings bringt die GPU ja 27 Funktionen mit, mit deren Hilfe man ein Vertex (und dessen Eigenschaften wie Nebelkoordinate, Farbe, Texturkoordinate, etc.) auf tolle Art und Weise verändern kann.Diese Funktionen müsste man ansonsten auf der CPU laufen lassen (z.B: DP3, RSQ, DST, ect.) und würde diese somit stark belasten.Die GPU ist allerdings (wenn sie VP in der Hardware kann) auf diese Befehle optimiert (sprich besutzt für diese Programme wohl Mikroprogramme) weshalb diese dann auch viel schneller verarbeitet werden können. Kurzes Fazit zum Thema VP : Alles was man in einem VP machen kann, ist auch auf der CPU möglich, allerdings wird dadurch die auf diesen Befehlssatz nicht ausgerichtete CPU stark belastet, weshalb durch VPs nun komplexe, spezifische graphische Berechnungen auf der GPU möglich sind, die anhand der beschränkten Rechenzeit der CPU vorher nicht (oder nur langsam) möglich waren. Was genau man mit VPs machen kann, siehst du ja am Ende meines Tuts, wo ich einige Beispiele inklusive Pics aufliste.
Fragmentprogramme : Wie der Name ja vermuten lässt, kann man mit einem Fragmentprogramm für jedes Fragment (deshalb finde ich den Begriff PixelShader auch nicht korrekt) das die Renderpipeline durchläuft ein eigenes Programm (oder besser Berechnungen) auf der GPU ausführen.Eine Emulation auf der CPU ist nicht in annehmbarere Geschwindigkeit möglich, denn oft werden ja mehere millionen Fragmente pro Frame bearbeitet. Das heisst also im grunde genommen, das man mit einem FP jedes Fragment nach Belieben verändern kann.So lassen sich per-Pixel-Berechnungen ganz bequem und auch schnell auf der dafür sepzialisierten GPU ausführen.Darunter fallen Dinge wie per-Pixel-Beleuchtung, Bump-Mapping, usw. Um dir mal nen Eindruck von dem zu verschaffen, was man mit FPs so alles machen kann, empfehle ich dir unbedingt mal die <a href='http://esprit.campus.luth.se/~humus/' target='_blank'>HP von Humus</a>, auf der es sehr viele interessante Demos gibt, die sowohl FPs als auch VPs nutzen.
Ich hoffe mal, das bringt dich ein wenig weiter.Leider sind sowohl VPs und FPs sehr komplexe Themen, und ihr Einsatzbereich ist fast unbegrenzt, da man mit ihnen die tollsten Dinger machen kann.Hier werden die Grenzen eher von der Fantasie des Programmierers als von der Hardware gesetzt.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Wenn ich das recht verstanden habe dann haben die VP's noch einen anderen riesen Vorteil. Mit Hilfe der Vertex Buffer Objects ist es möglich Vertexdaten auf die Grafikkarte hochzuladen. Wenn du diese dann mit einer Art Rauschen (Wasser) belegen möchtest, dann müsstest du (für den Fall, dass das auf der CPU berechnet wird) die Daten für jedes Frame wieder hoch laden. Du musst ja jedes Mal die Daten über den Bus schicken. Mit Vertex Programmen kann so etwas nicht passieren. Die Graka nimmt sich das aus dem Speicher berechnet das kurz und reicht den Vertex dann gleich weiter. Das dabei ein riesiger Geschwindigkeitsvorteil entsteht brauch ich ja nicht zu erwähnen.
1.) VertexShader/PixelShader.. ich denke mal ich bleibe bei diesen Namen, da ich die dinger nie anders namig kennengelernt habe (Ich hab ja schon lange bevor ich mit OpenGL oder Delphi angefangen habe mit Maya rumexperimentiert.. und dort nennen die sich nunmal VertexShader/PixelShader = ich kenne es nich anders = gewohnheit = zu faul zum umlernen *g*)
2.) Wenn ich eine DisplayList mache, wird diese ja im Speicher der GraKa gespeichert... also ist im grunde schneller als ein VertexArray und alles andere. Kann ich denn da nun auch daten der DisplayList via VertexShader/VertexProgram anpassen, oder nimmt die DisplayList net jedesmal den weg über T&L???
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Zitat:
2.) Wenn ich eine DisplayList mache, wird diese ja im Speicher der GraKa gespeichert... also ist im grunde schneller als ein VertexArray und alles andere. Kann ich denn da nun auch daten der DisplayList via VertexShader/VertexProgram anpassen, oder nimmt die DisplayList net jedesmal den weg über T&L???
Ich denke du hast dir mein Tutorial durchgelesen?Dort sieht man doch schon direkt am Anfang dieses nette Diagramm, in dem die Pipeline angezeigt wird. Dort ist ja auch leicht zu sehen, das die feste T&L-Einheit (die ab der GF3 sowieso über VPs realisiert wird, da es hier keine festverdrahtete T&L-Einheit wie bei der GF1/2 mehr gibt) nach der Aktivierung von Vertexprogrammen (via glEnable) komplett umgangen wird.Jedes Vertex (egal wo es liegt, ob über glVertex3f gesendet, oder als VBO/Displayliste) wird dann durch deine Vertexprogramme verarbeitet.Die feste T&L-Einheit wird dann komplett umgangen, also quasi deaktiviert.
Ja, das die T&L umgangen wird is mir ja klar... nur was ich meinte war, das ich mir unsicher war ob eine DisplayList die schon vorberechnet im Speicher liegt überhaupt durch T&L (bzw das VP) geht.
Mitglieder in diesem Forum: 0 Mitglieder und 6 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.