Presentation is loading. Please wait.

Presentation is loading. Please wait.

Programmable Shaders Dr. Scott Schaefer.

Similar presentations


Presentation on theme: "Programmable Shaders Dr. Scott Schaefer."— Presentation transcript:

1 Programmable Shaders Dr. Scott Schaefer

2 Graphics Cards Performance
Nvidia Geforce 6800 GTX1 6.4 billion pixels/sec Nvidia Geforce 7900 GTX2 15.6 billion pixels/sec Xbox 3603 16 billion pixels/sec (4X AA) Nvidia Geforce 8800 GTX4 36.8 billion pixels/sec Nvidia Geforce GTX 2955 92.2 billion pixels/sec 1: 2: 3: 4: 5:

3 Parallel Processing Power
Nvidia Geforce Titan Z 5760 programmable processors 876 MHz each 672 GB/s memory bandwidth 12 GB memory

4 Parallel Processing Power
AMD’s Radeon R9 295X processors, 11.5 TFLOPS IBM’s ASCI White cores, 12.2 TFLOPS Fastest Computer in the World 2001

5 Graphics Pipeline Vertices

6 Transformation/Lighting
Graphics Pipeline Vertices Vertex Transformation/Lighting

7 Transformation/Lighting
Graphics Pipeline Vertices Vertex Transformation/Lighting Transformed Vertices

8 Transformation/Lighting Viewport Transformation
Graphics Pipeline Vertices Vertex Transformation/Lighting Transformed Vertices Viewport Transformation

9 Transformation/Lighting Viewport Transformation
Graphics Pipeline Vertices Vertex Transformation/Lighting Vertex Index Stream Transformed Vertices Viewport Transformation Triangle Setup

10 Transformation/Lighting Viewport Transformation
Graphics Pipeline Vertices Vertex Transformation/Lighting Vertex Index Stream Transformed Vertices Viewport Transformation Triangle Setup Backface Culling

11 Transformation/Lighting Viewport Transformation
Graphics Pipeline Vertices Vertex Transformation/Lighting Vertex Index Stream Transformed Vertices Viewport Transformation Triangle Setup Backface Culling Clipping

12 Graphics Pipeline Vertices Vertex Index Stream Transformed Vertices
Transformation/Lighting Vertex Index Stream Transformed Vertices Viewport Transformation Triangle Setup Backface Culling Clipping Interpolation/Rasterization

13 Graphics Pipeline Vertices Vertex Index Stream Transformed Vertices
Transformation/Lighting Vertex Index Stream Transformed Vertices Viewport Transformation Triangle Setup Backface Culling Clipping Interpolation/Rasterization Pixel Location/Color/Depth

14 Graphics Pipeline Vertices Vertex Index Stream Transformed Vertices
Transformation/Lighting Vertex Index Stream Transformed Vertices Viewport Transformation Triangle Setup Backface Culling Clipping Interpolation/Rasterization Pixel Location/Color/Depth Visibility Determination

15 Graphics Pipeline Vertices Vertex Index Stream Transformed Vertices
Transformation/Lighting Vertex Index Stream Transformed Vertices Viewport Transformation Triangle Setup Backface Culling Clipping Interpolation/Rasterization Pixel Location/Color/Depth Visibility Determination Frame Buffer

16 Programmable Graphics Pipeline
Vertices Vertex Shader Vertex Index Stream Transformed Vertices/ Normals/Texture coords/… Viewport Transformation Triangle Setup Backface Culling Clipping Interpolated Vertex Data Interpolation/Rasterization Pixel Shader Pixel Location Visibility Determination Color/Depth Frame Buffer

17 Shader Programming Many different languages Assembly
OpenGL Shading Language Nvidia’s CG Microsoft’s HLSL Different capabilities based on shader model Register count Instructions Maximum number of instructions

18 Vertex Shaders Input: anything associated with vertices
Position, normal, texture coordinates, etc… Output: transformed vertices MUST output position Can produce color, normal, texture coordinates, etc…

19 Vertex Shaders // vertex shader output structure struct VS_OUTPUT {
float4 Pos : POSITION; };

20 Vertex Shaders VS_OUTPUT VS(
float3 InPos : POSITION // Vertex position in model space ) { VS_OUTPUT Out = (VS_OUTPUT)0; // transform the position float3 transformedPos = mul(float4(InPos, 1), (float4x3)World); Out.Pos = mul(float4(transformedPos,1), ViewProjection); return Out; }

21 Pixel Shaders Input: Vertex data produced from vertex shader Output:
MUST output color Can output depth as well Cannot change location of pixel on screen

22 Pixel Shaders float4 PS ( VS_OUTPUT In ) : COLOR {
// may perform texture lookup, depth effects, fog, etc… return float4 ( 1, 1, 1, 1 ); }

23 Gouraud Shading Example
// vertex shader output structure struct VS_OUTPUT { float4 Pos : POSITION; float4 Color : COLOR; };

24 Gouraud Shading Example
VS_OUTPUT VS( float3 InPos : POSITION, // Vertex position in model space float3 InNormal : NORMAL // Vertex normal in model space ) { VS_OUTPUT Out = (VS_OUTPUT)0; // transform the position and normal float3 transformedPos = mul(float4(InPos, 1), (float4x3)World); Out.Pos = mul(float4(transformedPos,1), ViewProjection); float3 transNormal = mul(InNormal, (float3x3)World); // normal (view space) Out.Color = float4 ( calcColor ( normalize ( lightPos – transformedPos ), transNormal, normalize ( eyePos – transformedPos ) ), 1 ); return Out; }

25 Gouraud Shading Example
float3 calcColor ( float3 lightVec, float3 normal, float3 eyeToVertex ) { float3 color = 0; color += lightColor * MaterialAmbient; color += lightColor * MaterialDiffuse * max ( 0, dot ( normal, lightVec ) ); float3 R = normalize ( reflect ( lightVec, normal ) ); color += lightColor * MaterialSpecular * pow ( max ( 0, dot ( R, eyeToVertex ) ), MaterialSpecularPower ); return color; }

26 Gouraud Shading Example
float4 PS ( VS_OUTPUT In ) : COLOR { return In.Color; }

27 Phong Shading Example // vertex shader output structure
struct VS_OUTPUT { float4 Pos : POSITION; float3 Normal : TEXCOORD0; float3 TransformedPos : TEXCOORD1; };

28 Phong Shading Example VS_OUTPUT VS(
float3 InPos : POSITION, // Vertex position in model space float3 InNormal : NORMAL // Vertex normal in model space ) { VS_OUTPUT Out = (VS_OUTPUT)0; // transform the position and normal Out.TransformedPos = mul(float4(InPos, 1), (float4x3)World); Out.Pos = mul(float4(Out.TransformedPos,1), ViewProjection); Out.Normal = mul(InNormal, (float3x3)World); // normal (view space) return Out; }

29 Phong Shading Example float4 PS ( VS_OUTPUT In ) : COLOR {
// vector from vertex towards eye float3 EyeToVertex = normalize ( In.TransformedPos - EyePos ); float3 normal = normalize ( In.Normal ); float4 color = calcColor ( normalize ( lightPos – In.TransformedPos ), normal, EyeToVertex ); return color; }

30 General Purpose GPU Programming
Originally success was limited because problems had to be crammed into graphics pipeline General purpose computation now available Nvidia’s CUDA DirectX Compute OpenCL


Download ppt "Programmable Shaders Dr. Scott Schaefer."

Similar presentations


Ads by Google