„Pixel-Shader“ – Versionsunterschied

[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
K Klammern korrigiert
(24 dazwischenliegende Versionen von 19 Benutzern werden nicht angezeigt)
Zeile 1:Zeile 1:
'''Pixel-Shader''' (auch ''Pixelshader'', ''Fragment-Shader'', Abk. ''PS'') sind Programme, die vom [[Grafikprozessor]] einer 3D-[[Grafikkarte]] im Verlauf der [[Grafikpipeline]] (in den sogenannten ''Shadereinheiten'') ausgeführt werden. Häufig werden auch die Shadereinheiten selbst als ''Pixel-Shader'' bezeichnet.
'''Pixel-Shader''' (auch ''Pixelshader'', ''Fragment-Shader'', Abk. ''PS'') sind Programme, die vom [[Grafikprozessor]] einer 3D-[[Grafikkarte]] im Verlauf der [[Grafikpipeline]] (in den sogenannten ''Shadereinheiten'') ausgeführt werden.


== Funktion ==
== Funktion ==
''Pixel-Shader'' dienen dazu, die zu rendernden Fragmente zu verändern, um beispielsweise eine realistischere Darstellung von Oberflächen- und Materialeigenschaften zu erreichen oder die [[Textur (Computergrafik)|Texturdarstellung]] zu verändern. Die [[Pixel]] des endgültigen Bildes ergeben sich unter Umständen aus mehreren Fragmenten, zum Beispiel wenn aufgrund von Transparenz mehrere Objekte gleichzeitig gesehen werden können. Die Shader verarbeiten diese Objekte unabhängig voneinander, daher ist der Begriff ''Fragment-Shader'' eigentlich die korrekte Bezeichnung. Allerdings hat sich der Begriff ''Pixel-Shader'' eingebürgert.
''Pixel-Shader'' dienen dazu, die zu rendernden Fragmente zu verändern, um beispielsweise eine realistischere Darstellung von Oberflächen- und Materialeigenschaften zu erreichen oder die [[Textur (Computergrafik)|Texturdarstellung]] zu verändern. Die [[Pixel]] des endgültigen Bildes ergeben sich unter Umständen aus mehreren Fragmenten, zum Beispiel wenn aufgrund von Transparenz mehrere Objekte gleichzeitig gesehen werden können. Die Shader verarbeiten diese Objekte unabhängig voneinander, daher ist der Begriff ''Fragment-Shader'' eigentlich die korrekte Bezeichnung, allerdings hat sich der Begriff ''Pixel-Shader'' im Direct3D Umfeld eingebürgert, in OpenGL wird korrekterweise von Fragment-Shadern gesprochen.


Pixel-Shader unterscheiden sich von den [[Vertex-Shader]]n, welche die [[Vertex|Vertices]] (Eckpunkte von dreidimensionalen Objekten) verändern, um die 3D-Objekte in ihrer Form oder Position zu manipulieren. Beispiele für die Anwendung von Pixel-Shadern sind [[Phong Shading]], [[Spiegel]]ungen, [[Shading|Schattierung]], [[:en:Shading#Distance falloff|Falloff]], [[:en:Bloom (shader effect)|Bloom]] und [[Lens Flare]]s; auch [[High Dynamic Range Rendering|HDR-Rendering]] wird mit ihrer Hilfe programmiert (unter Nutzung von [[Framebuffer]]n, die mehr als 8 Bit pro Subpixel unterstützen).
Pixel-Shader unterscheiden sich von den [[Vertex-Shader]]n, welche die [[Vertex|Vertices]] (Eckpunkte von dreidimensionalen Objekten) verändern, um die 3D-Objekte in ihrer Form oder Position zu manipulieren. Beispiele für die Anwendung von Pixel-Shadern sind [[Phong Shading]], [[Spiegel]]ungen, [[Shading|Schattierung]], [[Falloff]], [[Blooming]] und [[Lens Flare]]s; auch [[High Dynamic Range Rendering|HDR-Rendering]] wird mit ihrer Hilfe programmiert (unter Nutzung von [[Framebuffer]]n, die mehr als 8 Bit pro Subpixel unterstützen).


Da die Shader-Einheiten, die die Pixel-Shader ausführen, Teil der [[Grafikprozessor|GPU]] sind, müssen diese Programme nicht mehr auf der [[Hauptprozessor|CPU]] des Systems laufen, dadurch wird diese entlastet und kann für andere Aufgaben eingesetzt werden. In der Regel werden mehrere Shader-Einheiten in GPUs verbaut, damit diese nicht zum Flaschenhals der Grafikpipeline werden.
Da die Shader-Einheiten, die die Pixel-Shader ausführen, Teil der [[Grafikprozessor|GPU]] sind, müssen diese Programme nicht auf der [[Hauptprozessor|CPU]] des Systems laufen, dadurch wird diese entlastet und kann für andere Aufgaben eingesetzt werden. In der Regel werden mehrere Shader-Einheiten 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]].
Zusätzliche Informationen zur Verarbeitungskette und zur Programmierung von Shadern gibt es in dem Artikel [[Shader]].
Zeile 14:Zeile 14:
Die folgende Tabelle zeigt eine Übersicht, welche Grafikkarten bzw. -prozessoren mit welcher [[DirectX]]-Version welche Pixel-Shader-Version unterstützen. Hierbei ist zu beachten, dass Grafikprozessoren in der Regel ältere Versionen ebenfalls unterstützen, so können beispielsweise Pixel-Shader-3.0-Prozessoren auch mit Pixel-Shadern der Version 2.0 arbeiten (was allerdings weniger das Verdienst des Grafikprozessors als des Grafikkartentreibers ist).
Die folgende Tabelle zeigt eine Übersicht, welche Grafikkarten bzw. -prozessoren mit welcher [[DirectX]]-Version welche Pixel-Shader-Version unterstützen. Hierbei ist zu beachten, dass Grafikprozessoren in der Regel ältere Versionen ebenfalls unterstützen, so können beispielsweise Pixel-Shader-3.0-Prozessoren auch mit Pixel-Shadern der Version 2.0 arbeiten (was allerdings weniger das Verdienst des Grafikprozessors als des Grafikkartentreibers ist).


{| class="prettytable"
{| class="wikitable"
|- class="hintergrundfarbe8"
|----- bgcolor="#FFDEAD"
! Pixel-Shader-Version
! Pixel-Shader-Version
! nötige [[OpenGL]] Version¹
! nötige [[DirectX]]-Version
! nötige [[DirectX]]-Version
! [[3DLabs]]
! [[3DLabs]]
Zeile 24:Zeile 25:
! [[NVIDIA]]
! [[NVIDIA]]
! [[S3 Graphics]]
! [[S3 Graphics]]
! [[SiS]]
! [[Silicon Integrated Systems|SiS]]
! [[XGI]]
! [[XGI]]
|-
|-
| 1.0/1.1
| 1.0/1.1
|
| 8.0
| 8.0
| –
| –
Zeile 39:Zeile 41:
|-
|-
| 1.2
| 1.2
|
| 8.0a
| 8.0a
| Wildcat VP
| Wildcat VP
Zeile 50:Zeile 53:
|-
|-
| 1.3
| 1.3
|
| 8.0a
| 8.0a
| –
| –
Zeile 61:Zeile 65:
|-
|-
| 1.4
| 1.4
|
| 8.1
| 8.1
| –
| –
Zeile 72:Zeile 77:
|-
|-
| 2.0
| 2.0
|
| 9.0
| 9.0
| Wildcat Realizm
| Wildcat Realizm
Zeile 83:Zeile 89:
|-
|-
| 2.0a
| 2.0a
|
| 9.0b
| 9.0b
| –
| –
Zeile 94:Zeile 101:
|-
|-
| 2.0b
| 2.0b
|
| 9.0b
| 9.0b
| –
| –
Zeile 105:Zeile 113:
|-
|-
| 3.0
| 3.0
|
| 9.0c
| 9.0c
| –
| –
Zeile 116:Zeile 125:
|-
|-
| 4.0
| 4.0
|
| 10
| 10
| –
| –
Zeile 127:Zeile 137:
|-
|-
| 4.1
| 4.1
|
| 10.1
| 10.1
| –
| –
Zeile 138:Zeile 149:
|-
|-
| 5.0
| 5.0
|
| 11.0
| 11.0
| –
| –
| [[ATI-Radeon-HD-5000-Serie|Radeon-HD-5000-Serie]], [[ATI-Radeon-HD-6000-Serie|Radeon-HD-6000-Serie]]
| [[AMD-Radeon-HD-5000-Serie|Radeon-HD-5000-Serie]], [[AMD-Radeon-HD-6000-Serie|Radeon-HD-6000-Serie]], [[AMD-Radeon-HD-7000-Serie|Radeon-HD-7000-Serie]]
| Intel HD 4000 Graphics
| Intel HD 4000 Graphics
| –
| –
| [[Nvidia-Geforce-400-Serie|Geforce-400-Serie]], [[Nvidia-Geforce-500-Serie|Geforce-500-Serie]]
| [[Nvidia-Geforce-400-Serie|Geforce-400-Serie]], [[Nvidia-Geforce-500-Serie|Geforce-500-Serie]], [[Nvidia-Geforce-600-Serie|Geforce-600-Serie]]
| -
| –
| –
|-
| 5.1
| 11.1
| –
| [[AMD-Radeon-HD-7000-Serie|Radeon-HD-7000-Serie]]
| -
| –
| –
| -
| -
| –
| –
| –
| –
|}
|}
¹ OpenGL unterstützte schon immer die Möglichkeit mit sogenannten herstellerspezifischen Extensions Funktionen einer Grafikkarte zu nutzen, die vom OpenGL Standard noch nicht abgedeckt wurden.


=== Software ===
=== Software ===
Weil je nach Shader-Version der Funktionsumfang und die Programmierbarkeit stark unterschiedlich ausfallen kann, steht ein Entwickler prinzipiell vor der Wahl,
Weil je nach Shader-Version der Funktionsumfang und die Programmierbarkeit stark unterschiedlich ausfallen kann, steht ein Entwickler prinzipiell vor der Wahl,
* viele Pixel-Shader-Versionen zu unterstützen, indem er den gemeinsamen Nenner wählt, nämlich Version 1.0. Hierbei werden alle Grafikkarten unterstützt, die dieses Mindestmaß an Pixel-Shader-Fähigkeit besitzen. Diese Möglichkeit wird selten gewählt, weil viele Effekte sich erst ab bestimmten Versionen effizient nutzen lassen.
* viele Pixel-Shader-Versionen zu unterstützen, indem er den gemeinsamen Nenner wählt, nämlich Version 1.0. Hierbei werden alle Grafikkarten unterstützt, die dieses Mindestmaß an Pixel-Shader-Fähigkeit besitzen. Diese Möglichkeit wird selten gewählt, weil viele Effekte sich erst ab bestimmten Versionen effizient nutzen lassen.
* viele Pixel-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 Versionen kompatibel sind. Prominentes Beispiel hierfür ist [[Far Cry]] (erschien 2004, Support seit 2005).
* viele Pixel-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 Versionen kompatibel sind. Prominentes Beispiel hierfür ist [[Far Cry (Computerspiel)|Far Cry]] (erschien 2004, Support seit 2005).
* nur Pixel-Shader-Versionen ab einer bestimmten Version zu unterstützen. Beispiele hierfür sind Europa Universalis III von [[Paradox Interactive]] oder [[Virtua Tennis|Virtua Tennis 3]] von Sega (setzt Pixel-Shader 2.0 voraus) und [[Splinter Cell#Splinter Cell: Double Agent|Splinter Cell: Double Agent]] von [[Ubisoft]] (setzt 3.0 voraus).
* nur Pixel-Shader-Versionen ab einer bestimmten Version zu unterstützen. Beispiele hierfür sind Europa Universalis III von [[Paradox Interactive]] oder [[Virtua Tennis|Virtua Tennis 3]] von Sega (setzt Pixel-Shader 2.0 voraus) und [[Splinter Cell#Splinter Cell: Double Agent|Splinter Cell: Double Agent]] von [[Ubisoft]] (setzt 3.0 voraus).


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


== Weblinks ==
== Weblinks ==
*[http://www.opengl.org/documentation/glsl/ OpenGL Shading Language] – Dokumentation zur Programmierung von Shadern in [[OpenGL]]
* [http://www.opengl.org/documentation/glsl/ OpenGL Shading Language] – Dokumentation zur Programmierung von Shadern in [[OpenGL]]
* [http://www.lighthouse3d.com/opengl/glsl/index.php OGSL Tutorial] (englisch)
*[http://www.linux-magazin.de/Artikel/ausgabe/2004/02/098_shader/shader.html Einführung in OGSL]
* [http://archive.zfx.info/Tutorials.php?ID=68 ZFX Graphics Series] – Ein weiteres Tutorium, in dem man Shader in eine DX Anwendung einbaut
*[http://www.lighthouse3d.com/opengl/glsl/index.php OGSL Tutorial (engl.)]
* [http://www.online-tutorials.net/directx/shader-konzept/tutorials-t-7-77.html Shader-Konzept] – Artikel, der verschiedene Shader-Techniken vorstellt
*[http://3dshaders.com/home/index.php?option=com_weblinks&catid=14&Itemid=34 Quellcode-Beispiele]
*[http://www.online-tutorials.net/directx/vertex-shader-&-pixel-shader-unterstuetzung-in-directx-9/tutorials-t-7-2.html Vertex- und Pixel-Shader] – Ein Tutorium, das zeigt wie man Shader unter DirectX implementiert
*[http://archive.zfx.info/Tutorials.php?ID=68 ZFX Graphics Series] – Ein weiteres Tutorium, in dem man Shader in eine DX Anwendung einbaut
*[http://www.online-tutorials.net/directx/shader-konzept/tutorials-t-7-77.html Shader-Konzept] – Ein Artikel, der verschiedene Shader-Techniken vorstellt


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


[[en:Shader#Pixel shaders]]
[[en:Shader#Pixel shaders]]
[[es:Sombreador de píxel]]
[[it:Pixel shader]]
[[ja:ピクセルシェーダ]]
[[ko:픽셀 셰이더]]
[[nl:Pixel shader]]
[[pt:Pixel Shader]]
[[tr:Pixel Shader]]
[[zh:像素著色引擎]]

Aktuelle Version vom 9. März 2024, 12:53 Uhr

Pixel-Shader (auch Pixelshader, Fragment-Shader, Abk. PS) sind Programme, die vom Grafikprozessor einer 3D-Grafikkarte im Verlauf der Grafikpipeline (in den sogenannten Shadereinheiten) ausgeführt werden.

Funktion

Pixel-Shader dienen dazu, die zu rendernden Fragmente zu verändern, um beispielsweise eine realistischere Darstellung von Oberflächen- und Materialeigenschaften zu erreichen oder die Texturdarstellung zu verändern. Die Pixel des endgültigen Bildes ergeben sich unter Umständen aus mehreren Fragmenten, zum Beispiel wenn aufgrund von Transparenz mehrere Objekte gleichzeitig gesehen werden können. Die Shader verarbeiten diese Objekte unabhängig voneinander, daher ist der Begriff Fragment-Shader eigentlich die korrekte Bezeichnung, allerdings hat sich der Begriff Pixel-Shader im Direct3D Umfeld eingebürgert, in OpenGL wird korrekterweise von Fragment-Shadern gesprochen.

Pixel-Shader unterscheiden sich von den Vertex-Shadern, welche die Vertices (Eckpunkte von dreidimensionalen Objekten) verändern, um die 3D-Objekte in ihrer Form oder Position zu manipulieren. Beispiele für die Anwendung von Pixel-Shadern sind Phong Shading, Spiegelungen, Schattierung, Falloff, Blooming und Lens Flares; auch HDR-Rendering wird mit ihrer Hilfe programmiert (unter Nutzung von Framebuffern, die mehr als 8 Bit pro Subpixel unterstützen).

Da die Shader-Einheiten, die die Pixel-Shader ausführen, Teil der GPU sind, 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 Shader-Einheiten 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. -prozessoren mit welcher DirectX-Version welche Pixel-Shader-Version unterstützen. Hierbei ist zu beachten, dass Grafikprozessoren in der Regel ältere Versionen ebenfalls unterstützen, so können beispielsweise Pixel-Shader-3.0-Prozessoren auch mit Pixel-Shadern der Version 2.0 arbeiten (was allerdings weniger das Verdienst des Grafikprozessors als des Grafikkartentreibers ist).

Pixel-Shader-Versionnötige OpenGL Version¹nötige DirectX-Version3DLabsATI / AMDIntelMatroxNVIDIAS3 GraphicsSiSXGI
1.0/1.18.0Radeon 9000GeForce-3-SerieXabre-Serie
1.28.0aWildcat VP
1.38.0aParhelia-SerieGeForce4-Ti/Go-SerieMirage 2
1.48.1Radeon 8500–9250Volari-V3-Serie (außer V3XT)
2.09.0Wildcat RealizmRadeon 9500–9800, X300–X600Intel GMA 900, 950M-SerieDeltaChrome, GammaChrome, Chrome-S2x-SerieMirage 3, Mirage 3+Volari V3XT, Volari-V5-Serie, Volari-V8-Serie, Volari 8300, Volari XP10
2.0a9.0bGeForce-FX-Serie
2.0b9.0bRadeon X700–X850
3.09.0cRadeon-X1-SerieIntel GMA 3000, X3000GeForce-6-Serie, Geforce-7-Serie
4.010Radeon-HD-2000-SerieIntel GMA X3100, X3500, HD GraphicsGeforce-8-Serie, Geforce-9-Serie, Geforce-200-Serie
4.110.1Radeon-HD-3000-Serie, Radeon-HD-4000-SerieGeforce-200-Serie, Geforce-300-SerieChrome-400/500-Serie
5.011.0Radeon-HD-5000-Serie, Radeon-HD-6000-Serie, Radeon-HD-7000-SerieIntel HD 4000 GraphicsGeforce-400-Serie, Geforce-500-Serie, Geforce-600-Serie-

¹ OpenGL unterstützte schon immer die Möglichkeit mit sogenannten herstellerspezifischen Extensions Funktionen einer Grafikkarte zu nutzen, die vom OpenGL Standard noch nicht abgedeckt wurden.

Software

Weil je nach Shader-Version der Funktionsumfang und die Programmierbarkeit stark unterschiedlich ausfallen kann, steht ein Entwickler prinzipiell vor der Wahl,

  • viele Pixel-Shader-Versionen zu unterstützen, indem er den gemeinsamen Nenner wählt, nämlich Version 1.0. Hierbei werden alle Grafikkarten unterstützt, die dieses Mindestmaß an Pixel-Shader-Fähigkeit besitzen. Diese Möglichkeit wird selten gewählt, weil viele Effekte sich erst ab bestimmten Versionen effizient nutzen lassen.
  • viele Pixel-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 Versionen kompatibel sind. Prominentes Beispiel hierfür ist Far Cry (erschien 2004, Support seit 2005).
  • nur Pixel-Shader-Versionen ab einer bestimmten Version zu unterstützen. Beispiele hierfür sind Europa Universalis III von Paradox Interactive oder Virtua Tennis 3 von Sega (setzt Pixel-Shader 2.0 voraus) und Splinter Cell: Double Agent von Ubisoft (setzt 3.0 voraus).

Siehe auch