„Vertex-Shader“ – Versionsunterschied

[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
K →‎Funktion: Tippfehler entfernt 🔧 
tk k
Zeile 3: Zeile 3:
== Funktion ==
== Funktion ==


Ein Vertex-Shader dient dazu, die Geometrie einer Szene zu manipulieren. Dazu werden die Koordinaten der [[Vertex|Vertizes]] (Eckpunkte von dreidimensionalen Objekten) der Oberflächen [[Liste von Transformationen in der Mathematik|transformiert]] (was sowohl eine Verschiebung, eine Rotation oder eine Skalierung umfassen kann, eventuell auch Kombinationen). So lässt sich die Form von Objekten beeinflussen, was sich wiederum auch in ihrer Beleuchtung niederschlägt. Eine typische Modifikation des Modells, die im Vertex-Shader ausgeführt wird, betrifft die [[Koordinatensystem]]e. So rechnet der Vertex-Shader die Position der Vertizes aus dem Koordinatensystem des 3D-Modells erst in das globale Koordinatensystem, was sich alle 3D-Objekte teilen, um. Danach kann er die Vertizes auch noch in das Kamerakoordinatensystem umrechnen. Da der Vertex-Shader jedoch pro Vertex aufgerufen wird, kann der Vertex-Shader keine neuen Punkte zum 3D-Modell hinzufügen. Diese Aufgabe übernimmt hingegen der [[Geometry-Shader]], der auch meist nach dem Vertex-Shader aufgerufen wird. Auf modernen Grafikkarten kann es auch [[Tessellation-Shader]] zum Hinzufügen neuer Vertizes geben. Hinsichtlich des Funktionsumfangs ersetzt der Vertex-Shader somit das ältere und weniger flexible [[Transform and Lighting|Transform & Lighting]] (T&L).
Ein Vertex-Shader dient dazu, die Geometrie einer Szene zu manipulieren. Dazu werden die Koordinaten der [[Vertex|Vertizes]] (Eckpunkte von dreidimensionalen Objekten) der Oberflächen [[Liste von Transformationen in der Mathematik|transformiert]] (was sowohl eine Verschiebung, eine Rotation oder eine Skalierung umfassen kann, eventuell auch Kombinationen). So lässt sich die Form von Objekten beeinflussen, was sich wiederum auch in ihrer Beleuchtung niederschlägt. Eine typische Modifikation des Modells, die im Vertex-Shader ausgeführt wird, betrifft die [[Koordinatensystem]]e. So rechnet der Vertex-Shader die Position der Vertizes aus dem Koordinatensystem des 3D-Modells erst in das globale Koordinatensystem, was sich alle 3D-Objekte teilen, um. Danach kann er die Vertizes auch noch in das Kamerakoordinatensystem umrechnen. Da der Vertex-Shader jedoch pro Vertex aufgerufen wird, kann der Vertex-Shader keine neuen Punkte zum 3D-Modell hinzufügen. Diese Aufgabe übernimmt hingegen der [[Geometry-Shader]], der auch meist nach dem Vertex-Shader aufgerufen wird. Auf modernen Grafikkarten kann es auch [[Tessellation-Shader]] zum Hinzufügen neuer Vertizes geben. Hinsichtlich des Funktionsumfangs ersetzt der Vertex-Shader somit das ältere und weniger flexible [[Transform and Lighting|Transform & Lighting]] (T&L).


Mit Hilfe von Vertex-Shadern sind Effekte wie Vertex Lighting, Terrain-/Objektdeformation, Wasserwellen oder [[Fischaugenobjektiv]] möglich. Die meisten heutigen Grafikchips enthalten Shadereinheiten, die die Vertex-Shader ausführen. Dadurch müssen diese Geometrie Berechnungen nicht auf der [[Hauptprozessor|CPU]] des Systems laufen, wodurch sie entlastet wird und für andere Aufgaben eingesetzt werden kann. In der Regel werden mehrere Shadereinheiten in GPUs verbaut, damit diese nicht zum Flaschenhals der Grafikpipeline werden.
Mit Hilfe von Vertex-Shadern sind Effekte wie Vertex Lighting, Terrain-/Objektdeformation, Wasserwellen oder [[Fischaugenobjektiv]] möglich. Die meisten heutigen Grafikchips enthalten Shadereinheiten, die die Vertex-Shader ausführen. Dadurch müssen diese Geometrie Berechnungen nicht auf der [[Hauptprozessor|CPU]] des Systems laufen, wodurch sie entlastet wird und für andere Aufgaben eingesetzt werden kann. In der Regel werden mehrere Shadereinheiten in GPUs verbaut, damit diese nicht zum Flaschenhals der Grafikpipeline werden.
Zeile 13: Zeile 13:
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. Diese Abwärtskompatibilität übernimmt hauptsächlich der Grafikkartentreiber und nicht der Grafikprozessor.
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. Diese Abwärtskompatibilität übernimmt hauptsächlich der Grafikkartentreiber und nicht der Grafikprozessor.


{| class="prettytable"
{| class="wikitable"
|- class="hintergrundfarbe8"
|----- bgcolor="#FFDEAD"
! VS-Version
! VS-Version
! nötige [[DirectX]] Version
! nötige [[DirectX]] Version
Zeile 28: Zeile 28:
| T&L
| T&L
| 7.0
| 7.0
| -
|
| [[ATI-Radeon-7000-Serie|Radeon-7000-Serie]]
| [[ATI-Radeon-7000-Serie|Radeon-7000-Serie]]
| -
|
| -
|
| [[Nvidia-GeForce-256-Serie|GeForce 256]], [[Nvidia-GeForce-2-Serie|GeForce-2-Serie]], [[Nvidia-GeForce-4-Serie|GeForce 4 MX]]
| [[Nvidia-GeForce-256-Serie|GeForce 256]], [[Nvidia-GeForce-2-Serie|GeForce-2-Serie]], [[Nvidia-GeForce-4-Serie|GeForce 4 MX]]
| -
|
| -
|
| -
|
|-
|-
| 1.0/1.1
| 1.0/1.1
Zeile 41: Zeile 41:
| Wildcat VP
| Wildcat VP
| [[ATI-Radeon-8000-Serie|Radeon 8500 - 9250]]
| [[ATI-Radeon-8000-Serie|Radeon 8500 - 9250]]
| -
|
| Parhelia-Serie
| Parhelia-Serie
| [[Nvidia-GeForce-3-Serie|GeForce-3-Serie]], [[Nvidia-GeForce-4-Serie|GeForce-4-Serie]]
| [[Nvidia-GeForce-3-Serie|GeForce-3-Serie]], [[Nvidia-GeForce-4-Serie|GeForce-4-Serie]]
| -
|
| Xabre-Serie
| Xabre-Serie
| [[XGI Volari|Volari V3-Serie]] (außer V3XT)
| [[XGI Volari|Volari V3-Serie]] (außer V3XT)
Zeile 53: Zeile 53:
| [[ATI-Radeon-9000-Serie|Radeon 9500 - 9800]], [[ATI-Radeon-X-Serie|X300 - X850]]
| [[ATI-Radeon-9000-Serie|Radeon 9500 - 9800]], [[ATI-Radeon-X-Serie|X300 - X850]]
| [[Intel GMA]] 900
| [[Intel GMA]] 900
| -
|
| [[Nvidia-GeForce-FX-Serie|GeForce-FX-Serie]]
| [[Nvidia-GeForce-FX-Serie|GeForce-FX-Serie]]
| [[S3 Chrome#DeltaChrome|DeltaChrome]], [[S3 Chrome#GammaChrome|GammaChrome]], [[S3 Chrome#Chrome S20|Chrome-S2x-Serie]]
| [[S3 Chrome#DeltaChrome|DeltaChrome]], [[S3 Chrome#GammaChrome|GammaChrome]], [[S3 Chrome#Chrome S20|Chrome-S2x-Serie]]
Zeile 61: Zeile 61:
| 3.0
| 3.0
| 9.0c
| 9.0c
| -
|
| [[ATI-Radeon-X1-Serie|Radeon-X1-Serie]]
| [[ATI-Radeon-X1-Serie|Radeon-X1-Serie]]
| [[Intel GMA]] 950, 3000, X3000
| [[Intel GMA]] 950, 3000, X3000
| -
|
| [[Nvidia-GeForce-6-Serie|GeForce-6-Serie]], [[Nvidia-Geforce-7-Serie|GeForce-7-Serie]]
| [[Nvidia-GeForce-6-Serie|GeForce-6-Serie]], [[Nvidia-Geforce-7-Serie|GeForce-7-Serie]]
| -
|
| -
|
| -
|
|-
|-
| 4.0
| 4.0
| 10
| 10
| -
|
| [[ATI-Radeon-HD-2000-Serie|Radeon-HD-2000-Serie]]
| [[ATI-Radeon-HD-2000-Serie|Radeon-HD-2000-Serie]]
| -
|
| -
|
| [[Nvidia-Geforce-8-Serie|Geforce-8-Serie]], [[Nvidia-Geforce-9-Serie|Geforce-9-Serie]], [[Nvidia-Geforce-200-Serie|Geforce-200-Serie]]
| [[Nvidia-Geforce-8-Serie|Geforce-8-Serie]], [[Nvidia-Geforce-9-Serie|Geforce-9-Serie]], [[Nvidia-Geforce-200-Serie|Geforce-200-Serie]]
| -
|
| ''Mirage 4''
| ''Mirage 4''
| -
|
|-
|-
| 4.1
| 4.1
| 10.1
| 10.1
| -
|
| [[ATI-Radeon-HD-3000-Serie|Radeon-HD-3000-Serie]]
| [[ATI-Radeon-HD-3000-Serie|Radeon-HD-3000-Serie]]
| -
|
| -
|
| [[Nvidia-Geforce-200-Serie|Geforce-200-Serie]]
| [[Nvidia-Geforce-200-Serie|Geforce-200-Serie]]
| [[S3 Chrome#Chrome S20|Chrome-400/500-Serie]]
| [[S3 Chrome#Chrome S20|Chrome-400/500-Serie]]
| -
|
| -
|
|-
|-
| 5.0
| 5.0
| 11.0
| 11.0
| -
|
| [[ATI-Radeon-HD-5000-Serie|Radeon-HD-5000-Serie]]
| [[ATI-Radeon-HD-5000-Serie|Radeon-HD-5000-Serie]]
| -
|
| -
|
| [[Nvidia-Geforce-400-Serie|Geforce-400-Serie]]
| [[Nvidia-Geforce-400-Serie|Geforce-400-Serie]]
| -
|
| -
|
| -
|
|}
|}
<!-- (kursiv gestellte Namen zeigen an, dass dieses Produkt noch nicht auf dem Markt ist) -->
<!-- (kursiv gestellte Namen zeigen an, dass dieses Produkt noch nicht auf dem Markt ist) -->
Zeile 114: Zeile 114:


== Siehe auch ==
== Siehe auch ==
*[[Shader]]
* [[Shader]]
*[[Geometry-Shader]]
* [[Geometry-Shader]]
*[[Tessellation-Shader]]
* [[Tessellation-Shader]]
*[[Pixel-Shader]]
* [[Pixel-Shader]]
*[[Compute-Shader]]
* [[Compute-Shader]]
*[[Direct3D]]
* [[Direct3D]]
*[[OpenGL]]
* [[OpenGL]]


== Weblinks ==
== Weblinks ==
* [http://www.toymaker.info/Games/html/vertex_shaders.html Toymaker - Vertex Shaders]. Drei Vertex-Shader-Beispiele
* [http://www.toymaker.info/Games/html/vertex_shaders.html Vertex Shaders] Toymaker. Drei Vertex-Shader-Beispiele
* [http://www.gamedev.net/reference/articles/article1936.asp GameDev - Terrain Geomorphing in the Vertex Shader]
* [http://www.gamedev.net/reference/articles/article1936.asp Terrain Geomorphing in the Vertex Shader] GameDev


[[Kategorie:Bildsynthese]]
[[Kategorie:Bildsynthese]]

Version vom 28. Februar 2016, 00:36 Uhr

Vertex-Shader (auch: Vertexshader, Abk. VS) sind ein Typus von Shadern. Sie werden im Verlauf der Grafikpipeline, also der Verarbeitung eines 3D-Objektes auf der Grafikkarte, ausgeführt. Vertex-Shader sind in diesem Zusammenhang für die Verarbeitung aller Eckpunkte des 3D-Modells (der sogenannten Vertices) zuständig. Deshalb wird im Normalfall für jeden Vertex der Vertex-Shader einmal aufgerufen, woher auch der Name rührt.

Funktion

Ein Vertex-Shader dient dazu, die Geometrie einer Szene zu manipulieren. Dazu werden die Koordinaten der Vertizes (Eckpunkte von dreidimensionalen Objekten) der Oberflächen transformiert (was sowohl eine Verschiebung, eine Rotation oder eine Skalierung umfassen kann, eventuell auch Kombinationen). So lässt sich die Form von Objekten beeinflussen, was sich wiederum auch in ihrer Beleuchtung niederschlägt. Eine typische Modifikation des Modells, die im Vertex-Shader ausgeführt wird, betrifft die Koordinatensysteme. So rechnet der Vertex-Shader die Position der Vertizes aus dem Koordinatensystem des 3D-Modells erst in das globale Koordinatensystem, was sich alle 3D-Objekte teilen, um. Danach kann er die Vertizes auch noch in das Kamerakoordinatensystem umrechnen. Da der Vertex-Shader jedoch pro Vertex aufgerufen wird, kann der Vertex-Shader keine neuen Punkte zum 3D-Modell hinzufügen. Diese Aufgabe übernimmt hingegen der Geometry-Shader, der auch meist nach dem Vertex-Shader aufgerufen wird. Auf modernen Grafikkarten kann es auch Tessellation-Shader zum Hinzufügen neuer Vertizes geben. Hinsichtlich des Funktionsumfangs ersetzt der Vertex-Shader somit das ältere und weniger flexible Transform & Lighting (T&L).

Mit Hilfe von Vertex-Shadern sind Effekte wie Vertex Lighting, Terrain-/Objektdeformation, Wasserwellen oder Fischaugenobjektiv möglich. Die meisten heutigen Grafikchips enthalten Shadereinheiten, die die Vertex-Shader ausführen. Dadurch müssen diese Geometrie Berechnungen nicht auf der CPU des Systems laufen, wodurch sie entlastet wird und für andere Aufgaben eingesetzt werden kann. In der Regel werden mehrere Shadereinheiten in GPUs verbaut, damit diese nicht zum Flaschenhals der Grafikpipeline werden.

Zusätzliche Informationen zur Verarbeitungskette und zur Programmierung von Shadern gibt es in dem Artikel Shader.

Kompatibilität

Hardware

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. Diese Abwärtskompatibilität übernimmt hauptsächlich der Grafikkartentreiber und nicht der Grafikprozessor.

VS-Version nötige DirectX Version 3DLabs ATI Intel Matrox NVIDIA S3 Graphics SiS XGI
T&L 7.0 Radeon-7000-Serie GeForce 256, GeForce-2-Serie, GeForce 4 MX
1.0/1.1 8.1 Wildcat VP Radeon 8500 - 9250 Parhelia-Serie GeForce-3-Serie, GeForce-4-Serie Xabre-Serie Volari V3-Serie (außer V3XT)
2.0 9.0 Wildcat Realizm Radeon 9500 - 9800, X300 - X850 Intel GMA 900 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-X1-Serie Intel GMA 950, 3000, X3000 GeForce-6-Serie, GeForce-7-Serie
4.0 10 Radeon-HD-2000-Serie Geforce-8-Serie, Geforce-9-Serie, Geforce-200-Serie Mirage 4
4.1 10.1 Radeon-HD-3000-Serie Geforce-200-Serie Chrome-400/500-Serie
5.0 11.0 Radeon-HD-5000-Serie Geforce-400-Serie

Software

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 Version zu unterstützen.

Ab DirectX Version 10 wird die sogenannte Fixed-Function-Pipeline, eine vorgegebene Vertex- und Pixel-Shader-Kombination für einfache Aufgaben, nicht mehr unterstützt. Der Programmierer muss also immer einen Vertex-Shader vorgeben.

Siehe auch