Polygon Shading

29
Polygon Shading

description

Polygon Shading. 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…. 2. 1. 3. Triangles. We chose triangles as our area-based drawing primitive Always convex - PowerPoint PPT Presentation

Transcript of Polygon Shading

Page 1: Polygon Shading

Polygon Shading

Page 2: Polygon Shading

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…

Page 3: Polygon Shading

Triangles

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

– Easy to shade using a scanline algorithm, as we’ll see

2

3

1

Page 4: Polygon Shading

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

Page 5: Polygon Shading

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

Page 6: Polygon Shading

Per-object Shading

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

Page 7: Polygon Shading

Per-object Shading

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

Page 8: Polygon Shading

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 photo-realistic graphics is the goal] and therefore is rarely used

• The only advantage is that object colors can be specified off-line.

Page 9: Polygon Shading

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

Page 10: Polygon Shading

Per-triangle Shading

• Then, once we have the triangles we can shade each one individually

Page 11: Polygon Shading

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

Page 12: Polygon Shading

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)

Page 13: Polygon Shading

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

Page 14: Polygon Shading

Vertex Color

• What exactly does the vertex color represent and how is it represented?

• Use of triangles to represent a curved (or any) 3D 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

Page 15: Polygon Shading

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)

Page 16: Polygon Shading

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)

Page 17: Polygon Shading

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

Page 18: Polygon Shading

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

Page 19: Polygon Shading

Per-vertex (Gouraud) Shading

P0(R0, G0, B0)

P1(R1, G1, B1)

P2(R2, G2, B2)

2

,2

,2

101010 BBGGRR

2

,2

,2

020202 BBGGRR

2

,2

,2

212121 BBGGRR

Interpolate between two end points of line segment

Page 20: Polygon Shading

Triangle Shading

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

Page 21: Polygon Shading

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

Page 22: Polygon Shading

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

Page 23: Polygon Shading

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

Page 24: Polygon Shading

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

Page 25: Polygon Shading

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

Page 26: Polygon Shading

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

Page 27: Polygon Shading

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

Surface (triangle facet)

Surface norm

al

Light source

Page 28: Polygon Shading

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)

uv

(u X v) would be pointing out of the page

Page 29: Polygon Shading

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