Title: Dr. Scott Schaefer
1Programmable Shaders
2Graphics 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 2805
- 48.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/Xboxspecsrevealed/2100-10
43_3-5705372.html 4 http//www.nvidia.com/page/
geforce_8800.html 5 http//www.nvidia.com/object
/geforce_gtx_280.html
3Parallel Processing Power
- Nvidia Geforce GTX 280
- 240 programmable processors
- 1.3 GHz each
- 141.7 GB/s memory bandwidth
- 1GB memory
http//www.nvidia.com/object/geforce_gtx_280.html
4Parallel Processing Power
IBMs ASCI Red, 1.338 TFLOPS Fastest Computer in
the World 1997
ATIs Radeon HD 4850, 1.2 TFLOPS
5Graphics Pipeline
Vertices
6Graphics Pipeline
Vertices
Vertex Transformation/Lighting
7Graphics Pipeline
Vertices
Vertex Transformation/Lighting
Transformed Vertices
8Graphics Pipeline
Vertices
Vertex Transformation/Lighting
Transformed Vertices
Viewport Transformation
9Graphics Pipeline
Vertices
Vertex Transformation/Lighting
Vertex Index Stream
Transformed Vertices
Viewport Transformation
Triangle Setup
10Graphics Pipeline
Vertices
Vertex Transformation/Lighting
Vertex Index Stream
Transformed Vertices
Viewport Transformation
Triangle Setup
Backface Culling
11Graphics Pipeline
Vertices
Vertex Transformation/Lighting
Vertex Index Stream
Transformed Vertices
Viewport Transformation
Triangle Setup
Backface Culling
Clipping
12Graphics Pipeline
Vertices
Vertex Transformation/Lighting
Vertex Index Stream
Transformed Vertices
Viewport Transformation
Triangle Setup
Backface Culling
Clipping
Interpolation/Rasterization
13Graphics Pipeline
Vertices
Vertex Transformation/Lighting
Vertex Index Stream
Transformed Vertices
Viewport Transformation
Triangle Setup
Backface Culling
Clipping
Interpolation/Rasterization
Pixel Location/Color/Depth
14Graphics Pipeline
Vertices
Vertex Transformation/Lighting
Vertex Index Stream
Transformed Vertices
Viewport Transformation
Triangle Setup
Backface Culling
Clipping
Interpolation/Rasterization
Pixel Location/Color/Depth
Visibility Determination
15Graphics Pipeline
Vertices
Vertex Transformation/Lighting
Vertex Index Stream
Transformed Vertices
Viewport Transformation
Triangle Setup
Backface Culling
Clipping
Interpolation/Rasterization
Pixel Location/Color/Depth
Visibility Determination
Frame Buffer
16Programmable 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
17Shader Programming
- Many different languages
- Assembly
- OpenGL Shading Language
- Nvidias CG
- Microsofts HLSL
- Different capabilities based on shader model
- Register count
- Instructions
- Maximum number of instructions
18Vertex Shaders
- Input anything associated with vertices
- Position, normal, texture coordinates, etc
- Output transformed vertices
- MUST output position
- Can produce color, normal, texture coordinates,
etc
19Vertex Shaders
- // vertex shader output structure
- struct VS_OUTPUT
-
- float4 Pos POSITION
20Vertex 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
21Pixel Shaders
- Input Vertex data produced from vertex shader
- Output
- MUST output color
- Can output depth as well
- Cannot change location of pixel on screen
22Pixel Shaders
- float4 PS ( VS_OUTPUT In ) COLOR
-
- // may perform texture lookup, depth effects,
fog, etc
- return float4 ( 1, 1, 1, 1 )
23Gouraud Shading Example
- // vertex shader output structure
- struct VS_OUTPUT
-
- float4 Pos POSITION
- float4 Color COLOR
24Gouraud 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
25Gouraud 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
26Gouraud Shading Example
- float4 PS ( VS_OUTPUT In ) COLOR
-
- return In.Color
27Phong Shading Example
- // vertex shader output structure
- struct VS_OUTPUT
-
- float4 Pos POSITION
- float3 Normal TEXCOORD0
- float3 TransformedPos TEXCOORD1
28Phong 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
29Phong 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
30General Purpose GPU Programming
- Limited success because problems must be crammed
into graphics pipeline
- General purpose computation starting to become
available
- Nvidias CUDA
- Peakstream