proseminar – computer graphics nikolaos tsanakas computer graphics & visualization opengl...
TRANSCRIPT
Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas
computer graphics & computer graphics & visualizationvisualization
OpenGL Shading LanguageOpenGL 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
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
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
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
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:
Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &
visualizationvisualization
Wozu brauchen wir Shaders?Wozu brauchen wir Shaders?
Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &
visualizationvisualization
Die OpenGL ArchitekturDie OpenGL Architektur
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.
Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &
visualizationvisualization
Der Vertex-ProzessorDer Vertex-Prozessor
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
Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &
visualizationvisualization
Der Fragment-ProzessorDer Fragment-Prozessor
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
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
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
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
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])
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!).
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
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
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
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
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
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
Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &
visualizationvisualization
GPGPUGPGPU
General-Purpose computations on GPUsGeneral-Purpose computations on GPUs
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!!!)
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)
Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &
visualizationvisualization
GPGPUGPGPU
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
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
Proseminar – Computer GraphicsProseminar – Computer GraphicsNikolaos TsanakasNikolaos Tsanakas computer graphics & computer graphics &
visualizationvisualization
Fragen?Fragen?