shader programming and graphics hardware · 2014. 5. 1. · shader programming and graphics...

55
Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef

Upload: others

Post on 13-Mar-2021

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Shader Programming and Graphics Hardware

by Paul Scharf, original slides by Marries van de Hoef

Page 2: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Some Questions

Who has

• already finished P1?

• looked at/started on P2?

Who knows

• what a shader (program) is?

• how to write a shader program?

Page 3: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Practicals

• The first assignment was about the basics

• What is going on behind the XNA functions?

• How does the graphics hardware work?

• The second and third assignment require that knowledge

Page 4: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Goals

• Get some intuition about graphics hardware

• Understand the role of shaders

• Shader programming basics

What is a shader?

Page 5: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

High Level Overview

CPU GPU

Bus

Page 6: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

High Level Overview

CPU

Very general

Suited to run normal application code.

Instructs GPU

GPU

Highly specialized

Data flow

Vector calculations

Massively parallel

Waits for CPU commands

Page 7: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Architecture

ATI Radeon HD

7900 series

Each ‘GCN’ block:

SIMD unit (Single Instruction,

Multiple Data)

Page 8: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Topics

1. Graphics Pipeline

2. Pipeline example

3. Instructing the GPU

4. Shader programming

Page 9: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

1. Graphics Pipeline

Page 10: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Fixed-function pipeline

Vertex Transformation

Rasterization

Pixel Color Determination

Vertices

Pixel color

Transformation matrices

(World, View, Projection)

(Lighting information)

Convert triangles to pixels:

Textures / Color

Lighting information

Page 11: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Programmable pipeline

Rasterization

Vertices

Pixel color

Vertex Shader

Pixel Shader

GPU Memory

• Vertex Transformation stage replaced by Vertex Shader

• Pixel Color Determination replaced by Pixel Shader

• Access to GPU-memory

Page 12: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Vertex Shader

• Input: 1 Vertex

• Output: 1 Vertex

• Vertex is transformed to screen-space (2D)

• Modify/Add your own vertex attributes

Normal

Color

Texture coordinates

Lighting information

Page 13: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Rasterizer

• Input: 3 Vertices

• Output: A lot of pixels

• This stage is not programmable

1. Culling

2. Rasterize

3. Each pixel receives all vertex attributes

Linearly interpolated

Page 14: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Pixel Shader

• Input: 1 Pixel (interpolated attributes)

• Output: 1 Pixel color

• Determines the final color of this pixel

• Retrieve a color from a texture

• Calculate lighting

• Normal mapping

Page 15: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Input Assembler + Output Merger

Input Assembler

Before Vertex Shader

Assembles data:

Vertex Buffer

Index Buffer

PrimitiveType

Output Merger

After Pixel Shader

Z-buffer testing

Blending

Write to render target

Vertex Shader

Rasterization

Pixel Shader

GPU Memory

Input Assembler

Output Merger

Page 16: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Vertex Shader

Rasterization

Pixel Shader

GPU Memory

Input Assembler

Output Merger

Geometry Shader

GPU Memory

Rasterization

Vertex Shader

Pixel Shader

DirectX 10

Page 17: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Vertex Shader

Rasterization

Pixel Shader

GPU Memory

Input Assembler

Output Merger

Geometry Shader

GPU Memory

Vertex Shader

Hull Shader

Tessellator

Domain shader

DirectX 11

Page 18: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

2. Pipeline example

Page 19: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel
Page 20: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Box

Input vertices new Vector3(1.0f, 1.0f, 1.0f)

new Vector3(1.0f, 1.0f, -1.0f)

new Vector3(1.0f, -1.0f, 1.0f)

new Vector3(1.0f, -1.0f, -1.0f)

new Vector3(-1.0f, 1.0f, 1.0f)

new Vector3(-1.0f, 1.0f, -1.0f)

new Vector3(-1.0f, -1.0f, 1.0f)

new Vector3(-1.0f, -1.0f, -1.0f)

Vertex Shader

Rasterization

Pixel Shader

GPU Memory

Input Assembler

Output Merger

Page 21: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Vertex Shader

Rasterization

Pixel Shader

GPU Memory

Input Assembler

Output Merger

Page 22: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Vertex Shader

Rasterization

Pixel Shader

GPU Memory

Input Assembler

Output Merger

Page 23: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Vertex Shader

Rasterization

Pixel Shader

GPU Memory

Input Assembler

Output Merger

Page 24: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Vertex Shader

Rasterization

Pixel Shader

GPU Memory

Input Assembler

Output Merger

Page 25: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Vertex Shader

Rasterization

Pixel Shader

GPU Memory

Input Assembler

Output Merger

Page 26: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Vertex Shader

Rasterization

Pixel Shader

GPU Memory

Input Assembler

Output Merger

Page 27: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel
Page 28: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel
Page 29: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel
Page 30: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel
Page 31: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel
Page 32: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel
Page 33: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel
Page 34: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

3. Instructing the GPU

Page 35: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

API’s

Your Awesome Game

XNA

Direct3D (graphics part of DirectX)

Graphics Driver

Page 36: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Input Assembler Stage

Data

Vertex Buffer

GraphicsDevice.SetVertexBuffer(…)

Index Buffer

GraphicsDevice.Indices = …

State

VertexDeclaration

Implicitly activated in VertexBuffer

PrimitiveType

Selected in Draw function

Vertex Shader

Rasterization

Pixel Shader

GPU Mem

Input Assembler

Output Merger

Page 37: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Rasterizer Stage

State

RasterizerState

GraphicsDevice.RasterizerState = …

Backface culling

Wireframe

(MSAA, Scissor test, depth bias)

Vertex Shader

Rasterization

Pixel Shader

GPU Mem

Input Assembler

Output Merger

Page 38: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Output Merger Stage

State

DepthStencilState

GraphicsDevice.DepthStencilState = …

Z-buffer settings

Stencil buffer settings

BlendState

GraphicsDevice.BlendState = …

Alpha blending (for transparency)

RenderTarget2D

GraphicsDevice.SetRenderTarget(…)

RenderTarget2D can later be used as a Texture2D

Vertex Shader

Rasterization

Pixel Shader

GPU Mem

Input Assembler

Output Merger

Page 39: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Pixel Shader/Vertex Shader Stage

Shader

Activate: Effect.CurrentTechnique.Pass[0].Apply()

Shader Variables Effect.Parameters[“name”].SetValue(…)

Textures Effect.Parameters[“name”].SetValue(…)

Apply() after you set the values.

Vertex Shader

Rasterization

Pixel Shader

GPU Mem

Input Assembler

Output Merger

Page 40: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Load time / run time

At load time

Create and copy Data/Effects/State to GPU memory

At run time

Select active state

Copy shader variables to GPU memory

Never create the same thing each frame!

Page 41: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

GPU to CPU

Data always goes from CPU to GPU

GPU to CPU is uncommon, but possible (and slow)

Texture2D.SaveAsPng(…)

Texture2D.GetData(…)

Page 42: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

4. Shader programming

Page 43: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Shader code

HLSL – High Level Shader Language

Similar syntax to C#

Simplified

Specialized syntax

Read MSDN documentation

Different style of writing code

No autocomplete

Hard to debug

Write incrementally

Page 44: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Global effect layout

• Globals and Types

• Global shader variables

• Textures and samplers

• Vertex attribute structs

• Vertex shader

• Pixel shader

• Techniques

Page 45: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

float4x4 View, Projection, World;

struct VertexShaderInput

{

float4 Position3D : POSITION0;

float2 TexCoords : TEXCOORD0;

};

struct VertexShaderOutput

{

float4 Position2D : POSITION0;

float2 TexCoords : TEXCOORD0;

};

VertexShaderOutput SimpleVertexShader(VertexShaderInput input)

{

VertexShaderOutput output = (VertexShaderOutput)0;

float4 worldPosition = mul(input.Position3D, World);

float4 viewPosition = mul(worldPosition, View);

output.Position2D = mul(viewPosition, Projection);

output.TexCoords = input.TexCoords;

return output;

}

Page 46: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Texture2D BrickTexture;

SamplerState TextureSampler = sampler_state

{

Texture = <BrickTexture>;

MipFilter = Point;

MinFilter = Linear;

MagFilter = Linear;

AddressU = Clamp;

AddressV = Clamp;

};

struct VertexShaderOutput

{

float4 Position2D : POSITION0;

float2 TexCoords : TEXCOORD0;

};

float4 SimplePixelShader(VertexShaderOutput input) : COLOR0

{

return tex2D(TextureSampler, input.TexCoords);

}

technique Simple

{

pass Pass0

{

VertexShader = compile vs_2_0 SimpleVertexShader();

PixelShader = compile ps_2_0 SimplePixelShader();

}

}

Page 47: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel
Page 48: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Changing the pixel shader

Freedom to change the code to whatever you want

float4 SimplePixelShader(VertexShaderOutput input) : COLOR0

{

return tex2D(TextureSampler, input.TexCoords);

}

float4 SimplePixelShader(VertexShaderOutput input) : COLOR0

{

return float4(input.TexCoords, 0, 1);

}

Page 49: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel
Page 50: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Changing the pixel shader

Inverting the color

float4 SimplePixelShader(VertexShaderOutput input) : COLOR0

{

return tex2D(TextureSampler, input.TexCoords);

}

float4 SimplePixelShader(VertexShaderOutput input) : COLOR0

{

return 1-tex2D(TextureSampler, input.TexCoords);

}

Page 51: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel
Page 52: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Changing the pixel shader

Swizzling the color Swap the red and green channels

float4 SimplePixelShader(VertexShaderOutput input) : COLOR0

{

return tex2D(TextureSampler, input.TexCoords);

}

float4 SimplePixelShader(VertexShaderOutput input) : COLOR0

{

float4 color = tex2D(TextureSampler, input.TexCoords);

float4 swizzledColor = color.grba;

return swizzledColor;

}

Page 53: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel
Page 54: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Keep in mind

Avoid dynamic branching

Short is ok:

if (a > b) c = 0; else c = 1;

Think before coding

Write incrementally

For debugging:

if (a < 0) return float4(1, 0, 0, 1);

Aggressive compiler

Might optimize more than you think

Page 55: Shader Programming and Graphics Hardware · 2014. 5. 1. · Shader Programming and Graphics Hardware by Paul Scharf, original slides by Marries van de Hoef . ... Vertex Shader Pixel

Summary

Graphics Pipeline

Input Assembler

Vertex Shader

Rasterizer

Pixel Shader

Output Merger

Control the pipeline through State and Effects

Vertex Shader

Rasterization

Pixel Shader

GPU Mem

Input Assembler

Output Merger