die shading language - stephan presentation.pdf · das shader-konzept 3. aufbau der shading...

25
7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language -1- Computergraphische Systeme Lehrstuhl für Stephan Brumme 7. Januar 2004 Seminar Analyse, Planung und Konstruktion computergraphischer Systeme Die Shading Language

Upload: others

Post on 03-Aug-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 1 -Computergraphische Systeme

Lehr

stuhl

für

Stephan Brumme7. Januar 2004

SeminarAnalyse, Planung und Konstruktion

computergraphischer Systeme

Die Shading Language

Page 2: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 2 -

Agenda

1. Motivation2. Das Shader-Konzept3. Aufbau der Shading Language4. Praxis5. Schlussfolgerungen

Page 3: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 3 -

Motivation - I

• Bedarf nach frei programmierbarer Graphik-Pipeline– Shader– Wahrung von

• Abwärtskompatibilität• Portabilität

• Adäquate Performanz– i.d.R. Echtzeit– optimale Nutzung vorhandener Ressourcen

• Hardware-unterstützt

1 2 3 4 5

© Square, © NVIDIA

Page 4: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 4 -

Motivation - II

• Möglichkeiten:– prozedurale Texturen– effizientere Transformationen– NPR Effekte– Bildoperationen– interaktive Visualisierungstechniken– …� viele OpenGL-Extensions dann überflüssig

© ATI Inc.,© Krüger et al.

1 2 3 4 5

Page 5: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 5 -

Motivation - III

• Grundlegende Änderungen an OpenGL– OpenGL 2.0– OpenGL Shading Language

erscheint am 13. Februar 2004

1 2 3 4 5

Bilder: Addison-Wesley

Page 6: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 6 -

Das Shader-Konzept - I

• Shade Trees (Cook, 1984)– hierarchische Verkettung von Mikroprogrammen � Shadern

1 2 3 4 5

weight of ambientcomponent

ambient

*weight of specular

component

normal

*

viewersurface

roughness

specular function

+

*copper color

final color

float ka=0.5, ks=0.5;float roughness=0.1;float intensity;color copper=(0.8,0.3,0.1);

intensity=ka*ambient ()+ks*specular (normal,viewer,

roughness);final_color=intensity*

copper;

nach: Cook, Shade Trees, 1984

Page 7: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 7 -

Das Shader-Konzept - II

• Shader– Mikroprogramme

– manipulieren zu einem graphischen Basiselement gehörende Daten• Basiselemente:

– Vektor (V), Fragment (F)• zugehörige Daten:

– Position (V),– Normale (V), – Texturkoordinaten (V/F),– Farbe (V/F),– benutzerdefinierte Daten (V/F)– …

1 2 3 4 5�

Page 8: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 8 -

Das Shader-Konzept - III

• Große Verbreitung durch Renderman™ Standard– entwickelt von Cook et al. bei Pixar (Reyes-Architektur 1987)

1 2 3 4 5

aber:reine Softwarelösung

Page 9: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 9 -

Das Shader-Konzept - IV

• Hardwareunterstützung– Entwicklung neuer Hardware

• PixelFlow (Olano, 1995)� hohe Kosten, unflexibel

– Verwendung von reinem Standard-OpenGL• Multipass-Rendering von SGI (Peercy, 2000)� preiswert, aber Bandbreiten-Problem

• Quake III Engine� preiswert und schnell,

kommerziell sehr erfolgreich� sehr begrenzte Fähigkeiten,

nur Fragment-Shader

1 2 3 4 5

Bilder von: Olano, Peercy, id software

Page 10: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 10 -

Das Shader-Konzept - V

• Partielle Ersetzung der fixed functionality pipeline

Vertex Prozessor

Fragment Prozessor

Framebuffer

Vertex Shader

Fragment Shader

1 2 3 4 5�

Page 11: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 11 -

Das Shader-Konzept - VI

• Hardwareunterstützung (Fortsetzung)– Erweiterung von OpenGL

• Vertex Shader– aufwändige Operationen– Interpolation der Werte für Fragment Shader

• Fragment Shader– einfache Operationen– i.d.R. der Flaschenhals

1 2 3 4 5

szenenkonstante Datenobjektkonstante Daten

vektorkonstante Daten

fragmentkonstante Daten

Page 12: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 12 -

Aufbau von GLSL - I

• Hardware-Shader-Programmierung aufwändig– bislang nur Assembler-Sprache� Entwicklung einer Hochsprache� Die Shading Language (GLSL bzw. glslang)

• Alternativen:– Cg von NVIDIA

• „C for Graphics“– HLSL von Microsoft (DirectX 9+)

• „High Level Shading Language“

1 2 3 4 5� �

Page 13: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 13 -

Aufbau von GLSL - II

• Datenfluss:– vektorkonstant: Attribute

• vom Shader nicht veränderbar• Standard-OpenGL

– gl_Color, gl_Normal, …• benutzerdefiniert

– glossiness, refraction, …

– szenenkonstant und objektkonstant: uniform• vom Shader nicht veränderbar• Standard-OpenGL

– gl_ModelViewMatrix, gl_LightSource0, …• benutzerdefiniert

– time, boneWeighting, …

1 2 3 4 5� �

Page 14: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 14 -

Aufbau von GLSL - III

• Datenfluss (Fortsetzung):– Kommunikation Vertex Shader � Fragment Shader: varying

• vom Shader generiert• von Hardware auf Fragmentebene perspektivisch interpoliert• Standard-OpenGL

– gl_FrontColor, gl_TexCoord0, …• Spezialwerte

– gl_Position, gl_PointSize, …• benutzerdefiniert

– thickness, density, …

– fragmentkonstant:• gl_FragColor• gl_FragDepth

1 2 3 4 5� �

Page 15: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 15 -

Aufbau von GLSL - IV 1 2 3 4 5

vertex processor fragment processor

standard OpenGL varyings

specialvariables

user-defined varyings

user-defined uniforms built-in uniforms

texture maps

color &depth

standard OpenGLattributes &

generic attributes

drop fragment

� �

Page 16: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 16 -

Aufbau von GLSL - V

• Syntax der GLSL– stark angelehnt an ANSI C– Datentypen:

• float, int, bool• vec{2,3,4}, ivec{2,3,4}, bvec{2,3,4}• mat{2,3,4}• sampler{1,2,3}D• void

– Funktionen• main als Einsprungspunkt• Parameter

– in, out, inout, const– Übergabe by-value

• Eingebaute Funktionen

1 2 3 4 5

vec4 diffuse( const in vec4 N,const in vec4 L,in vec4 C)

{// compute diffuse lightingfloat a = dot (N, normalize (L));if (a > 0)

C = C*a;else

C = 0;return C;

}

� �

Page 17: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 17 -

Aufbau von GLSL - VI

• Syntax der GLSL (Fortsetzung)– Strukturierungsmöglichkeiten

• Sequenz• Selektion (if-else)• Schleife (for, white, do-while)• Sprünge (return, break, continue, discard)

– Preprozessor• #ifdef• #pragma• Kommentare im C++ Stil

1 2 3 4 5

vec4 diffuse( const in vec4 N,const in vec4 L,in vec4 C)

{// compute diffuse lightingC = C* max(0, dot (N, normalize (L)));return C;

}

vec4 diffuse( const in vec4 N,const in vec4 L,in vec4 C)

{// compute diffuse lightingfloat a = dot (N, normalize (L));if (a > 0)

C = C*a;else

C = 0;return C;

}

� �

Page 18: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 18 -

Praxis - I

• Beispiel:

1 2 3 4 5� � �

// vertex to fragment shader iovarying vec3 N;varying vec4 I;

// globalsuniform float edgefalloff;

// entry pointvoid main(){

float opac = dot ( normalize (N), normalize (-I));

opac = 1 – pow(opac, edgefalloff);

gl_FragColor = gl_Color ;gl_FragColor [3] = opac;

}

// vertex to fragment shader iovarying vec3 N;varying vec4 I;

// entry pointvoid main(){

// position in eye spacevec4 P = gl_ModelViewMatrix * gl_Vertex ;// position in clip spacegl_Position = gl_ModelViewProjectionMatrix *

gl_Vertex ;// normal transformN = gl_NormalMatrix * gl_Normal ;// incident vectorI = P - gl_ModelViewMatrix [3];

}

Vertex-Shader Fragment-Shader

Page 19: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 19 -

Praxis - II

• ARB-Erweiterung der OpenGL API– Shader-Objekt

• Quelltext(e)• jederzeit kompilierbar� bei Programmstart oder unmittelbar vor Benutzung

– Programm-Objekt• Ansammlung von zusammen-gehörigen Shader-Objekten

– erfordert Linking

• enhält genau eine main-Funktion

1 2 3 4 5� � �

GLhandleARB vs, fs;

// create vertex shader objectvs = glCreateShaderObjectARB

(GL_VERTEX_SHADER_ARB);glShaderSourceARB(vs,1,&vsSource,NULL);glCompileShaderARB(vs);

// create fragment shader objectfs = glCreateShaderObjectARB

(GL_FRAGMENT_SHADER_ARB);glShaderSourceARB(fs,1,&fsSource,NULL);glCompileShaderARB(fs);

GLhandleARB program;

// create program objectprogram = glCreateProgramObjectARB();

// attach shader objectsglAttachObjectARB(program, vs);glAttachObjectARB(program, fs);

// link program object and enable itglLinkProgramARB(program);glUseProgramObjectARB(program);

Page 20: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 20 -

Praxis - III

• ARB-Erweiterung der OpenGL API (Fortsetzung)– uniform

1. Handle liefern lassen2. mittels Handle Wert setzen

– Übermittlung der Attribute auf gewohnte Art und Weise• glVertex, glNormal, glColor, …

1 2 3 4 5� � �

Glint hParamFloat, hParamVector;// get locations of parametershParamFloat =

glGetUniformLocationARB(program, “f”);hParamVector =

glGetUniformLocationARB(program, “v”);

// set parametersglUniform1fARB(hParamFloat, 0.42);glUniform3fARB(hParamVector,

0.5, 1.0, 0.0);

Page 21: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 21 -

Schlussfolgerungen - I 1 2 3 4 5� � � �

• Ähnliche Konzepte von Cg und HLSL– Vertex-/Fragmentshader– ähnliche Syntax– aber Kompilation auf anderer Ebene

• zusätzliche Schicht in Cg/HLSL• daher einfacher zu implementieren• jedoch weniger Optimierungs-möglichkeiten durch Treiber

HLSL Shader GLSL Shader

DirectX

HLSL Compiler

Graphics Card

Direct3D Driver

Hardware

Graphics Card

OpenGL Driver

Hardware

GLSLCompiler

Assembler

HLSL

GLSL

Dire

ctX

OpenG

L

µ−µ−µ−µ−ops

µ−µ−µ−µ−ops

Page 22: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 22 -

Schlussfolgerungen - II 1 2 3 4 5� � � �

• Praxisrelevanz GLSL– Hardware grundsätzlich in der Lage, GLSL auszuführen� Treiber nicht verfügbar oder nicht ausgereift

• Cg und vor allem HLSL bereits länger im produktivenEinsatz– große Menge verfügbarer Shader– PlugIns für Vielzahl vonHighEnd-Grafikprogrammen

• Massenmarkt (Spiele) kaumdurchdrungen

Cg-PlugIn für Cinema4D, © Maxon

Page 23: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 23 -

Schlussfolgerungen - III 1 2 3 4 5� � � �

• Zukunft– bessere Treiberunterstützung– Performance muss stark gesteigert werden

• schnellere Hardware und bessere Optimierungen• erst dann massenmarkttauglich

– Sprache z.Z. nicht komplett in Hardware abgebildet• z.B. noise auf ATI-Karten

– wichtige Sprachfeatures fehlen• switch-Anweisung

– mangelhafte Unterstützung der Shader-Entwickler• vernünftiger Debugger erforderlich

Page 24: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 24 -

Anhang 1 2 3 4 5� � � � �

• Hauptquellen– John Kessenich, Dave Baldwin and Randi Rost, The OpenGL

Shading Language, version 1.05, 2003.– Robert L. Cook, Shade Trees, SIGGRAPH 1984, Minneapolis.– Robert L. Cook, Loren Carpenter and Edwin Catmull, The Reyes

Image Rendering Architecture, SIGGRAPH 1987, Anaheim.– Tomas Akenine-Möller and Eric Haines, Real-time Rendering, 2nd edi-tion, A. K. Peters, 2002.

– Microsoft Corporation, High-level shader language.– William R. Mark, R. Steven Glanville, Kurt Akeley, Mark J. Kilgard,

Cg: A system for programming graphics hardware in a C-likelanguage, SIGGRAPH 2003, San Diego.

• weitere siehe Ausarbeitung

Page 25: Die Shading Language - Stephan Presentation.pdf · Das Shader-Konzept 3. Aufbau der Shading Language 4. Praxis 5. Schlussfolgerungen ... Motivation - I • Bedarf nach frei programmierbarer

7. Januar 2004 Stephan Brumme: Die OpenGL Shading Language - 25 -

Diskussion

?

1 2 3 4 5� � � � �