Download presentation
Presentation is loading. Please wait.
Published byLawrence Heath Modified over 9 years ago
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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.