Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Inhalt Einführung Was ist eine Shading Language? Kurze Geschichte der Shading Languages Wozu sind Shaders gut? OpenGL und die Programmierbare Pipeline Die OpenGL Architektur Der Vertex- und der Fragment-Prozessor Die OpenGL Shading Language Overview und Basis der Sprache Flow control und Einbindung in OpenGL GPGPU
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Was ist eine „Shading Language“? Programmiersprache, die für die entwicklung von „Shaders“ geeignet ist Shaders sind Programme, die auf dem Vertex- oder Fragment-Prozessor durchgeführt werden
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Shading Languages sind nichts Neues! Renderman Shading Language, Pixar 1988: Star Wars Episode 1, The Lord of the Rings... OpenGL Shader (ISL), SGI HLSL, Microsoft Cg, NVIDIA
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Shading Languages sind nichts neues? Für Echtzeit-Graphik wurden bis vor kurzem ventor-spezifische Assembler benutzt Große Kompatibilitätsprobleme
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Wozu brauchen wir Shaders? Änderungen in Computer Hardware: „Fixed Functionality“ wird in komplexeren Bereichen durch Programmierbarkeit ersetzt. Größere Freiheit für Programmierer: API Begrenzungen werden eliminiert (z.B. Area Lights in OpenGL). Bessere effekte sind dadurch erzielbar:
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Wozu brauchen wir Shaders?
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Die OpenGL Architektur
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Die OpenGL Architektur Bis vor kurzem bestand OpenGL nur aus standard Operationen. Basis-Operationen der Pipeline und ihre Reihenfolge konnten nicht geändert werden. Standartisierte Funktionalität bei den per Vertex und per Fragment Operationen durch Programmierbarkeit ersetzt! (Vertex- und Fragment- Prozessoren.
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Der Vertex-Prozessor
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Der Vertex-Prozessor Vertex Transformation Normale Transformation und Normalisation Texturen-Koordinaten Generation Texturen-Koordinaten Transformation Lighting Material- und Farbe-Application
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Der Fragment-Prozessor
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Der Fragment-Prozessor Operationen auf interpolierten Werten Texture Access Texture Application Fog Colour Sum
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Ziele Gleiche Sprache für Vertex- und Fragment- Shaders Speziell für OpenGL entwickelt Lange Lebensdauer ist erwünscht Leicht zu benutzen und zu kompilieren Höhere Ebenen von paralleler Verarbeitung erlaubt Zukunftige Hardware Fähigkeiten werden unterstützt
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization GLSL Overview C/C++ Basis, von Renderman SL auch beeinflusst Wichtige Erweiterungen Nicht alle C Features unterstützt
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization C als Basis void main() {...} ist das Entry-Point für einen Set von Shaders (Vertex- und Fragment-Shaders) Konstanten, Identifiers, Operatoren, Expressions, Statements wie in C Benutzer-definierte Structures ähnlich zu C Preprocessor
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Wichtige Erweiterungen Wichtige Erweiterungen Matrizen und Vektoren sind Basis-Typen Noch ein Basis-Typ: sampler Qualifiers für Input- und Output- Management: attribute, uniform, varying, in, out, inout Kommunikation mit OpenGL durch „gl_“ Variablen (gl_ModelViewMatrix, gl_Lightsource[i])
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Wichtige Erweiterungen vec2 (2 floats Vektor), vec3 (3 floats Vektor), vec4 (4 floats Vektor) ivec2 -> (2 Integer)..., bvec2 -> (2 Booleans)... mat2 (2x2 float Matrix).... Zugriff auf Vektoren-Komponenten durch die Sets: (.r,.g,.b,.a) -> (Farbe), (.x,.y,.z,.w) -> (Position),(.s,.t,.p,.q) -> (Texture Koordinate) Zugriff auf Matrizen-Spalten wie in Arrays (Jede Spalte ist ein Vektor!).
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Wichtige Erweiterungen Samplers werden benutzt um Informationen über Texture Look-ups zu speichern Shaders können Samplers nicht initialisieren. Die letzteren werden den Shaders nur durch uniform Variablen überliefert werden sampler1D->accesses ein 1D Texture sampler2D->accesses ein 2D Texture sampler3D->accesses ein 3D Texture samplerCube- >accesses ein cube-mapped Texture sampler1DShadow ->accesses ein 1D Texture mit Vergleich sampler2DShadow->accesses ein 2D Texture mit Vergleich
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Wichtige Erweiterungen uniform Variablen sind read-only und für jeden Shader zugänglich attribute Variablen die von der Anwendung für jeden Vertex dem Vertex Shader überliefert werden varying Variablen werden benutzt, um Informationen aus dem Vertex- dem Fragment-Shader zu übergeben
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Unterschiede zu C Keine automatische Typen-Konvertion Keine Pointers (Memory Aliasing) Keine Characters, Strings, usw. Keine bit-wise Operationen Keine Rekursion (Funktionen Aufruf wie in C++) CALL BY VALUE-RETURN
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Built-in Funktionen Viele wichtige Funktionen werden dem Programmierer zur Verfügung gestellt (z.B. trigonometrische, exponentiele, für texture access uva.) Alle bereitgestellte Funktionen können überschrieben werden
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Flow Control Entry-Point: main Schleifen: for, while, do-while. Auch break und continue möglich Verzweigung: if bzw. if-else wie in C++ Nicht unterstützt: goto, switch und labels Special: discard
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Einbindung in OpenGL glCreateShader glShaderSource glCompileShader glCreateProgram glAttachObject glLinkProgram glUseProgram Anwendung Shader Quellcode OpenGL Treiber Comp iler Linke r Shader Object Program Object GPU
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization GPGPU General-Purpose computations on GPUs
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization GPGPU Heutige GPUs können viel mehr als nur Graphik-Operationen Bereiche wie Scientific Computing, Computational Geometry und sogar Datenbanksysteme profitieren davon Arbeitet eine GPU als Koprozessor, kommt es zu einer beeindruckenden Steigerung der System-Leistung (40 Gigaflops, 35,2 GB/s für GeForce 6800 Ultra vs. 6 Gigaflops, 5,96 GB/s für P4 3GHz!!!)
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization GPGPU Konventionelle Programmiersprachen sind ungeeignet Shading Languages auch Spezielle Programmierumgembungen (z.B. BrookGPU) Spezielle Programmierumgembungen (z.B. BrookGPU)
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization GPGPU
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Quellen OpenGL Programming Guide, ARB, Addison Wesley 2005 OpenGL Shading Language, Randi J. Rost, Addison-Wesley 2004 The OpenGL Shading Language, John Kessenich, Dave Baldwin, Randi Rost
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Quellen
Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization Fragen?