Talk:Vertex shader
From Wikipedia, the free encyclopedia
Vertex-Shader aus Wikipedia, der freien Enzyklopädie Wechseln zu: Navigation, Suche Vertex-Shader (auch Vertexshader, Abk. VS) sind Programme, die in der Regel vom Grafikprozessor einer 3D-Grafikkarte im Verlauf der Rendering-Pipeline (in den sogenannten Shadereinheiten) ausgeführt werden. Häufig werden auch die Shadereinheiten selbst als Vertex-Shader bezeichnet.
Inhaltsverzeichnis [Verbergen] 1 Funktion 2 Programmierung 3 Kompatibilität 3.1 Hardware 3.2 Software 4 Siehe auch 5 Weblinks
Funktion [Bearbeiten]Ein Vertex-Shader dient dazu, die Geometrie einer Szene zu manipulieren, indem die Vertizes der Oberflächen verschoben werden. Dadurch lässt sich die Form von Objekten beeinflussen, was sich wiederum auch in ihrer Beleuchtung niederschlägt. Allerdings kann ein Vertex-Shader nur bestehende Geometrie verändern, er kann weder welche entfernen noch neue hinzufügen, hierfür ist der Geometry-Shader notwendig. Hinsichtlich des Funktionsumfangs ersetzt der Vertex-Shader somit das ältere Transform & Lighting (T&L), das wesentlich weniger flexibel ist.
Mit Hilfe von Vertex-Shadern sind Effekte wie Vertex Lighting, Terrain-/Objektdeformation, Wasserwellen oder Fischaugenobjektiv möglich. Da die meisten heutigen Grafikchips Shadereinheiten enthalten, die die Vertex-Shader ausführen, müssen diese Programme nicht auf der CPU des Systems laufen, dadurch wird diese entlastet und kann für andere Aufgaben eingesetzt werden. In der Regel werden mehrere Shadereinheiten in GPUs verbaut, damit diese nicht zum Flaschenhals der Rendering-Pipelines werden.
Zusätzliche Informationen zur Verarbeitungskette gibt es im Artikel zu den Shadern.
Programmierung [Bearbeiten]Vertex-Shader werden in speziell dafür vorgesehenen Sprachen geschrieben (Assembler, Cg, GLSL). Sofern der Grafikchip Vertex-Shadereinheiten besitzt, übersetzt der Grafikkartentreiber zur Laufzeit der 3D-Anwendung den Shader in einen für die Grafikkarte verständlichen Maschinencode, welcher dann in den Shadereinheiten ausgeführt wird. Bei Lowcost-Grafikchips werden die Vertex-Shadereinheiten aber häufig weggelassen, wodurch die Shader mit Hilfe der CPU berechnet werden müssen, was zumeist langsamer ist. Somit wird klar, dass Unterstützung für Vertex-Shader letztlich nur Treibersache ist und theoretisch für jede Grafikkarte angeboten werden könnte. Damit die Funktionalität der Vertex-Shader auch einheitlich von Anwendungen genutzt werden kann, bieten sowohl DirectX als auch OpenGL Schnittstellen für ihre Anwendung.
Im Laufe der Zeit haben Funktionsumfang und Leistungsfähigkeit der anfangs noch ziemlich einfachen Shadereinheiten stark zugenommen; heute ist ihre Programmierbarkeit so weit fortgeschritten, dass man mit ihnen viele Berechnungen erledigen kann, die bisher nur CPUs ausführen konnten, oftmals sogar wesentlich schneller. Hierbei entstanden gerade bei DirectX diverse Versionen der Vertex-Shader, die von verschiedenen Grafikchips unterschiedlich gut unterstützt werden. Bei OpenGL kann der Grafikkartentreiber die Nutzung von Vertex-Shadern mit Hilfe von Erweiterungen (OpenGL Extensions, z.B. ARB_vertex_program) ermöglichen, sodass auch hier Anwendungen von Vertex-Shadern profitieren können.
Kompatibilität [Bearbeiten] Hardware [Bearbeiten]Die folgende Tabelle zeigt eine Übersicht, welche Grafikkarten bzw. Grafikchips mit welcher DirectX-Version welche Vertex-Shader-Version unterstützen. Der Vollständigkeit halber ist auch T&L, der Vorläufer von Vertex-Shadern, mitaufgenommen. Hierbei ist zu beachten, dass Grafikchips in der Regel ältere Versionen ebenfalls unterstützen, so können beispielsweise Vertex-Shader-3.0-Chips auch mit Vertex-Shadern der Version 2.0 arbeiten (was allerdings weniger der Verdienst des Grafikchips als des Grafikkartentreibers ist).
VS-Version nötige DirectX Version 3DLabs ATI Intel Matrox NVIDIA S3 Graphics SiS XGI T&L 7.0 - Radeon 7xxx-Serie - - GeForce 256, GeForce 2-Serie - - - 1.0/1.1 8.1 Wildcat VP Radeon 8500 - 9250 - Parhelia-Serie GeForce3-Serie, GeForce4-Serie - Xabre-Serie Volari V3-Serie (außer V3XT) 2.0 9.0 Wildcat Realizm Radeon 9500 - 9800, X300 - X850 Intel GMA 900 - GeForce3-Serie, GeForce4-Serie, GeForce FX-Serie DeltaChrome, GammaChrome, Chrome S2x-Serie Mirage 3, Mirage 3+ Volari V3XT, Volari V5-Serie, Volari V8-Serie, Volari 8300, Volari XP10 3.0 9.0c - Radeon X1xxx-Serie Intel GMA 950, 3000, X3000 - GeForce 6xxx-Serie, GeForce 7xxx-Serie - - - 4.0 10 - Radeon X2xxx-Serie - - GeForce 8xxx-Serie - Mirage 4 -
(kursiv gestellte Namen zeigen an, dass dieses Produkt noch nicht auf dem Markt ist)
Software [Bearbeiten]Weil je nach Shaderversion der Funktionsumfang und die Programmierbarkeit stark unterschiedlich ausfallen kann, steht ein Entwickler prinzipiell vor der Wahl,
ganz auf Vertex-Shader zu verzichten und alles mit Hilfe der CPU zu berechnen. Dieser Ansatz ist heute nicht mehr gängig, weil so gut wie jede heutige 3D-Anwendung ohnehin Leistungsvoraussetzungen stellt, die hinreichend schnelle Grafikkarten voraussetzt, welche aber wiederum so aktuell sind, dass sie bereits Vertex-Shadereinheiten enthalten. viele Vertex-Shader-Versionen zu unterstützen, indem er für jede zu unterstützende Version eigene, optimierte Shader schreibt (sogenannte Renderpfade). Hierbei werden alle Grafikkarten unterstützt, die mit den angepeilten Shaderversionen kompatibel sind. nur Vertex-Shader-Versionen ab einer bestimmten zu unterstützen.