Diapositiva 1 - PowerPoint PPT Presentation

1 / 61
About This Presentation
Title:

Diapositiva 1

Description:

Add specular, diffuse, and ambient contributions. High-level shading languages (Cg) ... sum of diffuse and specular contributions: float4 result = diffContrib ... – PowerPoint PPT presentation

Number of Views:39
Avg rating:3.0/5.0
Slides: 62
Provided by: Civ3
Category:

less

Transcript and Presenter's Notes

Title: Diapositiva 1


1
Shading Languages HW Giovanni Civati Dept.
of Information Tecnology University of Milan,
Italy Milan, 26th May 2004
2
Introduction
  • Ten years ago graphics hardware were capable of
    performing only 2D operations
  • Pc graphics hardware evolution was determined by
    video games
  • 1995 introduction of low-cost graphics hardware
    for 3D acceleration (triangle rastering, texture)
  • 1999 introduction of GPU (NVidia GeForce,
    followed by Ati Radeon and NVidia GeForce2)
  • 2001 introduction of GPU with programmable
    pipeline (vertex and pixel shader, DirectX 8.1)
  • Today second generation GPU with programmable
    pipeline (DirectX 9)

3
Hardware
  • 3D graphics cards
  • 2 Major productors
  • Ati (Radeon)
  • NVidia (GeForce)
  • Known problems
  • Library compability
  • Raw performance (fill rate, triangle throughput)
  • Driver quality
  • Driver stability, etc

4
Hardware
R300
  • ATI Radeon 9700 (R300)
  • 0.15-micron GPU
  • 110 million transistor
  • 8 pixel rendering pipelines, 1 texture unit per
    pipeline, can do 16 textures per pass
  • 4 programmable vect4 vertex shader pipelines
  • 256-bit DDR memory bus
  • up to 256MB of memory on board, clocked at over
    300MHz (resulting in a minimum of 19.2GB/s of
    memory bandwidth)
  • AGP 8X Support
  • Full DX9 Pixel and Vertex Shader Support (DirectX
    9 Compliant means that the pipeline is fully
    floating point from start to finish)

5
Hardware
R300
  • The die

Large amount taken up by the FPPU
6
Hardware
R300 The 3D Pipeline
  • The 3D Pipeline

Other products have a similar pipeline (e.g.
NV30) (due to the compliancy with DirectX 9)
7
Hardware
R300 The 3D Pipeline
  • High-Performance Graphics Memory

8
Hardware
R300 The 3D Pipeline
  • First step Sending commands and data to be
    executed on the GPU
  • AGP 8x (AGP 3.0) running at 66Mhz with 32-bit
    results in a total of 2.1 GB/s (between R300 and
    the North Bridge)

9
Hardware
R300 The 3D Pipeline
  • Vertex Processing
  • Data sent in the form of vertices
  • First operation (known as TL) is the
    transformation stage (requiring a lot of highly
    repetitive floating-point matrix math)
  • Lighting calculation for each vertex
  • Shape changing, look, behavior (e.g. matrix
    palette skinning, realistic fur, etc.)

10
Hardware
R300 The 3D Pipeline
  • Vertex processing

11
Hardware
R300 The 3D Pipeline
  • Vertex Processing
  • Vertex shader 2.0 support
  • Increased number of instructions (1024 in a
    single pass)
  • Flow control support

12
Hardware
R300 The 3D Pipeline
  • Pixel rendering pipeline

Eight 128-bit floating point pixel rendering
pipelines
13
Hardware
R300 The 3D Pipeline
  • Pixel rendering pipeline

Photorealistic images need FP Color
14
Hardware
R300 The 3D Pipeline
  • Pixel Shader 2.0
  • 16 textures per pass
  • 160 Pixel Shader instructions per pass (R300)

15
Hardware
R300 The 3D Pipeline
  • Pixel Shader 2.0

R300 allows to compile and run the code on the
GPU itself
ATI's RenderMonkey Application will take code
from any high level language and compile it to
R300 assembly
16
Hardware
R300 The 3D Pipeline
  • Pixel Shader 2.0
  • 3D Games are currently far from being lifelike
  • Low-quality textures
  • Lack of polygon details
  • But
  • the major limitation is lighting!

17
Hardware
R300 The 3D Pipeline
  • Pixel Shader 2.0
  • With 32-bit integer pipeline each RBGA value was
    limited to 8-bits
  • E.g. increasing the light source brightness (see
    image)

18
Hardware
R300 The 3D Pipeline
  • Pixel Shader 2.0
  • the entire scene gets brighter. The brightest
    light sources in the scene are no longer
    proportionally brighter than the rest of the
    scene

19
Hardware
R300 The 3D Pipeline
  • Pixel Shader 2.0
  • The same applies to when darkening a scene

20
Hardware
R300 The 3D Pipeline
  • Pixel Shader 2.0
  • The same scene resulting from the use of floating
    point color (offering a wide range of brightness
    levels)

21
Hardware
R300 The 3D Pipeline
  • R300 3D Pipeline
  • Multisampling
  • Supersampling
  • Fixed anisotropic Filtering
  • Other features
  • Video through the 3D Pipeline

22
Shading Languages
  • Rendering pipeline (on current GPUs)
  • Low-level languages (Assembly-like)
  • Vertex programming
  • Fragment programming
  • High-level shading languages (Languages)

23
Shading Languages
Rendering pipeline
  • Traditional OpenGL Pipeline (by Kurt Akeley)

24
Shading Languages
Rendering pipeline
  • Programmable Pipeline
  • Most parts of the rendering pipeline can be
    programmed
  • Shading programs to change hardware behavior
  • Transform and lighting
  • vertex shaders / vertex programs
  • Fragment processing
  • pixel shaders / fragment programs
  • History from fixed-function pipeline to
    configurable pipeline
  • Steps towards programmability

25
Shading Languages
Rendering pipeline
  • Programmable Pipeline

26
Shading Languages
Rendering pipeline
  • Issues
  • How are vertex and pixel shaders specified?
  • Low-level, assembly-like
  • High-level language
  • Data flow between components
  • Per-vertex data (for vertex shader)
  • Per-fragment data (for pixel shader)
  • Uniform (constant) data e.g. modelview matrix,
    material parameters

27
Shading Languages
Low-level languages
  • Low-level languages
  • Similarity to assembler
  • Close to hardware functionality
  • Input vertex/fragment attributes
  • Output new vertex/fragment attributes
  • Sequence of instructions on registers
  • Very limited control flow (if any)
  • Platform-dependent

28
Shading Languages
Low-level languages
  • Low-level languages
  • Current low-level APIs
  • OpenGL extensions GL_ARB_vertex_program,
    GL_ARB_fragment_program
  • DirectX 9 Vertex Shader 2.0, Pixel Shader 2.0
  • Older low-level APIs
  • DirectX 8.x Vertex Shader 1.x, Pixel Shader 1.x
  • OpenGL extensions GL_ATI_fragment_shader,
    GL_NV_vertex_program,

29
Shading Languages
Low-level languages
  • Low-level languages
  • Low-level APIs offer best performance
    functionality
  • Help to understand the graphics hardware (ATIs
    r300, NVIDIAs nv30, ...)
  • Help to understand high-level APIs (Cg, HLSL,
    ...)
  • Much easier than directly specifying configurable
    graphics pipeline (e.g. register combiners)

30
Shading Languages
Low-level languages (vertex programming)
  • Vertex Programming applications
  • Customized computation of vertex attributes
  • Computation of anything that can be interpolated
    linearly between vertices
  • Limitations
  • Vertices can neither be generated nor destroyed
  • No information about topology or ordering of
    vertices is available

31
Shading Languages
Low-level languages (vertex programming - OpenGL)
  • OpenGL GL_ARB_vertex_program
  • Circumvents the traditional vertex pipeline
  • What is replaced by a vertex program?
  • Vertex transformations
  • Vertex weighting/blending
  • Normal transformations
  • Color material
  • Per-vertex lighting
  • Texture coordinate generation
  • Texture matrix transformations
  • Per-vertex point size computations
  • Per-vertex fog coordinate computations
  • Client-defined clip planes

32
Shading Languages
Low-level languages (vertex programming - OpenGL)
  • What is not replaced?
  • Clipping to the view frustum
  • Perspective divide (division by w)
  • Viewport transformation
  • Depth range transformation
  • Front and back color selection
  • Clamping colors
  • Primitive assembly and per-fragment operations
  • Evaluators

33
Shading Languages
Low-level languages (vertex programming - OpenGL)
  • Machine Model

34
Shading Languages
Low-level languages (vertex programming - OpenGL)
  • Variables
  • Vertex attributes (vertex.position, vertex.color,
    )
  • Explicit binding
  • ATTRIB name vertex.
  • State variables
  • state.material. (diffuse, ...), state.matrix.
    (modelviewn, ),
  • Program results and output variables
  • result.color. (primary, secondary, ),
    result.position,
  • OUTPUT name result.

35
Shading Languages
Low-level languages (vertex programming - OpenGL)
  • Instructions
  • Instruction set
  • 27 instructions
  • Operate on floating-point scalars or 4-vectors
  • Basic syntax
  • OP destination , source1 , source2 ,
    source3 comm.
  • Example
  • MOV result.position, vertex.position sets
    result.position
  • Numerical operations ADD, MUL, LOG, EXP,
  • Modifiers swizzle, negate, mask, saturation

36
Shading Languages
Low-level languages (vertex programming - OpenGL)
  • Example Transformation to clip coordinates
  • !!ARBvp1.0
  • ATTRIB pos vertex.position
  • ATTRIB col vertex.color
  • OUTPUT clippos result.position
  • OUTPUT newcol result.color
  • PARAM modelviewproj4 state.matrix.mvp
  • DP4 clippos.x, modelviewproj0, pos
  • DP4 clippos.y, modelviewproj1, pos
  • DP4 clippos.z, modelviewproj2, pos
  • DP4 clippos.w, modelviewproj3, pos
  • MOV newcol, col
  • END

37
Shading Languages
Low-level languages (vertex programming DirectX
9)
  • DirectX 9 Vertex Shader 2.0
  • Vertex Shader 2.0 introduced in DirectX 9.0
  • Similar functionality and limitations as
    GL_ARB_vertex_program
  • Similar registers and syntax
  • Additional functionality static flow control
  • Control of flow determined by constants (not by
    per-vertex attributes)
  • Conditional blocks, repetition, subroutines

38
Shading Languages
Low-level languages (fragment programming)
  • Fragment Programming applications
  • Customized computation of fragment attributes
  • Computation of anything that should be computed
    per pixel
  • Limitations
  • Fragments cannot be generated
  • Position of fragments cannot be changed
  • No information about geometric primitive is
    available

39
Shading Languages
Low-level languages (fragment programming -
OpenGL)
  • OpenGL GL_ARB_fragment_program
  • Circumvents the traditional fragment pipeline
  • What is replaced by a pixel program?
  • Texturing
  • Color sum
  • Fog
  • for the rasterization of points, lines, polygons,
    pixel rectangles, and bitmaps
  • What is not replaced?
  • Fragment tests (alpha, stencil, and depth tests)
  • Blending

40
Shading Languages
Low-level languages (fragment programming -
OpenGL)
  • Machine Model

41
Shading Languages
Low-level languages (fragment programming -
OpenGL)
  • Instructions
  • Instruction set
  • Similar to vertex program instructions
  • Operate on floating-point scalars or 4-vectors
  • Texture sampling
  • OP destination, source, textureindex, type
  • Texture types 1D, 2D, 3D, CUBE, RECT
  • TEX result.color, fragment.texcoord1,
    texture0, 2D
  • samples 2D texture in unit 0 with
    texturecoordinate set 1 and writes the result in
    result.color

42
Shading Languages
Low-level languages (fragment programming -
OpenGL)
  • Example
  • !!ARBfp1.0
  • ATTRIB tex fragment.texcoord
  • ATTRIB col fragment.color.primary
  • OUTPUT outColor result.color
  • TEMP tmp
  • TXP tmp, tex, texture0, 2D
  • MUL outColor, tmp, col
  • END

43
Shading Languages
Low-level languages (fragment programming
DirectX 9)
  • DirectX 9 Pixel Shader 2.0
  • Pixel Shader 2.0 introduced in DirectX 9.0
  • Similar functionality and limitations as
    GL_ARB_fragment_program
  • Similar registers and syntax

44
Shading Languages
Low-level languages (fragment programming
DirectX 9)
  • Pixel Shader 2.0
  • Declaration of texture samplers
  • dcl_type s
  • Declaration of input color and texture
    coordinates
  • dcl v.mask
  • dcl t.mask
  • Instruction set
  • Operate on floating-point scalars or 4-vectors
  • op destination , source1 , source2 ,
    source3
  • Texture sampling
  • op destination, source, sn

45
Shading Languages
Low-level languages (fragment programming
DirectX 9)
  • Example
  • ps_2_0
  • dcl_2d s0
  • dcl t0.xy
  • texld r1, t0, s0
  • mov oC0, r1

46
Shading Languages
High-level shading languages
  • Why?
  • Avoids programming, debugging, and maintenance of
    long assembly shaders
  • Easy to read
  • Easier to modify existing shaders
  • Automatic code optimization
  • Wide range of platforms
  • Shaders often inspired RenderMan shading language

47
Shading Languages
High-level shading languages
  • Assembly vs. High-Level Language

Assembly dp3 r0, r0, r1 max r1.x, c5.x,
r0.x pow r0.x, r1.x, c4.x mul r0, c3.x,
r0.x mov r1, c2 add r1, c1, r1 mad r0, c0.x,
r1, r0 ...
  • High-Level Language
  • float4 cSpec pow(max(0, dot(Nf, H)),
    phongExp).xxx
  • float4 cPlastic Cd (cAmbi cDiff) Cs
    cSpec
  • Blinn-Phong shader expressed in both assembly and
    high-level language

48
Shading Languages
High-level shading languages
  • Data flow through Pipeline
  • Vertex shader program
  • Fragment shader program
  • Connectors

49
Shading Languages
High-level shading languages
  • High-Level Shading Languages
  • Cg (C for Graphics)
  • By NVIDIA
  • HLSL (High-level shading language)
  • Part of DirectX 9 (Microsoft)
  • OpenGL 2.0 Shading Language
  • Proposal by 3D Labs

50
Shading Languages
High-level shading languages (Cg)
  • Cg
  • Typical concepts for a high-level shading
    language
  • Language is (almost) identical to DirectX HLSL
  • Syntax, operators, functions from C/C
  • Conditionals and flow control
  • Backends according to hardware profiles
  • Support for GPU-specific features (compare to
    low-level)
  • Vector and matrix operations
  • Hardware data types for maximum performance
  • Access to GPU functions mul, sqrt, dot,
  • Mathematical functions for graphics, e.g. reflect
  • Profiles for particular hardware feature sets

51
Shading Languages
High-level shading languages (Cg)
  • Workflow

52
Shading Languages
High-level shading languages (Cg)
  • Phong Shading in Cg Vertex Shader
  • First part of pipeline
  • Connectors what kind of data is transferred to /
    from vertex program?
  • Actual vertex shader

53
Shading Languages
High-level shading languages (Cg)
  • Phong Shading in Cg Connectors
  • Describe input and output
  • Varying data
  • Specified as struct
  • Extensible
  • Adapted to respective implementation
  • Only important data is transferred
  • Pre-defined registers POSITION, NORMAL, ...

54
Shading Languages
High-level shading languages (Cg)
  • Phong Shading in Cg Connectors
  • // data from application to vertex program
  • struct vertexIn
  • float3 Position POSITION // pre-defined
    registers
  • float4 UV TEXCOORD0
  • float4 Normal NORMAL
  • // vertex shader to pixel shader
  • struct vertexOut
  • float4 HPosition POSITION
  • float4 TexCoord TEXCOORD0
  • float3 LightVec TEXCOORD1
  • float3 WorldNormal TEXCOORD2
  • float3 WorldPos TEXCOORD3
  • float3 WorldView TEXCOORD4

55
Shading Languages
High-level shading languages (Cg)
  • Phong Shading in Cg Vertex Shader
  • Vertex shader is a function that requires
  • Varying application-to-vertex input parameters
  • Vertex-to-fragment output structure
  • Optional uniform input parameters
  • Constant for a larger number of primitives
  • Passed to the Cg program by the application
    through the runtime library
  • Vertex shader for Phong shading
  • Compute position, normal vector, viewing vector,
    and light vector in world coordinates

56
Shading Languages
High-level shading languages (Cg)
  • Phong Shading in Cg Vertex Shader
  • // vertex shader
  • vertexOut mainVS(vertexIn IN, // vertex input
    from app
  • uniform float4x4 WorldViewProj,// constant
    parameters
  • uniform float4x4 WorldIT, // from app various
  • uniform float4x4 World, // transformation
  • uniform float4x4 ViewIT, // matrices and a
  • uniform float3 LightPos // point-light source
  • )
  • vertexOut OUT // output of the vertex shader
  • OUT.WorldNormal mul(WorldIT, IN.Normal).xyz
  • // position in object coords
  • float4 Po float4(IN.Position.x,IN.Position.y,
    IN.Position.z,1.0)
  • float3 Pw mul(World, Po).xyz // pos in world
    coords

57
Shading Languages
High-level shading languages (Cg)
  • Phong Shading in Cg Vertex Shader
  • OUT.WorldPos Pw // pos in world coords
  • OUT.LightVec LightPos - Pw // light vector
  • OUT.TexCoord IN.UV // original tex coords
  • // view vector in world coords
  • OUT.WorldView normalize(ViewIT3.xyz - Pw)
  • // pos in clip coords
  • OUT.HPosition mul(WorldViewProj, Po)
  • return OUT // output of vertex shader

58
Shading Languages
High-level shading languages (Cg)
  • Phong Shading in Cg Pixel Shader
  • Second part of pipeline
  • Connectors from vertex to pixel shader, from
    pixel shader to frame buffer
  • Actual pixel shader

59
Shading Languages
High-level shading languages (Cg)
  • Phong Shading in Cg Pixel Shader
  • Pixel shader is a function that requires
  • Varying vertex-to-fragment input parameters
  • Fragment-to-pixel output structure
  • Optional uniform input parameters
  • Constant for a larger number of fragments
  • Passed to the Cg program by the application
    through the runtime library
  • Pixel shader for Phong shading
  • Normalize light, viewing, and normal vectors
  • Compute halfway vector
  • Add specular, diffuse, and ambient contributions

60
Shading Languages
High-level shading languages (Cg)
  • Phong Shading in Cg Pixel Shader
  • // final pixel output
  • // data from pixel shader to frame buffer
  • struct pixelOut
  • float4 col COLOR
  • // pixel shader
  • pixelOut mainPS(vertexOut IN, // input from
    vertex shader
  • uniform float SpecExpon, // constant parameters
    from
  • uniform float4 AmbiColor, // application
  • uniform float4 SurfColor,
  • uniform float4 LightColor
  • )
  • pixelOut OUT // output of the pixel shader
  • float3 Ln normalize(IN.LightVec)
  • float3 Nn normalize(IN.WorldNormal)
  • float3 Vn normalize(IN.WorldView)

61
Shading Languages
High-level shading languages (Cg)
  • Phong Shading in Cg Pixel Shader
  • // scalar product between light and normal
    vectors
  • float ldn dot(Ln,Nn)
  • // scalar product between halfway and normal
    vectors
  • float hdn dot(Hn,Nn)
  • // specialized lit function computes weights
    for
  • // diffuse and specular parts
  • float4 litV lit(ldn,hdn,SpecExpon)
  • float4 diffContrib
  • SurfColor ( litV.y LightColor
    AmbiColor)
  • float4 specContrib litV.ylitV.z
    LightColor
  • // sum of diffuse and specular contributions
  • float4 result diffContrib specContrib
  • OUT.col result
  • return OUT // output of pixel shader
Write a Comment
User Comments (0)
About PowerShow.com