Was machen Pixel und Vertex Shader, bzw. was kann man mit ihnen machen?
-
Mir ist leider noch nicht ganz klar,
was man genau mit Pixel und Vertex Shader machen kann,
bzw. wie das genau funktioniert.Von den ganzen Spielezeitschriften weiß ich zwar,
daß man damit neue Effekte wie z.b Wasser oder Schatten usw. machen kann,
aber ich weiß nicht wie die Pixel und Vertex Shader das von der Programmierer Sicht machen?Und bei den Hardwaretestseiten wird das alles leider nur Hardwareseitig
beschrieben, aber es wird nicht gesagt, was ein Pixel und Vertex Shader z.b.
mit einem Dreieck oder einer Textur machen kann bzw. was er damit eigentlich macht.Kann mir das bitte jemand erklären?
-
Hi,
beides sind kleine Programme, die auf der GPU (also dem Prozessor der Grafikkarte laufen).
Dabei ist ein Vertex Shader für die Vertextransformation zuständig. Er wird also für jeden Vertex (also dreimal pro Dreieck) aufgerufen und hat die Aufgabe, diesen in den 2D-Raum des Bildschirms zu transformieren. Natürlich tut er das oft nicht auf die normale Weise, sondern verändert z.B. Farbe, Position, interpoliert zwischen zwei Vertex Streams usw.
Ein Pixel Shader macht im Prinzip das Gleiche, nur wird er für jeden zu zeichnenden Pixel auf dem Bildschirm aufgerufen (also verdammt oft). Er kann "nur noch" die Farbe verändern.
ChrisM
-
ChrisM schrieb:
Hi,
beides sind kleine Programme, die auf der GPU (also dem Prozessor der Grafikkarte laufen).
Dabei ist ein Vertex Shader für die Vertextransformation zuständig. Er wird also für jeden Vertex (also dreimal pro Dreieck) aufgerufen und hat die Aufgabe, diesen in den 2D-Raum des Bildschirms zu transformieren. Natürlich tut er das oft nicht auf die normale Weise, sondern verändert z.B. Farbe, Position, interpoliert zwischen zwei Vertex Streams usw.
Und wo ist der Unterschied zu alten Grafikchips?
Da hat man ja auch Vertics transformiert, verschoben usw. zumindest mithilfe der CPU?Ein Pixel Shader macht im Prinzip das Gleiche, nur wird er für jeden zu zeichnenden Pixel auf dem Bildschirm aufgerufen (also verdammt oft). Er kann "nur noch" die Farbe verändern.
ChrisM
Wir er nur auf alle Pixel des fertig berechnenten und zu darstellenden 2. Raumes angewendet oder wirkt er sich noch auf die einzelnen Texturen in einer 3d Raum aus?
Also arbeitet er vor oder nach der Festlegung was man auf dem 2d Bildschirm wirklich sehen kann.Und wenn letzteres gilt, wie kann man dem Pixelshader dann sagen, das nur
das Wasser da oben in der Ecke bearbeitet werden soll und das Land weiter unten nicht wenn man keinen 3d Raum mehr zur Verfügung hat?
-
Hi,
nein, bei alten Grafikchips kannst du entweder alles von Hand (d.h. mittels CPU) transformieren (sehr langsam, für Echtzeit eigentlich unbrauchbar, von optimierten Softwarerenderern mal abgesehen!) oder die Fixed Function Pipeline verwenden.
Der Pixel Shader arbeitet schon im 2D-Bereich, also nach der Rasterisierung.
Und wenn letzteres gilt, wie kann man dem Pixelshader dann sagen, das nur
das Wasser da oben in der Ecke bearbeitet werden soll und das Land weiter unten nicht wenn man keinen 3d Raum mehr zur Verfügung hat?Du kannst ja verschiedene Shader verwenden oder den Shader anhand einer zusätzlichen Blendtextur (oder Alphakanal) steuern.
Außerdem kannst du noch Konstanten setzen.
ChrisM
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Themen rund um Offtopic in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ok vielen dank, jetzt habe ich es verstanden.
Aber da bleiben noch ein paar Fragen offen.
Inwiefern war eine Fixed Function Pipline (DirectX 7 ?) eingeschränkt?
Heißt das, daß ich z.b. eine Funktion hatte die einen Vertex um einen
gewissen Betrag verschieben konnte?
Wenn ja, dann könnte man ja mehrere Funktionen hintereinander verwenden und
dann hat man ja auch wieder etwas progammierbares, was ist da bei einem Vertex Shader dann besser programmierbar, wo ist der Unterschied?Dann würde ich noch wissen was der Unterschied
zwischen den einzelnen Pixel Shadern und Vertex Shadern außer deren größeren
Befehlslänge noch ausmacht?Bei einem Pixel Shader 3.0 weiß ich z.B. das man da verzweigen kann, daß
ging mit den alten anscheinend nicht.
Aber was war der Unterschied zwischen 1.0 bzw, 1.4 und 2.0?
Nur die Befehlslänge?Und wie war das bei den Vertex Shadern?
Kann man mit einem Vertex Shader z.b. zusätzliche Vertex hinzufügen oder
bestehende löschen?
-
Hi,
Inwiefern war eine Fixed Function Pipline (DirectX 7 ?) eingeschränkt?
Die Transformation ist halt fest vorgegeben. Du kannst darauf also keinen Einfluss nehmen.
Ich glaube, du hast was falsch verstanden. Die Pipeline heißt zwar Fixed Function Pipeline, aber es ist keine Funktionssammlung, wo du dir eine raussuchen kannst. Du hast nur die eine, die den Vertex einfach mit der Hauptmatrix (Transformation * Kamera * Welt) multipliziert.
Dann würde ich noch wissen was der Unterschied
zwischen den einzelnen Pixel Shadern und Vertex Shadern außer deren größeren
Befehlslänge noch ausmacht?Mit jeder Versionen kommen neue (meist mathematische) Assembler-Befehle hinzu.
Kann man mit einem Vertex Shader z.b. zusätzliche Vertex hinzufügen oder
bestehende löschen?Nein, zumindest bei der derzeit aktuellen Version geht das leider nicht. Ist aber ja auch eigentlich nicht der Sinn, die Shader sollen ja wie der Name schon sagt "schattieren" (zumindest halt die Pixel Shader), d.h. sie dürfen keine Daten hinzufügen und verwerfen, sondern nur manipulieren.
ChrisM