Polygon Shading Polygon Shading Assigning color to a

  • Slides: 29
Download presentation
Polygon Shading

Polygon Shading

Polygon Shading • Assigning color to a shape to make graphical scenes look realistic,

Polygon Shading • Assigning color to a shape to make graphical scenes look realistic, or artistic, or whatever effect we’re attempting to achieve • But first we must digress…

Triangles • We chose triangles as our area-based drawing primitive – Always convex 2

Triangles • We chose triangles as our area-based drawing primitive – Always convex 2 1 3 – Easy to shade using a scanline algorithm, as we’ll see

Shading Triangles • To shade the interior of a triangle we need to access

Shading Triangles • To shade the interior of a triangle we need to access each pixel within the interior – We can do this using something called barycentric coordinates • They provide a parametric form of a triangle – But, as we’ll see, there is an easier way • Once we can do this we can assign a color to each pixel

Shading • There are two basic methods for assigning color to the interior pixels

Shading • There are two basic methods for assigning color to the interior pixels of an object (shading the object) • Constant shading (with 2 sub-methods) – Per object – Per triangle • Pixel based shading – Per vertex

Per-object Shading • Recall the quadrilateral (or any general polygon with more than 3

Per-object Shading • Recall the quadrilateral (or any general polygon with more than 3 sides) which we decided not to use

Per-object Shading • To shade it in a per-object fashion we merely assign every

Per-object Shading • To shade it in a per-object fashion we merely assign every pixel within the polygon the same RGB color value

Per-object Shading • Efficient scan line algorithms for such shading are difficult, as previously

Per-object Shading • Efficient scan line algorithms for such shading are difficult, as previously discussed • Furthermore, this method does not produce very satisfying results [if photorealistic graphics is the goal] and therefore is rarely used • The only advantage is that object colors can be specified off-line.

Per-triangle Shading • In this method we do first divide the polygon into triangles

Per-triangle Shading • In this method we do first divide the polygon into triangles • Various techniques exist for performing this operation (e. g. Delauney triangulation) • It is generally performed off line during the modeling of the objects

Per-triangle Shading • Then, once we have the triangles we can shade each one

Per-triangle Shading • Then, once we have the triangles we can shade each one individually

Per-triangle Shading • Efficient scan line algorithms for such shading are available, as we

Per-triangle Shading • Efficient scan line algorithms for such shading are available, as we will see – At very least the barycentric coordinates will help us • Results are better than with per-object shading but still not great • Where to store the color for each triangle may be problematic in that most efficient drawing systems allow triangle vertices to be reused for neighboring triangle specification

Triangle Vertices • Rather than specify 9 vertices for these 3 triangles • We

Triangle Vertices • Rather than specify 9 vertices for these 3 triangles • We specify the first 3 then let the next triangle share 2 • Using a prescribed order we get a triangle strip • Long strips save a lot of resources (time, space)

Triangle Vertices and Color • But, given a triangle strip, in which vertex do

Triangle Vertices and Color • But, given a triangle strip, in which vertex do you store the color for a given triangle when using per-triangle shading? • Specify a convention and stick to it – e. g. the last vertex specified

Vertex Color • What exactly does the vertex color represent and how is it

Vertex Color • What exactly does the vertex color represent and how is it represented? • Use of triangles to represent a curved (or any) 3 D surface is called tessellation and results in a faceted model of the surface – Basically, this saves memory and processing time • Each surface will have at every triangle (point) – an orientation – a reflectance model – a natural color – Possibly other attributes

Vertex Color • Perhaps the most important of these attributes is the orientation •

Vertex Color • Perhaps the most important of these attributes is the orientation • The orientation is a unit vector that is normal (perpendicular) to the surface at the given point • The normals are used to determine the displayed color of an object after the lighting and viewer parameters have been defined (at run time)

Surface Normals • To get the surface normal at the triangle vertices we average

Surface Normals • To get the surface normal at the triangle vertices we average the normals of the triangles that meet at the vertex • This method of assigning vertex normals is the basis for Gouraud Shading (Henri Gouraud)

Per-vertex (Gouraud) Shading • Points on a given triangle are assigned a color that

Per-vertex (Gouraud) Shading • Points on a given triangle are assigned a color that is a linear interpolation of the three vertex colors (as determined by their normals, color, surface material, the lighting model, and the viewer model) • Gouraud does not care where the vertex colors come from, just that they are there

Per-vertex (Gouraud) Shading • Gouraud shading is really nothing more than a linear interpolation

Per-vertex (Gouraud) Shading • Gouraud shading is really nothing more than a linear interpolation of the 3 vertex colors • Thus, all we have to do is interpolate the colors along the three edges – You can use the Bresenham algorithm for this • Then interpolate colors along scan lines

Per-vertex (Gouraud) Shading P 1(R 1, G 1, B 1) Interpolate between two end

Per-vertex (Gouraud) Shading P 1(R 1, G 1, B 1) Interpolate between two end points of line segment P 2(R 2, G 2, B 2) P 0(R 0, G 0, B 0)

Triangle Shading Per-triangle (constant) shading Per-vertex (Gouraud) shading

Triangle Shading Per-triangle (constant) shading Per-vertex (Gouraud) shading

Mach Bands • Linear interpolation (Gouraud) provides realistic looking smooth surfaces most of the

Mach Bands • Linear interpolation (Gouraud) provides realistic looking smooth surfaces most of the time • But, Gouraud shading is not always good enough to fool the human visual system • Due to the way cones in the eye are connected to the optic nerve, the human visual system has great sensitivity to small intensity changes – This is due to a property called lateral inhibition • It is especially apparent at sharp intensity changes and changes in intensity gradient direction

Mach Bands • The human visual system tends to “overshoot” intensities at transition points

Mach Bands • The human visual system tends to “overshoot” intensities at transition points • Although this quadrilateral is made of two triangles that share an edge, we still perceive a bright line Mach Band effect

Mach Bands • The answer to this phenomenon is to invent algorithms that provide

Mach Bands • The answer to this phenomenon is to invent algorithms that provide even more smoothness in intensity transitions… • …which results in greater computational cost

Phong Shading • Phong took Gouraud’s ideas a step further • Rather than using

Phong Shading • Phong took Gouraud’s ideas a step further • Rather than using the 3 vertex normals to define 3 vertex colors then interpolate the interior points of the triangle based on those colors, he interpolates the surface normals at each point then computes the color • This results in – Reduced [but not eliminated] Mach Banding – More accurate representation of specular highlights – More computational requirements

Lighting • The modeler assigns colors to vertices off line (during the design process)

Lighting • The modeler assigns colors to vertices off line (during the design process) • The shader combines the vertex color and the lighting specification to determine a render color for a vertex at run time • The simplest lighting model is a cosine function

Cosine model lighting • Lambertian reflector – Reflected energy from a small surface area

Cosine model lighting • Lambertian reflector – Reflected energy from a small surface area in a particular direction is proportional to the cosine of the angle between that direction and the surface normal – It is not dependent on the position of the viewer

Cosine model lighting • The cosine can be computed by taking the vector dot

Cosine model lighting • The cosine can be computed by taking the vector dot product between the surface normal and the light source – Just make sure that both are normalized to unit vectors l a Ligh t so urce e ac f r Su Surface (triangle facet) rm no

Calculating surface normals • You already know how to compute the surface normal (orientation)

Calculating surface normals • You already know how to compute the surface normal (orientation) for a triangle – Use the vector cross product – Make sure you know which direction your triangles are specified in (clockwise or counter -clockwise) (u X v) would be pointing out of the page v u

Assignment • For the sphere model, do a per triangle shader – Calculate the

Assignment • For the sphere model, do a per triangle shader – Calculate the surface normal for each triangle – Calculate the color of the triangle • Set a light source (x, y, z) • Set the color to R=G=B=dot(normal, light) • Use your Bresenham code to scan each triangle into a scratch buffer • Copy the scratch buffer into the on screen render buffer • Gouraud’s technique (per vertex) is more difficult – Have to find a way to compute the normal at each vertex then compute the dot product with the light source – think about how you might do it