31
Proseminar – Computer Graphics Proseminar – Computer Graphics Nikolaos Tsanakas Nikolaos Tsanakas computer graphics & computer graphics & visualization visualization OpenGL Shading Language OpenGL Shading Language

Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Embed Size (px)

Citation preview

Page 1: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas

computer graphics & computer graphics & visualizationvisualization

OpenGL Shading LanguageOpenGL Shading Language

Page 2: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

InhaltInhaltEinführungEinführung

Was ist eine Shading Language?Was ist eine Shading Language?Kurze Geschichte der Shading LanguagesKurze Geschichte der Shading LanguagesWozu sind Shaders gut?Wozu sind Shaders gut?

OpenGL und die Programmierbare PipelineOpenGL und die Programmierbare PipelineDie OpenGL ArchitekturDie OpenGL ArchitekturDer Vertex- und der Fragment-ProzessorDer Vertex- und der Fragment-Prozessor

Die OpenGL Shading LanguageDie OpenGL Shading LanguageOverview und Basis der SpracheOverview und Basis der SpracheFlow control und Einbindung in OpenGLFlow control und Einbindung in OpenGL

GPGPUGPGPU

Page 3: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Was ist eine „Shading Was ist eine „Shading Language“?Language“?

Programmiersprache, die für die Programmiersprache, die für die entwicklung von „Shaders“ geeignet entwicklung von „Shaders“ geeignet ististShaders sind Programme, die auf Shaders sind Programme, die auf dem Vertex- oder Fragment-Prozessor dem Vertex- oder Fragment-Prozessor durchgeführt werdendurchgeführt werden

Page 4: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Shading Languages sind nichts Shading Languages sind nichts Neues!Neues!

Renderman Shading Language, Pixar 1988: Renderman Shading Language, Pixar 1988: Star Wars Episode 1, The Lord of the Star Wars Episode 1, The Lord of the Rings...Rings...OpenGL Shader (ISL), SGIOpenGL Shader (ISL), SGIHLSL, MicrosoftHLSL, MicrosoftCg, NVIDIACg, NVIDIA

Page 5: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Shading Languages sind nichts Shading Languages sind nichts neues?neues?

Für Echtzeit-Graphik wurden bis vor Für Echtzeit-Graphik wurden bis vor kurzem ventor-spezifische Assembler kurzem ventor-spezifische Assembler benutztbenutztGroße KompatibilitätsproblemeGroße Kompatibilitätsprobleme

Page 6: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Wozu brauchen wir Shaders?Wozu brauchen wir Shaders?

Änderungen in Computer Hardware: „Fixed Änderungen in Computer Hardware: „Fixed Functionality“ wird in komplexeren Bereichen Functionality“ wird in komplexeren Bereichen durch Programmierbarkeit ersetzt.durch Programmierbarkeit ersetzt.Größere Freiheit für Programmierer: API Größere Freiheit für Programmierer: API Begrenzungen werden eliminiert (z.B. Area Lights Begrenzungen werden eliminiert (z.B. Area Lights in OpenGL).in OpenGL).Bessere effekte sind dadurch erzielbar:Bessere effekte sind dadurch erzielbar:

Page 7: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Wozu brauchen wir Shaders?Wozu brauchen wir Shaders?

Page 8: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Die OpenGL ArchitekturDie OpenGL Architektur

Page 9: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Die OpenGL ArchitekturDie OpenGL Architektur

Bis vor kurzem bestand OpenGL nur aus Bis vor kurzem bestand OpenGL nur aus standard Operationen.standard Operationen.Basis-Operationen der Pipeline und ihre Basis-Operationen der Pipeline und ihre Reihenfolge konnten Reihenfolge konnten nichtnicht geändert werden. geändert werden.Standartisierte Funktionalität bei den Standartisierte Funktionalität bei den per per VertexVertex und und per Fragment Operationenper Fragment Operationen durch Programmierbarkeit ersetzt! (Vertex- durch Programmierbarkeit ersetzt! (Vertex- und Fragment- Prozessoren.und Fragment- Prozessoren.

Page 10: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Der Vertex-ProzessorDer Vertex-Prozessor

Page 11: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Der Vertex-ProzessorDer Vertex-Prozessor

Vertex TransformationVertex TransformationNormale Transformation und NormalisationNormale Transformation und NormalisationTexturen-Koordinaten GenerationTexturen-Koordinaten GenerationTexturen-Koordinaten TransformationTexturen-Koordinaten TransformationLightingLightingMaterial- und Farbe-ApplicationMaterial- und Farbe-Application

Page 12: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Der Fragment-ProzessorDer Fragment-Prozessor

Page 13: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Der Fragment-ProzessorDer Fragment-Prozessor

Operationen auf interpolierten WertenOperationen auf interpolierten WertenTexture AccessTexture AccessTexture ApplicationTexture ApplicationFogFogColour SumColour Sum

Page 14: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

ZieleZieleGleiche Sprache für Vertex- und Fragment-Gleiche Sprache für Vertex- und Fragment-ShadersShadersSpeziell für OpenGL entwickeltSpeziell für OpenGL entwickeltLange Lebensdauer ist erwünschtLange Lebensdauer ist erwünschtLeicht zu benutzen und zu kompilierenLeicht zu benutzen und zu kompilierenHöhere Ebenen von paralleler Verarbeitung Höhere Ebenen von paralleler Verarbeitung erlaubterlaubtZukunftige Hardware Fähigkeiten werden Zukunftige Hardware Fähigkeiten werden unterstütztunterstützt

Page 15: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

GLSL OverviewGLSL Overview

C/C++ Basis, von Renderman SL auch C/C++ Basis, von Renderman SL auch beeinflusstbeeinflusstWichtige ErweiterungenWichtige ErweiterungenNicht alle C Features unterstütztNicht alle C Features unterstützt

Page 16: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

C als BasisC als Basis

void main() {...} void main() {...} ist das Entry-Point für ist das Entry-Point für einen einen Set von Shaders Set von Shaders (Vertex- und (Vertex- und Fragment-Shaders)Fragment-Shaders)Konstanten, Identifiers, Operatoren, Konstanten, Identifiers, Operatoren, Expressions, Statements wie in CExpressions, Statements wie in CBenutzer-definierte Structures ähnlich zu CBenutzer-definierte Structures ähnlich zu CPreprocessorPreprocessor

Page 17: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Wichtige ErweiterungenWichtige ErweiterungenMatrizen und Vektoren sind Basis-TypenMatrizen und Vektoren sind Basis-TypenNoch ein Basis-Typ: samplerNoch ein Basis-Typ: samplerQualifiers für Input- und Output-Qualifiers für Input- und Output-Management: Management: attribute, uniform, attribute, uniform, varying, in, out, inoutvarying, in, out, inoutKommunikation mit OpenGL durch „gl_“ Kommunikation mit OpenGL durch „gl_“ Variablen Variablen (gl_ModelViewMatrix,(gl_ModelViewMatrix, gl_Lightsource[i])gl_Lightsource[i])

Page 18: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Wichtige ErweiterungenWichtige Erweiterungenvec2vec2 (2 floats Vektor), (2 floats Vektor), vec3vec3 (3 floats (3 floats Vektor), Vektor), vec4vec4 (4 floats Vektor)(4 floats Vektor)ivec2 ivec2 -> (2 Integer)...,-> (2 Integer)..., bvec2 bvec2 -> (2 -> (2 Booleans)...Booleans)...mat2 mat2 (2x2 float Matrix)....(2x2 float Matrix)....Zugriff auf Vektoren-Komponenten durch Zugriff auf Vektoren-Komponenten durch die Sets: (.r, .g, .b, .a) -> (Farbe), die Sets: (.r, .g, .b, .a) -> (Farbe), (.x, .y, .z, .w) -> (Position),(.s, .t, .p, .q) -> (.x, .y, .z, .w) -> (Position),(.s, .t, .p, .q) -> (Texture Koordinate)(Texture Koordinate)Zugriff auf Matrizen-Spalten wie in Arrays Zugriff auf Matrizen-Spalten wie in Arrays (Jede Spalte ist ein Vektor!).(Jede Spalte ist ein Vektor!).

Page 19: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Wichtige ErweiterungenWichtige ErweiterungenSamplers werden benutzt um Samplers werden benutzt um Informationen über Texture Look-ups zu Informationen über Texture Look-ups zu speichernspeichernShaders können Samplers nicht Shaders können Samplers nicht initialisieren. Die letzteren werden den initialisieren. Die letzteren werden den Shaders nur durch Shaders nur durch uniform uniform Variablen Variablen überliefert werdenüberliefert werdensampler1Dsampler1D ->-> accesses ein 1D Texture accesses ein 1D Texture sampler2D sampler2D ->-> accesses ein 2D accesses ein 2D TextureTexture sampler3Dsampler3D ->->accesses ein 3D Textureaccesses ein 3D Texture samplerCubesamplerCube -->> accesses ein cube-mapped Textureaccesses ein cube-mapped Texture sampler1DShadow sampler1DShadow ->-> accesses ein 1D Texture mit Vergleich accesses ein 1D Texture mit Vergleich sampler2DShadowsampler2DShadow ->-> accesses ein 2D Texture mit accesses ein 2D Texture mit VergleichVergleich

Page 20: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Wichtige ErweiterungenWichtige Erweiterungen

uniform uniform Variablen sind read-only und für Variablen sind read-only und für jeden Shader zugänglichjeden Shader zugänglichattribute attribute Variablen die von der Anwendung Variablen die von der Anwendung für jeden Vertex dem Vertex Shader für jeden Vertex dem Vertex Shader überliefert werdenüberliefert werdenvarying varying Variablen werden benutzt, um Variablen werden benutzt, um Informationen aus dem Vertex- dem Informationen aus dem Vertex- dem Fragment-Shader zu übergebenFragment-Shader zu übergeben

Page 21: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Unterschiede zu CUnterschiede zu C

Keine automatische Typen-KonvertionKeine automatische Typen-KonvertionKeine Pointers (Memory Aliasing)Keine Pointers (Memory Aliasing)Keine Characters, Strings, usw.Keine Characters, Strings, usw.Keine bit-wise OperationenKeine bit-wise OperationenKeine Rekursion (Funktionen Aufruf wie in Keine Rekursion (Funktionen Aufruf wie in C++)C++)CALL BY VALUE-RETURNCALL BY VALUE-RETURN

Page 22: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Built-in FunktionenBuilt-in Funktionen

Viele wichtige Funktionen werden dem Viele wichtige Funktionen werden dem Programmierer zur Verfügung gestellt (z.B. Programmierer zur Verfügung gestellt (z.B. trigonometrische, exponentiele, für texture trigonometrische, exponentiele, für texture access uva.)access uva.)Alle bereitgestellte Funktionen können Alle bereitgestellte Funktionen können überschrieben werdenüberschrieben werden

Page 23: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Flow ControlFlow Control

Entry-Point: Entry-Point: main mainSchleifen: Schleifen: forfor,, while while,, do do--whilewhile. Auch . Auch breakbreak und und continue continue möglichmöglichVerzweigung: Verzweigung: if if bzw. bzw. ifif--elseelse wie in C++ wie in C++Nicht unterstützt: Nicht unterstützt: gotogoto, , switchswitch und labels und labelsSpecial: Special: discarddiscard

Page 24: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Einbindung in OpenGLEinbindung in OpenGLglCreateShaderglCreateShaderglShaderSourceglShaderSourceglCompileShaderglCompileShaderglCreateProgramglCreateProgramglAttachObjectglAttachObjectglLinkProgramglLinkProgramglUseProgramglUseProgram

Anwendung

Shader Quellcode

OpenGL TreiberComp

ilerLinke

r

Shader Object

ProgramObject

GPU

Page 25: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

GPGPUGPGPU

General-Purpose computations on GPUsGeneral-Purpose computations on GPUs

Page 26: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

GPGPUGPGPUHeutige GPUs können viel mehr als nur Heutige GPUs können viel mehr als nur Graphik-OperationenGraphik-OperationenBereiche wie Scientific Computing, Bereiche wie Scientific Computing, Computational Geometry und sogar Computational Geometry und sogar Datenbanksysteme profitieren davonDatenbanksysteme profitieren davonArbeitet eine GPU als Koprozessor, kommt es Arbeitet eine GPU als Koprozessor, kommt es zu einer beeindruckenden Steigerung der zu einer beeindruckenden Steigerung der System-Leistung (40 Gigaflops, 35,2 GB/s für System-Leistung (40 Gigaflops, 35,2 GB/s für GeForce 6800 Ultra vs. 6 Gigaflops, 5,96 GB/s GeForce 6800 Ultra vs. 6 Gigaflops, 5,96 GB/s für P4 3GHz!!!)für P4 3GHz!!!)

Page 27: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

GPGPUGPGPU

Konventionelle Programmiersprachen sind Konventionelle Programmiersprachen sind ungeeignetungeeignetShading Languages auchShading Languages auch

Spezielle Programmierumgembungen (z.B. Spezielle Programmierumgembungen (z.B. BrookGPU)BrookGPU)

Page 28: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

GPGPUGPGPU

Page 29: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

QuellenQuellen

OpenGL Programming Guide, ARB, Addison OpenGL Programming Guide, ARB, Addison Wesley 2005Wesley 2005OpenGL Shading Language, Randi J. Rost, OpenGL Shading Language, Randi J. Rost, Addison-Wesley 2004Addison-Wesley 2004The OpenGL Shading Language, John The OpenGL Shading Language, John Kessenich, Dave Baldwin, Randi RostKessenich, Dave Baldwin, Randi Rosthttp://www.opengl.orghttp://www.opengl.org

Page 30: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

QuellenQuellen

http://wwwcg.in.tum.dehttp://wwwcg.in.tum.dehttp://www.gpgpu.orghttp://www.gpgpu.orghttp://graphics.stanford.eduhttp://graphics.stanford.eduhttp://www.nvidia.comhttp://www.nvidia.comhttp://www.ati.comhttp://www.ati.com

Page 31: Proseminar – Computer Graphics Nikolaos Tsanakas computer graphics & visualization OpenGL Shading Language

Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &

visualizationvisualization

Fragen?Fragen?