PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was sind Shader?


ollix
2002-12-08, 11:54:10
Moin,

ich interessiere mich für Ideen bzgl. Shadern ganz allgemein. Was sind Shader? Klar kann man sie programmieren und damit das Wasser in Morrwind oder das Gras im Nature Test machen, aber darum geht es mir jetzt nicht.

Kann Texturfilterung über Shader z.B. realisiert werden, etc.

Wie weit kann man Shader zurückverfolgen. Was kann man als ersten Shader bezeichnen oder wo wurden zum ersten Mal Shader eingesetzt?
???
Ich hoffe auf ein paar nette Ideen bzgl. dieses Ansatzes...

nggalai
2002-12-08, 12:46:58
Hi there,

passt hier wohl besser rein . . . ;)

Ganz kurz, nur: Shader sind Programme / Funktionen, welche Materialeigenschaften von Objekten durch Texturtransformationen simulieren. Mal von Echtzeit-3D abgesehen gibt's Shader schon seit Ewigkeiten; der bekannteste dürfte wohl der Phong-Shader sein, welcher die Lichtverteilung z.B. für Plastik recht gut annähert (Specular Highlights etc.). Gouraud-Shader interpolieren pro Dreieck die Farbwerte der Ecken und produzieren so Farbverläufe in einem Dreieck--dürfte wohl der älteste Shader sein, den man in Echtzeit-3D verwendet hat, lasse mich da aber gerne korrigieren. ;)

Shader transformieren Texturwerte, z.B. abhängig von Position zur Kamera, Position zur Lichtquelle, Objektorientierung etc. Je nach Komplexität benötigen Shader mehrere Ausgangstexturen, welche verrechnet werden--Beispiel wäre Bumpmapping, welches die Texturwerte der Basistextur nimmt, und dann mit den Werten der Bumpmap je nach Winkel / Abstand zur Lichtquelle transformiert. Das lässt sich natürlich in den Grenzen der Hardware/Software beliebig verketten; z.B. die Werte der Basistextur mit einer Diffuse-Map kombinieren, das dann mit einer Bumpmap kombinieren, noch eine Cube-Map drauf . . .

Das Gras im Nature-Test wird übrigens nicht über Shader erstellt; Echtzeit Fur/Grass-Shader sind doch recht aufwendig umzusetzen. Nature verwendet Polygone plus Alpha-Texturen fürs Gras.

Shader lassen sich auch für die Bildtransformation verwenden, z.B. zum Filtern von Bildern (und auch Texturen). Weichzeichner z.B. lassen sich so einfach implementieren; für den Shader gibt's einfach eine Fläche, welche mit dem Bild texturiert wurde--der Shader verwischt dann einfach noch die Texturwerte.

ta,
-Sascha.rb

zeckensack
2002-12-08, 12:49:19
Schönen guten Morgen erstmal :)

Shader sind kurze Programme.

Grafikchips sind ja grundsätzlich Dreiecksschleudern, Vertices (=Eckpunkte) werden irgendwie* transformiert, aus jeweils drei Stück wird dann ein Dreieck gebastelt, das irgendwie* mit Pixeln gefüllt wird.

*irgendwie:
Bei den Vertices gibt's die Wald-und-Wiesen-Variante, sie mit einer Matrix zu multiplizieren, wodurch sich Drehungen, Streckungen und Vergrößerungen der zugehörigen Dreiecke (und damit kompletter Objekte) schön definiert durchführen lassen.

Bei den Pixeln kann man quasi zwischen mehreren Varianten auswählen, wie Texturen und Farben zusammengemischt werden.

Shader ersetzen diese Auswahl aus ein paar vordefinierten Möglichkeiten einfach durch kleine Programme, die (aus der Perspektive des Programmierers) ähnlich funktionieren wie kleine Funktionen in einer Hochsprache.

Eckpunkt rein, Eckpunkt raus für Vertex Shader,
Texturkoordinaten und Position rein, Farb-/Z-Wert raus für den Pixelshader.

Bei Bedarf mehr :)
*kaffeesauf*

Karümel
2002-12-08, 18:06:59
Originally posted by zeckensack

Bei Bedarf mehr :)



Ich bin zwar nicht ollix, aber ich bitte mehr.:)

Modulor
2002-12-08, 21:58:27
Worin besteht der Unterschied zwischen dem "Advanced Pixel Shader" aus 3DMurx und dem "normalen" Pixel Shader? Bessere (flexiblere) Programmierbarkeit? Weniger Befehle und dadurch schnellere Abarbeitung?
Meine VPU ist nämlich in der Lage unter bestimmten Vorraussetzungen exorbitant hohe Werte beim "Advanced Pixel Shader" zu erzeugen, währen die normalen Vertex und Pixel Shader Ergebnisse bei den gleichen Vorraussetzungen identisch zum "normalen" benchen bleiben...

Konkret:
Ich kann die Auflösung einer Applikation unter D3D um ein vielfaches verkleinern (für die Applikation transparent: sie denkt weiterhin, sie fährt "ihre" Auflösung ;)). Dadurch steigen die Werte des Advanced Pixel Shader Tests an, nicht aber die der normalen Shader Tests...

aths
2002-12-09, 07:55:03
Originally posted by Modulor
Worin besteht der Unterschied zwischen dem "Advanced Pixel Shader" aus 3DMurx und dem "normalen" Pixel Shader? Bessere (flexiblere) Programmierbarkeit? Weniger Befehle und dadurch schnellere Abarbeitung? Der Advandec Pixel Shader Test nutzt, sofern vorhanden, PixelShader 1.4, oder aber Multipass- Rendering und afaik PixelShader 1.1. Afaik nutzt der normale PixelShader-Test nur Version 1.0.

Unregistered
2002-12-10, 23:03:14
Advanced Shader - Test hat doch meine GF4 problemlos funktioniert und keine fehler/bugs, ich glaube nicht, dass es Shader 1.4 ist (ich habe keine ATI Radeion 8500), sondern Pixel Shader 1.3 oder afaik Pixel Shader.

THUNDERDOMER
2002-12-10, 23:06:45
Originally posted by Unregistered
Advanced Shader - Test hat doch meine GF4 problemlos funktioniert und keine fehler/bugs, ich glaube nicht, dass es Shader 1.4 ist (ich habe keine ATI Radeion 8500), sondern Pixel Shader 1.3 oder afaik Pixel Shader.

sorry, das bin ich... scheiß cookies! :(

aths
2002-12-11, 15:01:06
Originally posted by THUNDERDOMER
Advanced Shader - Test hat doch meine GF4 problemlos funktioniert und keine fehler/bugs, ich glaube nicht, dass es Shader 1.4 ist (ich habe keine ATI Radeion 8500), sondern Pixel Shader 1.3 oder afaik Pixel Shader. Originally posted by aths
Der Advandec Pixel Shader Test nutzt, sofern vorhanden, PixelShader 1.4, oder aber Multipass- Rendering und afaik PixelShader 1.1. Afaik nutzt der normale PixelShader-Test nur Version 1.0.

aths
2002-12-11, 15:02:33
Originally posted by Modulor
Konkret:
Ich kann die Auflösung einer Applikation unter D3D um ein vielfaches verkleinern (für die Applikation transparent: sie denkt weiterhin, sie fährt "ihre" Auflösung ;)). Wie machst du das?

Modulor
2002-12-11, 21:20:54
Mittels des registry Eintrages "VertexShrinkFactor". Wenn ich den z.B. auf 16 setze läuft der 3DMark in der linken oberen Ecke mit 64x48 Pixel - so bekomme ich beim Pixelshader 195 und beim Advanced Pixel Shader 208 frames ;).Ist ja irgendwie logisch bei der Bildgröße,aber daß die VPU das scheinbar so einfach skalieren kann finde ich schon "nett"...