Als vor gut zehn Jahren die OpenGL Version 2.0 auf den Markt kam, bedeutete das in der Grafikprogrammierung eine kleine Revolution. War mit der darin integrierten GL Shading Language (GLSL / GLslang) doch erstmals eine eigene Sprache für die Shader-Programmierung direkt im Kern-Standard von OpenGL verfügbar. Warum die Einführung der Shader-Programmierung für die Berechnung von dreidimensionalen Computergrafiken und vor allem für die Videospielentwicklung so wichtig war, wollen wir Ihnen im Folgenden kurz erläutern.
Mehr Flexibilität und neue Effekte
Vor der Einführung der Shaderprogrammierung im Jahr 2001 konnte eine Grafik nur per Software von der CPU berechnet werden. Zudem war der Einsatz von Graphik API und Graphikkarte bis dahin auf die sogenannte „Fixed Functionality“ begrenzt. Mit der Entwicklung von Shadern wurde es möglich, diese Fixed Functionality der Grafikkarte mittels Programmierung zu erweitern. Das bedeutete: mehr Flexibilität, neue und deutlich verbesserte Effekte (für Licht, Schatten, usw.) und neue Visualisierungsmethoden (wie etwa Ray-Casting für Volumen).
Pixel-Shader und Vertex-Shader
Was aber genau sind nun so genannte „Shader“? Shader sind spezielle Hardware- oder Software-Module, mit denen sich bestimmte Effekte bei der Berechnung einer dreidimensionalen Computergrafik erzeugen lassen. Im Falle der Hardware-Shader handelt es sich dabei um kleine Recheneinheiten, die in aktuellen Grafikchips integriert sind und sich mithilfe von OpenGL bzw. GLSL steuern lassen. Hier unterscheidet man wiederum zwischen zwei verschiedenen Versionen: den Fragement- bzw. Pixel-Shadern und den Vertex-Shadern. Während sich mit Pixel-Shadern Fragmente verändern und die resultierenden Pixelfarbe berechnen lassen, hat man mit Vertex-Shadern die Möglichkeit, geometrische Berechnungen durchzuführen und Objekte dynamisch zu verändern.
Beispiel: Die Berechnung von Wasseroberflächeneffekten
Kombiniert man nun beide Shader-Versionen, so lassen sich damit komplexe Oberflächen wie Lack, Lava, Fell, usw. simulieren. Ein weiteres gutes Beispiel für das Potential der Shader-Programmierung ist die Berechnung von Wasseroberflächeneffekten mithilfe von Shadern. Ganz am Anfang wurden Wasseroberflächen noch als als Ebenen aus gefärbten Flächen dargestellt, später wurden die jeweiligen Flächen dann mit verschiedenen Texturen belegt, was die Wasseroberfläche aber nicht mehr so plastisch erscheinen lies. Heute werden dafür Methoden wie „Bump Mapping“, „Dynamic Bump Mapping“ oder noch aktueller: „Vertex Texturing“ bzw. „Displacement-Mapping“ eingesetzt.
Rasante Entwicklung der Shader-Programmierung und von OpenGl
Um nicht noch weiter ins Detail gehen zu müssen: welche Möglichkeiten Methoden wie „Displacement-Mapping“ bzw. das Zusammespiel von Pixel- und Vertex-Shadern bietet, zeigt ein Blick auf aktuelle Spiele wie „Farcry 3“. Die darin erzeugten Wassereffekte sind wirklich beeindruckend und geradezu Lichtjahre von den 3D-Anfängen entfernt. Aus der Videospiel-Entwicklung und auch aus vielen anderen 3D-Bereichen ist die Shader-Programmierung mit OpenGL bzw. GLSL deswegen auch nicht mehr wegzudenken.
Wie Sie einfache Shader mithilfe von OpenGL bzw. GLSL schreiben, laden und benutzen, zeigen wir Ihnen in unserem aktuellen „OpenGL 1.1 / 2.0 – Grundkurs„. Und wie Sie etwa den Geometry-Shader als noch relativ neuen, dritten Shader-Typ für hadwarebeschleunigte Grafikanwendungen effektiv nutzen, erfahren Sie als bereits geübter Programmierer im Vertiefungsseminar „OpenGL 3.0/4.0 – Vertiefung„.
Das PROTRANET Institut ist mit langjähriger Erfahrung spezialisiert auf professionelles Training rund um Informationstechnologie- und Projekt-Themen. Für Fragen erreichen Sie uns jeder Zeit unter der 0800 3400311 (Freecall) oder unter buchung@protranet.de .