Benutzer:Coolcat/Shadersammlung: Unterschied zwischen den Versionen
Markus (Diskussion | Beiträge) K (Radial Blur Zusammenfassung verändert) |
(→Shader: Kategorien) |
||
Zeile 37: | Zeile 37: | ||
==Shader== | ==Shader== | ||
− | === | + | ===Beleuchtung und Texturen=== |
{|{{Prettytable_B1}} width=100% | {|{{Prettytable_B1}} width=100% | ||
| {{TableHead}} | [[shader_verysimple|Verysimple]] von [[Benutzer:damadmax|damadmax]] {{ShaderLevel|1}} | | {{TableHead}} | [[shader_verysimple|Verysimple]] von [[Benutzer:damadmax|damadmax]] {{ShaderLevel|1}} | ||
Zeile 44: | Zeile 44: | ||
| {{TableCell}} | Ein einfacher Shader, welcher eine Textur an Vertices bindet. Dieser Shader baut damit das Standardverhalten der festen Pipeline nach. {{ShaderLink|shader_verysimple}} | | {{TableCell}} | Ein einfacher Shader, welcher eine Textur an Vertices bindet. Dieser Shader baut damit das Standardverhalten der festen Pipeline nach. {{ShaderLink|shader_verysimple}} | ||
|- | |- | ||
+ | | {{TableHead}} | [[shader_PerPixelLighting|Per Pixel-Beleuchtung]] von [[Benutzer:Ireyon|Ireyon]] {{ShaderLevel|1}} | ||
+ | | {{Table150R2}} | [[Bild:shader_ppl.png|150px|150px]] | ||
+ | |- | ||
+ | | {{TableCell}} | Shader, der Per Pixel beleuchtet. {{ShaderLink|shader_PerPixelLighting}} | ||
+ | |- | ||
+ | | {{TableHead}} | [[shader_PerPixel_Lighting2|Per Pixel-Beleuchtung2]] von [[Benutzer:Olee|Olee]] {{ShaderLevel|1}} | ||
+ | | {{Table150R2}} | [[Bild:PPLShader.jpg|150px|150px]] | ||
+ | |- | ||
+ | | {{TableCell}} | Beleuchtet Flächen nach Pixeln anstatt wie OpenGl-Licht je Vertex. Erlaubt unendlich weit entferntes Licht und beachtet [[glFog]]. {{ShaderLink|shader_PerPixel_Lighting2}} | ||
+ | |} | ||
+ | |||
+ | ===Post-Processing=== | ||
+ | {|{{Prettytable_B1}} width=100% | ||
| {{TableHead}} | [[shader_sepia|Sepia-Shader]] von [[Benutzer:Markus|Markus]] {{ShaderLevel|2}} | | {{TableHead}} | [[shader_sepia|Sepia-Shader]] von [[Benutzer:Markus|Markus]] {{ShaderLevel|2}} | ||
| {{Table150R2}} | [[Bild:shader_sepia_nachher.jpg|150px|150px]] | | {{Table150R2}} | [[Bild:shader_sepia_nachher.jpg|150px|150px]] | ||
Zeile 58: | Zeile 71: | ||
|- | |- | ||
| {{TableCell}} | Post-Processing-Shader, welcher die Szene insgesamt verwischt. Dieser Shader kann beispielsweise genutzt werden um einen Glow-Effekt zu erreichen. {{ShaderLink|shader_blur2}} | | {{TableCell}} | Post-Processing-Shader, welcher die Szene insgesamt verwischt. Dieser Shader kann beispielsweise genutzt werden um einen Glow-Effekt zu erreichen. {{ShaderLink|shader_blur2}} | ||
− | | | + | |} |
− | + | ||
− | + | ===Geometrie=== | |
− | + | {|{{Prettytable_B1}} width=100% | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
| {{TableHead}} | [[shader_Terrain_GPU4|Heightmap-Terrain]] von [[Benutzer:Coolcat|Coolcat]] {{ShaderLevel|3}} | | {{TableHead}} | [[shader_Terrain_GPU4|Heightmap-Terrain]] von [[Benutzer:Coolcat|Coolcat]] {{ShaderLevel|3}} | ||
| {{Table150R2}} | [[Bild:Terrain.jpg|150px|150px]] | | {{Table150R2}} | [[Bild:Terrain.jpg|150px|150px]] | ||
Zeile 88: | Zeile 94: | ||
[[GL_ARB_texture_float]] | [[GL_ARB_texture_float]] | ||
|- | |- | ||
+ | | {{TableHead}} | [[shader_tesselation|Tesselation-Shader]] von [[Benutzer:dj3hut1|dj3hut1]] {{ShaderLevel|4}} | ||
+ | | {{Table150R2}} | [[Bild:Tesselation_s.png|150px|150px]] | ||
+ | |- | ||
+ | | {{TableCell}} | Dieser Shader nutzt einen Geometry Shader um ein Dreieck zu tesselieren. {{ShaderLink|shader_tesselation}} | ||
+ | |||
+ | '''Extensions:'''<br> | ||
+ | [[GL_ARB_geometry_shader4]] | ||
+ | |- | ||
+ | | {{TableHead}} | [[shader_normal_debug|Normal Debugging-Shader]] von [[Benutzer:dj3hut1|dj3hut1]] {{ShaderLevel|4}} | ||
+ | | {{Table150R2}} | [[Bild:Normal_debug_s.png|113px|150px]] | ||
+ | |- | ||
+ | | {{TableCell}} | Nützlicher Shader um ohne viel Aufwand die Normalen eines Modells anzuzeigen. {{ShaderLink|shader_normal_debug}} | ||
+ | |||
+ | '''Extensions:'''<br> | ||
+ | [[GL_ARB_geometry_shader4]] | ||
+ | |} | ||
+ | |||
+ | ===Partikel=== | ||
+ | {|{{Prettytable_B1}} width=100% | ||
| {{TableHead}} | [[GLSL_Partikel_2|GPU Partikelsystem]] von [[Benutzer:Coolcat|Coolcat]] {{ShaderLevel|5}} | | {{TableHead}} | [[GLSL_Partikel_2|GPU Partikelsystem]] von [[Benutzer:Coolcat|Coolcat]] {{ShaderLevel|5}} | ||
| {{Table150R2}} | [[Bild:Partikel-Gravitation.jpg|150px|150px]] | | {{Table150R2}} | [[Bild:Partikel-Gravitation.jpg|150px|150px]] | ||
Zeile 100: | Zeile 125: | ||
[[GL_ARB_texture_float]]<br> | [[GL_ARB_texture_float]]<br> | ||
[[GL_EXT_texture_integer]] | [[GL_EXT_texture_integer]] | ||
− | | | + | |} |
− | |||
− | |||
− | |||
− | |||
− | + | ===Sonstiges=== | |
− | + | {|{{Prettytable_B1}} width=100% | |
− | | | ||
| {{TableHead}} | [[shader_game_of_life|Game of Life]] von [[Benutzer:dj3hut1|dj3hut1]] {{ShaderLevel|3}} | | {{TableHead}} | [[shader_game_of_life|Game of Life]] von [[Benutzer:dj3hut1|dj3hut1]] {{ShaderLevel|3}} | ||
| {{Table150R2}} | [[Bild:Game_of_life_s.png|150px|150px]] | | {{Table150R2}} | [[Bild:Game_of_life_s.png|150px|150px]] | ||
Zeile 114: | Zeile 134: | ||
| {{TableCell}} | Simuliert das altbekannte 'Game of Life' im Shader. {{ShaderLink|shader_game_of_life}} | | {{TableCell}} | Simuliert das altbekannte 'Game of Life' im Shader. {{ShaderLink|shader_game_of_life}} | ||
|- | |- | ||
− | | {{TableHead}} | [[ | + | | {{TableHead}} | [[shader_Zufallsgenerator|Pseudozufallsgenerator]] von [[Benutzer:Coolcat|Coolcat]] {{ShaderLevel|4}} |
− | | {{Table150R2}} | [[Bild: | + | | {{Table150R2}} | [[Bild:shader_Zufallsgenerator.png|150px|150px]] |
|- | |- | ||
− | | {{TableCell}} | | + | | {{TableCell}} | Generierung von Pseudozufallszahlen im Shader mit [[GL_EXT_gpu_shader4]]. Außerdem eine Beispielanwendung: Ein reproduzierbares pesudozufälliges Verwirbelfeld für ein GPU-Partikelsystem. {{ShaderLink|shader_Zufallsgenerator}} |
'''Extensions:'''<br> | '''Extensions:'''<br> | ||
− | [[ | + | [[GL_EXT_gpu_shader4]] |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
− | === | + | ===Non-GLSL-Shader=== |
{|{{Prettytable_B1}} width=100% | {|{{Prettytable_B1}} width=100% | ||
− | | {{TableHead}} | [[shader_surface_scattering(ARB)|Surface Scattering]] von [[Benutzer:dj3hut1|dj3hut1]] {{ShaderLevel|3}} | + | | {{TableHead}} | [[shader_diffuse_bumpmapping(Cg)|Diffuse Bumpmapping (NVIDIA-Cg)]] von [[Benutzer:igel457|igel457]] {{ShaderLevel|2}} |
+ | | {{Table150R2}} | [[Bild:shader_diffuse_bumpmapping_cg.jpg|150px|150px]] | ||
+ | |- | ||
+ | | {{TableCell}} | Wendet diffuses Bumpmapping auf eine beliebige Oberfläche an. {{ShaderLink|shader_diffuse_bumpmapping(Cg)}} | ||
+ | |- | ||
+ | | {{TableHead}} | [[shader_surface_scattering(ARB)|Surface Scattering (ARB)]] von [[Benutzer:dj3hut1|dj3hut1]] {{ShaderLevel|3}} | ||
| {{Table150R2}} | [[Bild:Scattering_s.jpg|150px|150px]] | | {{Table150R2}} | [[Bild:Scattering_s.jpg|150px|150px]] | ||
|- | |- | ||
| {{TableCell}} | Der Shader bestimmt die Distanz, die Licht durch ein Material zurücklegt. Auf diese Weise wird die Lichtdurchlässigkeit bestimmt. {{ShaderLink|shader_surface_scattering(ARB)}} | | {{TableCell}} | Der Shader bestimmt die Distanz, die Licht durch ein Material zurücklegt. Auf diese Weise wird die Lichtdurchlässigkeit bestimmt. {{ShaderLink|shader_surface_scattering(ARB)}} | ||
|- | |- | ||
− | | {{TableHead}} | [[shader_texturing(ARB)|Texturing]] von [[Benutzer:dj3hut1|dj3hut1]] {{ShaderLevel|1}} | + | | {{TableHead}} | [[shader_texturing(ARB)|Texturing (ARB)]] von [[Benutzer:dj3hut1|dj3hut1]] {{ShaderLevel|1}} |
| {{Table150R2}} | [[Bild:Texarb_textured_s.png|166px|150px]] | | {{Table150R2}} | [[Bild:Texarb_textured_s.png|166px|150px]] | ||
|- | |- | ||
| {{TableCell}} | Demonstriert eine einfache Texturierung. {{ShaderLink|shader_texturing(ARB)}} | | {{TableCell}} | Demonstriert eine einfache Texturierung. {{ShaderLink|shader_texturing(ARB)}} | ||
|- | |- | ||
− | | {{TableHead}} | [[shader_phong_per_pixel(ARB)|Phong per Pixel]] von [[Benutzer:dj3hut1|dj3hut1]] {{ShaderLevel|1}} | + | | {{TableHead}} | [[shader_phong_per_pixel(ARB)|Phong per Pixel (ARB)]] von [[Benutzer:dj3hut1|dj3hut1]] {{ShaderLevel|1}} |
| {{Table150R2}} | [[Bild:Phong_arb_s.png|150px|150px]] | | {{Table150R2}} | [[Bild:Phong_arb_s.png|150px|150px]] | ||
|- | |- | ||
| {{TableCell}} | Per-Pixel-Beleuchtung. {{ShaderLink|shader_phong_per_pixel(ARB)}} | | {{TableCell}} | Per-Pixel-Beleuchtung. {{ShaderLink|shader_phong_per_pixel(ARB)}} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} |
Version vom 6. Januar 2010, 16:03 Uhr
Dies ist ein Entwurf für eine übersichtlichere Shadersammlung. |
Inhaltsverzeichnis
Was sind Shader?
Die traditionelle Funktionspipeline der OpenGL ist sehr beschränkt, neuere Algorithmen erfordern eine viel höhere Flexibilität. Shader sind kleine Programme die es erlauben Teile der Funktionspipeline völlig frei zu programmieren. Dies bietet völlig neue Möglichkeiten. Auf der einen Seite sind Shader für Einsteiger eine gewisse Hürde, auf der anderen Seite können sie viele Dinge aber auch enorm vereinfachen. Aus diesem Grund wurde in OpenGL 3.1 sowie OpenGL ES 2.0 wurde die feste Funktionspipeline entfernt, so dass Shader dort verpflichtend sind.
Der Artikel Shader gibt einen ausführlichen Überblick zum Thema sowie eine Linksammlung für den Einstieg.
Vorlage
Die Shadersammlung braucht deine Hilfe um zu wachsen. Wenn du einen Shader bereitstellen könntest wäre dies ein toller Dienst für die Community.
Falls du einen Shader bereitstellen möchtest lese bitte das Folgende kurze HowTo:
- Erstelle mit Hilfe der Shaderartikelvorlage einen neuen Artikel. Der Artikelname sollte mit dem Präfix shader_ beginnen, z.B. shader_Wasser2d für einen 2D Wassershader.
- Da Shader zu 90% optische Effekte bewirken, sollte (mindestens) ein aussagekräftiges Beispielbild im Shaderartikel hinterlegt werden. Eines der Bilder sollte dann auch hier in der Liste verlinkt werden.
- Füge deinen Shader in die Shadersammlung ein. Verwende dazu dieses Template:
|-
| {{TableHead}} | [[shader_Wasser2d|2D Wassershader]] von [[Benutzer:DeinName|DeinName]]
| {{Table150R2}} | [[Bild:Wassershader2D.jpg|150px|150px]]
|-
| {{TableCell}} | Einige Sätze zur Beschreibung des Shaders.
'''Extensions:'''<br>
Liste von notwendigen Extensions.
|- - Keine Angst, es muss nicht alles auf Anhieb perfekt sein.
Falls du Fragen oder Probleme mit der Vorlage hast, im DGL-Chat oder Forum hilft man immer gerne.
Schwierigkeitsgrad
Es ist nicht leicht einen Schwierigkeitsgrad für Shader anzugeben, trotzdem haben wir dies einmal versucht. Der Schwierigkeitsgrad kann zumindest für Einsteiger einen groben Hinweis geben was man sich vielleicht mal anschauen könnte.
Der Shader ist für Einsteiger geeignet. Um den Shader herum wird keine zusätzliche Infrastruktur benötigt. | |
Der Shader ist für Einsteiger geeignet, benötigt aber etwas zusätzliche Infrastruktur. Etwa benötigt ein Post-Processing-Shader ein FrameBufferObject, für Bumpmapping wird eine Normalmap benötigt. | |
Mittlerer Schwierigkeitsgrad. Der Shader ist etwas komplizierter und/oder benötigt viel zusätzliche Infrastruktur. | |
Hoher Schwierigkeitsgrad. Der Shader ist kompliziert und/oder verwendet intensiv Extensions. | |
Extremer Schwierigkeitsgrad...alles was es sonst noch gibt. |
Shader
Beleuchtung und Texturen
Verysimple von damadmax | (kein Bild vorhanden) |
Ein einfacher Shader, welcher eine Textur an Vertices bindet. Dieser Shader baut damit das Standardverhalten der festen Pipeline nach. | |
Per Pixel-Beleuchtung von Ireyon | |
Shader, der Per Pixel beleuchtet. | |
Per Pixel-Beleuchtung2 von Olee | |
Beleuchtet Flächen nach Pixeln anstatt wie OpenGl-Licht je Vertex. Erlaubt unendlich weit entferntes Licht und beachtet glFog. |
Post-Processing
Sepia-Shader von Markus | |
Post-Processing-Shader, welcher einen Sepia-Farbfilter auf die Szene anwendet. | |
Radial Blur von Markus | |
Post-Processing-Shader, welcher die Szene ausgehend von einem beliebigen Punkt verwischt. | |
Blur-Shader von Skeptiker und Coolcat | |
Post-Processing-Shader, welcher die Szene insgesamt verwischt. Dieser Shader kann beispielsweise genutzt werden um einen Glow-Effekt zu erreichen. |
Geometrie
Heightmap-Terrain von Coolcat | |
Shader für ein Heightmap-Terrain der ShaderModel 4.0 Features nutzt. Das Terrain wird zur Laufzeit fast vollständig aus der Heightmap generiert, was ordentlich Speicherplatz spart.
Extensions: | |
Instancing-Shader von Coolcat | |
Dieser Shader zeigt die Benutzung von GL_ARB_draw_instanced. Ein häufiger Anwendungsfall ist das rendern vieler gleichartiger Objekte. Die Extension beschleunigt derartige Anwendungen, in dem die Anzahl der API-Aufrufe und die Menge redundanter Daten reduziert wird.
Extensions: | |
Tesselation-Shader von dj3hut1 | |
Dieser Shader nutzt einen Geometry Shader um ein Dreieck zu tesselieren.
Extensions: | |
Normal Debugging-Shader von dj3hut1 | |
Nützlicher Shader um ohne viel Aufwand die Normalen eines Modells anzuzeigen.
Extensions: |
Partikel
GPU Partikelsystem von Coolcat | |
Ein GPU-Partikelsystem welches insbesondere auf SM4 Features wie Geometryshader und Transform-Feedback setzt. So ist auch eine Partikel-Partikel-Interaktion mit über 200.000 Partikeln ist kein Problem.
Extensions: |
Sonstiges
Game of Life von dj3hut1 | |
Simuliert das altbekannte 'Game of Life' im Shader. | |
Pseudozufallsgenerator von Coolcat | |
Generierung von Pseudozufallszahlen im Shader mit GL_EXT_gpu_shader4. Außerdem eine Beispielanwendung: Ein reproduzierbares pesudozufälliges Verwirbelfeld für ein GPU-Partikelsystem.
Extensions: |
Non-GLSL-Shader
Diffuse Bumpmapping (NVIDIA-Cg) von igel457 | |
Wendet diffuses Bumpmapping auf eine beliebige Oberfläche an. | |
Surface Scattering (ARB) von dj3hut1 | |
Der Shader bestimmt die Distanz, die Licht durch ein Material zurücklegt. Auf diese Weise wird die Lichtdurchlässigkeit bestimmt. | |
Texturing (ARB) von dj3hut1 | |
Demonstriert eine einfache Texturierung. | |
Phong per Pixel (ARB) von dj3hut1 | |
Per-Pixel-Beleuchtung. |