Shaders Traditional Rendering Pipeline

Shaders Traditional Rendering Pipeline

Shaders (some slides taken from David M. course) Doron Nussbaum Doron Nussbaum COMP 3501 - Shaders 1 Traditional Rendering Pipeline • Traditional pipeline (older graphics Vertex Pixel Operations Operations cards) restricts developer to texture and the 3-term lighting model Rasterization Transformation and • Pixel information was interpolated to Lighting vertices Pixel Colouring Texture Mapping Primitive • Shaders Assembly – Lift the restrictions Per pixel – Allow developers to manipulate operation (Blending) outcome Viewport Culling • Result Clipping – vertex shaders Frame buffer – Pixel/fragment shaders operations Doron Nussbaum COMP 3501 - Shaders 2 Vertex Shader • Act in parallel across all vertices • Responsible for transforming – Initial lighting of vertex Transformation and Vertex Shader – Vertex transformation Lighting – Normal transformation & normalization – Texture coordinate generation & transformation Primitive Assembly • Compute temporary variables to be consumed by fragment shader Viewport Culling Clipping • Per-vertex processing – only information from one vertex available Doron Nussbaum COMP 3501 - Shaders 3 Fragment (pixel) Shader • Act in parallel across all fragments Rasterization • Responsible for computing depth and color information Pixel Colouring Texture Mapping Pixel Shader • Only information from current fragment available Per pixel operation – Operations on interpolated values (Blending) – Texture access (multipass shaders) Frame buffer • Produces Colour operations Doron Nussbaum COMP 3501 - Shaders 4 Shading languages (last) • High level shading languages available • Three main ones: – Cg (NVIDIA's "C for graphics") – HLSL (MS's "high level shading language") – GLSL (OpenGL's shading language) • All quite similar, differ in details of API • DirectX – shader code is added during runtime – Shader code is written in a separate file – Requires “transfer” of data to the shader code Doron Nussbaum COMP 3501 - Shaders 5 The Graphics Pipeline Transformations Vertex Clipping & Lighting Shading Rasterization and Interpolation Texturin Frame Buffer Pixel Shading g Operations Doron Nussbaum COMP 3501 - Shaders 6 6 Vertex Shader(s) • Replaces fixed functionality of vertex processor • Normally get: – vertex transformation – normal transformation – illumination • Now, can write programs that do anything – same program on all vertices Doron Nussbaum COMP 3501 - Shaders 7 7 Vertex Shaders • Input: – Built-in attributes • color • normal • position • texture coordinate – User-defined attributes – Texture maps Doron Nussbaum COMP 3501 - Shaders 8 8 Vertex Shaders • Transform and light a single vertex • Output: – position – color – user-defined variables (for fragment shader) Doron Nussbaum COMP 3501 - Shaders 9 9 Vertex Shader • Changing vertex position in a shader – create simple animations • Use time as input, compute x(t), θ(t) – perform displacement mapping (to mesh resolution) – Generally, modify the geometry at runtime Doron Nussbaum COMP 3501 - Shaders 10 10 Rasterization and Interpolation • Turns the space between vertices into fragments • Computes input values for fragments by interpolating values from vertices Doron Nussbaum COMP 3501 - Shaders 11 11 Pixel Shader • Operates on fragments • Input: – color – texture coordinates – user-defined variables (from vertex shader) – texture maps • Cannot access other pixels – although, texture can be exploited for this Doron Nussbaum COMP 3501 - Shaders 12 12 Pixel Shader • Output: – color (RGBA) – depth • Note, cannot change position at this point • But, can compute color in sophisticated way, in parallel at each pixel Doron Nussbaum COMP 3501 - Shaders 13 13 Shader input • Previously mentioned inputs available per- vertex (per-pixel) • Also have shader parameters that can be set (like global variables) – E.g., direction of sun, location of viewer (same for all primitives) – E.g., specific parameters (material glossiness, what texture to use) Doron Nussbaum COMP 3501 - Shaders 14 14 Phong and Gouraud Shading • Traditional Gouraud shading: per-vertex lighting, interpolated to pixels • Various problems: – Visible mesh boundaries – Strange effects at low mesh resolution • Phong shading: normals interpolated, per- pixel lighting: done in pixel shader Doron Nussbaum COMP 3501 - Shaders 15 15 Render to Texture • Shaders are “memoryless” • Also, limit to how many instructions in shader (varies with card) • Can render display buffer to texture, then use texture as input to later (or same) shader – Or, just display texture on object • eg, mirror Doron Nussbaum COMP 3501 - Shaders 16 16 Render to Texture • Simple postprocessing effects: – render to texture – apply pixel shader involving texture – draw texture to screen • Create quad covering screen, apply texture • Color modification, darken/brighten, fade/dissolve Doron Nussbaum COMP 3501 - Shaders 17 17 Shaders in DirectX • Write a single .fx file with: – list of shader parameters – structure definitions for shader I/O – vertex shader – pixel shader – technique and pass definition Doron Nussbaum COMP 3501 - Shaders 18 18 Data flow Vertex Vertex Shader Shader Input Pixel Pixel Shader Shader Input Pixel Shader Doron Nussbaum COMP 3501 - Shaders 19 Output 19 Shader I/O Semantics • Markers that suggest how data is passed into and out of the shaders – e.g., put "position" data in POSITION semantic • Example vertex shader input: struct vs_in { float4 pos : POSITION0; float4 col : COLOR0; }; Doron Nussbaum COMP 3501 - Shaders 20 20 Available semantics • Differ depending on what the structure is – position semantic not available for pixel shader output, for example • TEXCOORD semantic for user-defined variables • Can be used multiple times: TEXCOORD0 for first, then TEXCOORD1, TEXCOORD2... Doron Nussbaum COMP 3501 - Shaders 21 21 Vertex Shader Input Semantics • POSITION – vertex location in space • COLOR – for the vertex color • NORMAL – surface normal • TEXCOORD – texture coordinates, also "generic" • PSIZE – point size (used with point sprites, chiefly for particle system effects) Doron Nussbaum COMP 3501 - Shaders 22 22 Vertex Shader Output Semantics • subset of the inputs • POSITION •COLOR •TEXCOORD • PSIZE Doron Nussbaum COMP 3501 - Shaders 23 23 Pixel Shader Input Semantics • Only COLOR and TEXCOORD are allowed • Note: considered good practice to use vertex shader output as pixel shader input – but permitted semantics different! – notably, POSITION required for vs_out, prohibited by ps_in • "Illegal" semantics ignored by compiler in definition, but DO NOT USE in ps code Doron Nussbaum COMP 3501 - Shaders 24 24 Pixel Shader Output Semantics • COLOR • DEPTH – depth value for depth test • In routine operation, one color value (ultimate pixel color) and one depth value • Can have more outputs if multipass shader, unconventional operation Doron Nussbaum COMP 3501 - Shaders 25 25 Techniques and Passes technique mytechnique { // one or more passes, ordinarily one pass mypass { vertexshader = compile vs_1_1 myvs(); pixelshader = compile ps_2_0 myps(); } } Doron Nussbaum COMP 3501 - Shaders 26 26 Shader Code • Written in C-like HLSL – if, for, = for assignment... • scalar, vector, and matrix types – int, float – float2, float3, float4 – float4x4 • Texture type (2D texture) Doron Nussbaum COMP 3501 - Shaders 27 27 Intrinsic Functions • Some functions are built in • Various mathematical functions – math (exp, pow, log) – trigonometric (sin, cos, tan, asin...) – vector (dot, cross) – "housekeeping" (clamp, lerp, abs, max) • Functions for dealing with texture • Partial list (common ones) in textbook Doron Nussbaum COMP 3501 - Shaders 28 28 Shader Code • Take control of the pipeline • Very abstract right now, but examples to come in the following weeks –texture – procedural texture – basic lighting (Phong shading) – specialized lighting – particle systems Doron Nussbaum COMP 3501 - Shaders 29 29 Connecting your Shader • May need a custom vertex format, if your vertex shader input is different from all existing vertex formats • Set all your parameters • Link to project, configure Doron Nussbaum COMP 3501 - Shaders 30 30 Recap • Can program parts of the graphics pipeline – vertex shader • output is position, color, texture coordinates – pixel shader • output is color • for DirectX, use HLSL, a C-like language with many built-in functions Doron Nussbaum COMP 3501 - Shaders 31 Recap • Things to know: – graphics pipeline • tasks of vertex and pixel shaders • rasterization and interpolation – vertex and pixel shader input and output semantics • To learn by practice: writing your own shaders Doron Nussbaum COMP 3501 - Shaders 32.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    16 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us