Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7)...

46
10.05.06 Research Group Programming Languages / Methodologies Shader 1 Shader Johannes Spohr Christian Niemand

Transcript of Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7)...

Page 1: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

1

Shader

Johannes SpohrChristian Niemand

Page 2: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

2

Inhalt

1. Fixed Function Pipeline2. Entwicklung3. Kommunikation 4. Anwendung

Page 3: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

3

Fixed Function Pipeline (1)

App.Memory

Per-Vertex Operations

FragmentProcessing

ClipProject

ViewportCull

Rasterize

PrimitiveAssembly

Per-Fragment

Operations

FrameBuffer

Operations

FrameBuffer

TextureMemory

(Geometry)

(Pixel)

(Pixel)

(Geometry)

Pixel(Un)PackTransfer

Page 4: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

4

Fixed Function Pipeline (2)

App.Memory

Per-Vertex Operations

FragmentProcessing

ClipProject

ViewportCull

Rasterize

PrimitiveAssembly

Per-Fragment

Operations

FrameBuffer

Operations

FrameBuffer

TextureMemory

(Geometry)

(Pixel)

(Pixel)

(Geometry)

Pixel(Un)PackTransfer

Page 5: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

5

Fixed Function Pipeline (3)

App.Memory

Per-Vertex Operations

FragmentProcessing

ClipProject

ViewportCull

Rasterize

PrimitiveAssembly

Per-Fragment

Operations

FrameBuffer

Operations

FrameBuffer

TextureMemory

(Geometry)

(Pixel)

(Pixel)

(Geometry)

Pixel(Un)PackTransfer

Page 6: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

6

Fixed Function Pipeline (4)

App.Memory

Per-Vertex Operations

FragmentProcessing

ClipProject

ViewportCull

Rasterize

PrimitiveAssembly

Per-Fragment

Operations

FrameBuffer

Operations

FrameBuffer

TextureMemory

(Geometry)

(Pixel)

(Pixel)

(Geometry)

Pixel(Un)PackTransfer

Page 7: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

7

Fixed Function Pipeline (5)

App.Memory

Per-Vertex Operations

FragmentProcessing

ClipProject

ViewportCull

Rasterize

PrimitiveAssembly

Per-Fragment

Operations

FrameBuffer

Operations

FrameBuffer

TextureMemory

(Geometry)

(Pixel)

(Pixel)

(Geometry)

Pixel(Un)PackTransfer

Page 8: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

8

Fixed Function Pipeline (6)

App.Memory

Per-Vertex Operations

FragmentProcessing

ClipProject

ViewportCull

Rasterize

PrimitiveAssembly

Per-Fragment

Operations

FrameBuffer

Operations

FrameBuffer

TextureMemory

(Geometry)

(Pixel)

(Pixel)

(Geometry)

Pixel(Un)PackTransfer

Page 9: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

9

Fixed Function Pipeline (7)

App.Memory

Per-Vertex Operations

FragmentProcessing

ClipProject

ViewportCull

Rasterize

PrimitiveAssembly

Per-Fragment

Operations

FrameBuffer

Operations

FrameBuffer

TextureMemory

(Geometry)

(Pixel)

(Pixel)

(Geometry)

Pixel(Un)PackTransfer

Page 10: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

10

Fixed Function Pipeline (8)

App.Memory

Per-Vertex Operations

FragmentProcessing

ClipProject

ViewportCull

Rasterize

PrimitiveAssembly

Per-Fragment

Operations

FrameBuffer

Operations

FrameBuffer

TextureMemory

(Geometry)

(Pixel)

(Pixel)

(Geometry)

Pixel(Un)PackTransfer

Page 11: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

11

Fixed Function Pipeline (9)

App.Memory

Per-Vertex Operations

FragmentProcessing

ClipProject

ViewportCull

Rasterize

PrimitiveAssembly

Per-Fragment

Operations

FrameBuffer

Operations

FrameBuffer

TextureMemory

(Geometry)

(Pixel)

(Pixel)

(Geometry)

Pixel(Un)PackTransfer

Page 12: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

12

Problematik

• Unflexibel• Kein dynamischer Workflow• Performance

–Speichertransfers

Page 13: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

13

Programmable Pipeline

App.Memory

ClipProject

ViewportCull

Rasterize

PrimitiveAssembly

Per-Fragment

Operations

FrameBuffer

Operations

FrameBuffer

TextureMemory

(Geometry)

(Pixel)

(Pixel)

(Geometry)

Pixel(Un)PackTransfer

VertexProcessor

FragmentProcessor

Page 14: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

14

Vertex Processor

• Vertex Shader• Per Vertex• Transformation• Beleuchtung• Texturkoordinaten• Texture Lookup

(SM 3.0)

• Pixel Shader• Per Pixel• Texture Lookup• Blending• Beleuchtung

FragmentProcessor

Page 15: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

15

Beleuchtung nach Phong

Quelle [P1]

Page 16: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

16

Effekt: Detail ohne komplexe Geometrie (1)

Quelle [P6]

Page 17: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

17

Effekt: Detail ohne komplexe Geometrie (2)

Quelle [P6]

Page 18: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

18

Effekt: Detail ohne komplexe Geometrie (3)

Quelle [P6]

Page 19: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

19

Effekt: Detail ohne komplexe Geometrie (4)

Quelle [P6]

Page 20: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

20

Vergleich

Quelle [P6]

Page 21: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

21

Kurze Zusammenfassung

• Fixed Function Pipeline• Programmable Pipeline

–Programmierbare Vertex- und Fragmentprozessoren

Page 22: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

22

Kommunikation

• CPU -> Grafikspeicher (Objektstruktur, Texturen)

• CPU -> GPU (Code, Parameter)• Vertex Shader -> Pixel Shader• Pixel Shader -> Framebuffer

Page 23: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

23

Kommunikation

• CPU -> Grafikspeicher (Objektstruktur, Texturen)

• CPU -> GPU (Code, Parameter)• Vertex Shader -> Pixel Shader• Pixel Shader -> Framebuffer

Page 24: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

24

Vertexdaten

• Applikation erstellt Vertexbuffer• Vertexformat / -struktur

–Position, Normalen, Texturkoordinaten...

–Abhängig vom gewünschten Effekt

• Übergabe an API: Drawcall–Zeichnen einer Primitivenliste

Page 25: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

25

Texturen2D Textur 3D Textur Cubemap

Quelle [P5]

Quelle [P5]

Quelle [P4]

Quelle [P7]

Page 26: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

26

Kommunikation

• CPU -> Grafikspeicher (Objektstruktur, Texturen)

• CPU -> GPU (Code, Parameter)• Vertex Shader -> Pixel Shader• Pixel Shader -> Framebuffer

Page 27: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

27

Code

• Programmiersprachen–RenderMan–Assembler–GLSL–Cg / HLSL

• Compiler–Kompilierung zur Ladezeit

• Assembler

Page 28: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

28

Einschränkungen (1)

Shader 1.1 Shader 2.0 Shader 3.0Pixel Shader Instruktionen 8 96 32000Vertex Shader Instruktionen 128 256 32000Dynamisches Branching Nein Nein JaVerschachtelte Schleifen Nein Ja Ja

Quelle [L1]

Page 29: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

29

Einschränkungen (2)

• Eingeschränkte Ein-/Ausgabe–Keine Dateianbindung–Kein RAM-Zugriff–Keine Benutzereingabe–Keine Standardausgabe

Page 30: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

30

Parameter

• Einfache Datentypen– float, int, bool–Vektor, Matrix

• Parametertypen–Uniform–Varying–Attribute

Page 31: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

31

Uniform

• Applikation -> Shader• Innerhalb eines Drawcalls konstant• In Anwendung & Shader deklariert

–Anwendung schreibt–Shader liest

Page 32: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

32

Kommunikation

• CPU -> Grafikspeicher (Objektstruktur, Texturen)

• CPU -> GPU (Code, Parameter)• Vertex Shader -> Pixel Shader• Pixel Shader -> Framebuffer

Page 33: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

33

Varying

• Vertex Shader -> Pixel Shader• Berechnung durch Vertex Shader• Interpolation über Dreiecksfläche• Pixel Shader erhält interpolierten

Wert für den jeweiligen Pixel• In beiden Shadern deklariert

Quelle [P8]

Page 34: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

34

Attribute

• Vertex Buffer -> Vertex Shader• Mehrere Attribute je Vertex• In Anwendung & Vertex Shader

deklariert

Page 35: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

35

Vertex Shader

• Wird pro Vertex angewendet• Transformiert Vertex relativ zum

Betrachter• Berechnet Beleuchtung• Texturkoordinaten• Texture Lookup (SM 3.0)

Page 36: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

36

Morphing

• Ein Objekt oder ein Bild wird in ein anderes Objekt bzw. Bild umgeformt

• Demo

Page 37: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

37

Skinning• Eingesetzt bei

Charakteranimation

• Objektstruktur wird über animierte Bones (Knochen) gelegt

• Bones haben Einflussvolumen auf Vertices

Quelle [P2] und [P3]

Page 38: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

38

Pixel Shader

• Wird pro Pixel angewendet• Texture Lookup• Blending• Beleuchtung

Page 39: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

39

Per Vertex Lighting

Screenshot aus RenderMonkey

Page 40: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

40

Per Pixel Lighting

Screenshot aus RenderMonkey

Page 41: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

41

Bump Mapping

Screenshot aus RenderMonkey

Page 42: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

42

Zusammenfassung (1)

• Shader sind kleine Programme• Operieren auf Vertices oder Pixeln

Page 43: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

43

Zusammenfassung (2)

Vertex Shader

Uniform

Pixel Shader

Geometrie

Varying

Texturen

Framebuffer

Page 44: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

44

Quellenangabe (1)• Literatur

– [L1] http://www.bit-tech.net/hardware/2005/07/25/guide_to_shaders/5.html

– [L2] OpenGL Shading Language – Addison Wesley – Autor: Randi J. Rost

– [L3] The Cg Tutorial – Addison Wesley – Autor: Randima Fernando and Mark J. Kilgard

Page 45: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

45

Quellenangabe (2)• Abbildungen

– [P1] http://www.ixbt.com/cpu/cpurm/general/phong.gif

– [P2] http://www.janikarvonen.com/gfx/3d/elephant_10_skinning_shot_wip.jpg

– [P3] http://www.janikarvonen.com/gfx/3d/elephant_10_skinning_wip.jpg

– [P4] http://wwwisg.cs.uni-magdeburg.de

– [P5] http://www.cambrianlabs.com/mattias/

– [P6] http://graphics.cs.brown.edu/games/SteepParallax/index.html

– [P7] http://www.photoshop-weblog.de/

– [P8] http://www.cscs.ch/~mvalle/Libro/color-interpolation.jpg

Page 46: Shader › ... › unik_s_gpgpu_shader_folien_ss2006.pdf · Shader 9 Fixed Function Pipeline (7) App. Memory Per-Vertex Operations Fragment Processing Clip Project Viewport Cull Rasterize

10.05.06Research Group Programming Languages / Methodologies

Shader

46

Vielen Dank für ihre Aufmerksamkeit