Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction...

22
Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Transcript of Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction...

Page 1: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Shaders

Jeremy Nicholson

COMP30019: Graphics and Interaction05 Sep 2011

Jeremy Nicholson Shaders

Page 2: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Rendering Pipeline

(Foley Figure 14.41)

Jeremy Nicholson Shaders

Page 3: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Rendering Pipeline

(OpenGL Red Book, section 1)

Jeremy Nicholson Shaders

Page 4: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Rendering Pipeline

(Angel Figure 1.38)

Jeremy Nicholson Shaders

Page 5: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Rendering Pipeline

Vertex processing:

Vertex position:

co-ordinate transformations (model)projection transformations

Vertex colour:

Illumination model

Jeremy Nicholson Shaders

Page 6: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Rendering Pipeline

Clipping and primitive assembly:

Clipping:

Clipping volume (based on viewing frustum)projection transformations

Primitive assembly

Vertices → line segments, polygons, etc.

Jeremy Nicholson Shaders

Page 7: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Rendering Pipeline

Rasterisation:

Scan conversion of polygons

Line segment → fragments

Fragments: ”potential pixels”

Position and colour to be entered into frame buffer

Jeremy Nicholson Shaders

Page 8: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Rendering Pipeline

Fragment processing:

Hidden surface removal

Some fragments may not be visible because they are behindother fragments

Texturing, blending, etc.

Jeremy Nicholson Shaders

Page 9: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Shaders

Loosely speaking, programming on the GPU itself

Typically high-powered processor, lots of RAM

Parallel processing plays an important part

not massively paralleltypically only a couple of simple mathematical operationse.g. matrix multiplication of a single transformation matrix tomany vertices

Don’t typically do any “shading”

Jeremy Nicholson Shaders

Page 10: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Types of Shaders

Vertex Shader:

Input: set of primitives (vertices)

Output: set of primitives

Operate on vertex values and associated data

NormalsColourMaterial propertiesTexture?

Jeremy Nicholson Shaders

Page 11: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Types of Shaders

Geometry Shader:

Input: set of primitives

Output: set of primitives

Add/remove vertices or other primitives

Triangulation (why?)Hidden surface removal?Shadow volumes etc.

Jeremy Nicholson Shaders

Page 12: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Types of Shaders

Fragment Shader:

Input: set of fragments

Output: set of fragments

Apply operations to viewport pixels (primarily colour)

Texture mappingBump mappingPotentially lighting modelRasterisation/anti-aliasing?

Jeremy Nicholson Shaders

Page 13: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Types of Shaders

Pixel Shader:

Input: set of fragments

Output: set of pixel values

Actually rendering images to the display

Depth testing/occlusion/blendingHardware conversion: dithering, γ-correctionDouble buffering

Jeremy Nicholson Shaders

Page 14: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Shaders and the Rendering Pipeline

Vertex processing: Vertex Shader

Clipping and primitive assembly: Geometry Shader

Rasterisation: Fragment Shader

Fragment processing: Pixel Shader

(Loosely)

Jeremy Nicholson Shaders

Page 15: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Shaders and the Rendering Pipeline

Vertex Shader: ???

Geometry Shader: ???

Fragment Shader: ???

Pixel Shader: ???

Jeremy Nicholson Shaders

Page 16: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Shaders and the Rendering Pipeline

Vertex Shader: Modelling transform, Lighting, Viewing transform

Geometry Shader: Trivial accept/reject, some Lighting

Fragment Shader: Rasterisation

Pixel Shader: Display

(Typically, but Clipping and Map to 3D viewport are ”missing”)

Jeremy Nicholson Shaders

Page 17: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Shaders in OpenGL

Contrast with ”legacy” OpenGL

Gives you the power (and hassle) of specifying your ownmodelling/viewing operations, illumination model, shading model

Only Vertex/Geometry/Fragment Shaders implemented in OpenGL

And geometry only recently!

Manipulated using a pared-down programming language...

Jeremy Nicholson Shaders

Page 18: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

GLSL: The OpenGL shading language

”GL slang”

Reference: Orange book

Not many in-builts

Some mathematical functions (e.g. Trigonometric)I/O partly limited: specific streams for vertex position, colour,etc.

Jeremy Nicholson Shaders

Page 19: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

GLSL: The OpenGL shading language

Common key words:

in - input (from OpenGL or earlier in the Shader pipeline)

out - output (to next Shader in the pipeline, or occasionallyOpenGL)

uniform - ”constant” variable: same across many inputs(iterationsof Shader) — allowing preprocessing and optimisation

varying - actual variable: for intermediate calculation etc.

Jeremy Nicholson Shaders

Page 20: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Examples

Trivial Example(Angel 2.2)

Jeremy Nicholson Shaders

Page 21: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Examples

Illumination Model (in Vertex Shader)(Angel 5.3)

Jeremy Nicholson Shaders

Page 22: Shaders - people.eng.unimelb.edu.au · Shaders Jeremy Nicholson COMP30019: Graphics and Interaction 05 Sep 2011 Jeremy Nicholson Shaders

Examples

Illumination Model (in Fragment Shader)(Angel 5.6)

Jeremy Nicholson Shaders