Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX.

Similar presentations


Presentation on theme: "1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX."— Presentation transcript:

1 1 Dr. Scott Schaefer Programmable Shaders

2 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX 2  15.6 billion pixels/sec Xbox 360 3  16 billion pixels/sec (4X AA) Nvidia Geforce 8800 GTX 4  36.8 billion pixels/sec Nvidia Geforce GTX 295 5  92.2 billion pixels/sec 1: http://www.nvidia.com/page/geforce_6800.html 2: http://www.nvidia.com/page/geforce_7900.html 3: http://news.com.com/Xbox+specs+revealed/2100-1043_3-5705372.html 4: http://www.nvidia.com/page/geforce_8800.html 5: http://www.nvidia.com/object/geforce_gtx_295.html

3 3/30 Parallel Processing Power Nvidia Geforce GTX 780 Ti  2880 programmable processors  875 MHz each  336 GB/s memory bandwidth  3 GB memory http://www.geforce.com/hardware/desktop-gpus/geforce-gtx-780-ti/specifications

4 Parallel Processing Power IBM’s ASCI White, 4.9 TFLOPS Fastest Computer in the World 2000 AMD’s Radeon HD 7990 4096 processors, 8.2 TFLOPS 4/30

5 5/30 Graphics Pipeline Vertices

6 6/30 Graphics Pipeline Vertices Vertex Transformation/Lighting

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

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

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

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

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

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

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

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

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

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

17 17/30 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 18/30 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 19/30 Vertex Shaders // vertex shader output structure struct VS_OUTPUT { float4 Pos : POSITION; };

20 20/30 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 21/30 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 22/30 Pixel Shaders float4 PS ( VS_OUTPUT In ) : COLOR { // may perform texture lookup, depth effects, fog, etc… return float4 ( 1, 1, 1, 1 ); }

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

24 24/30 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 25/30 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 26/30 Gouraud Shading Example float4 PS ( VS_OUTPUT In ) : COLOR { return In.Color; }

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

28 28/30 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 29/30 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 30/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 "1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX."

Similar presentations


Ads by Google