460 likes | 684 Views
CSPC 352: Computer Graphics. Chapter 6: Lighting and Shading. Overview. Local and global illumination Phong reflectance model (local illumination) Flat, Gouraud, and Phong Shading on a polygonal mesh Surface subdivisions Shading in OpenGL. Need for shading.
E N D
CSPC 352: Computer Graphics Chapter 6: Lighting and Shading
Overview • Local and global illumination • Phong reflectance model (local illumination) • Flat, Gouraud, and Phong • Shading on a polygonal mesh • Surface subdivisions • Shading in OpenGL
Need for shading • How do you make something look 3D? • Shading that is appropriate for the lighting is the primary cue to 3D appearance • [What are some other cues?]
Illumination models • General approach: • model the world • simulate physics • Global illumination models (ray tracing, radiosity) determine shading by bouncing light around an entire environment (too slow for interactive graphics, usually [1] [2]) • Local illumination models consider only the surface, light direction, and viewing direction
Local illumination • To make lighting fast, we will initially restrict our attention to: • Light source, one surface, and viewer (ignore inter-object reflections, shadows) • Ambient, diffuse, and specular reflection (ignore transparency, refraction, reflection, …)
Light sources • In general, a light source is a rather complicated thing. It can emit different amounts of light for each • Location (x, y, z) • Direction (, f) • Wavelength (l) • Illumination function:I(x, y, z, , f, l) • Examples: ambient, point, area, spot,distant, …
Colored lights • Intensity of emitted light can also be a function of wavelength • We usually model as I = [Ir, Ig, Ib] components • Some experiments have been done with a whole spectrum of color values, giving more realistic results in some cases
Ambient light • Intensity doesn’t vary with x, y, z, , f • I = [Iar, Iag, Iab]
Point lights • Point lights have a location (so farther objects receive less light) but are not directional • I(p0) = [Ir(p0), Ib(p0), Ig(p0)] • How would you compute the illumination at point p? • Illumination proportional to inverse square of distance • I(p, p0) = (1/d2) [Ir(p0), Ib(p0), Ig(p0)]
Limitations of point lights • Usually result in artificiallyhigh-contrast images • Can generate umbra (full shadow) but notpenumbra (partial shadow) • Area lights generate softershadows, but are usuallyused only in non-interactive graphics (e.g. raytracing or radiosity)
Distant (directional) lights • Light point lights, but • Without attenuation based on the distance • Without difference in direction (parallel rays) • Location of light source becomes [x, y, z, 0]; noattenuation • More efficient to computethan point sources
Spotlights • Directional, i.e. light is emitted in a narrow range of angles, q • More realistic spotlights wouldmodel a gradual fall-off of light • E.g. cosef= (s • l)e if s is direction ofsource, l direction to source, both unit vectors
Illumination and shading • How do these light sources affect brightness of a surface point? • Most commonly used model for interactive graphics: Phong Illumination Model • Involves terms: • Ambient • Diffuse • Specular • It is a (simplified) model of the physics of reflection
Vectors used by Phong model • The directions used by the phong model • n: surface outward normal • v: direction to viewer • l: direction to light source • r: reflection direction • Since these are directions, theyare unit vectors.
Ambient term of Phong model • An object has an ambient reflectivity coefficient, ka • A light source gives off a certain amount of ambient light, La • Total ambient illumination: Ia = ka La • (For colored light, we repeat this computation for R, G, and B ambient light values and reflectivity coefficients)
Diffuse term • A perfectly diffuse reflector is so rough that it scatters light equally in all directions • But note that when thelight comes in at an angle,the same energy is spreadout over larger area • Such surfaces are calledLambertian surfaces (obeying Lambert’s Law)
Diffuse shading • At noon, illum. is 1 • As the angle q (u infigure) decreases, illumination goes to zero • Illumination is proportional to cos(q) (Lambert’s law) • cos(q) = l • n • Id = kdl • n Ld
Specular Term • Specular term adds highlights in the reflection direction • Note that the smoother and shinier the object, the tigher and brighter thehighlight • Highlight power falls as viewer v moves away from reflection dir, r. (cos f = v • r) • Modeled as cosaf, a is shininess coefficient (1..200) • Is = ks Ls (r • v)a
Phong illumination model • Phong illumination model: I = Ambient + Diffuse + Specular = Ia + Id + Is = ka La + kd Ldl • n + ks Ls (r • v)a • May add light attenuation term 1/(a+bd+cd2) ( ka La + kdl • n Ld) + ks Ls (r • v)a • Parameters needed: • Light: La, Ld, Ls for each light • Surface: ka, kd, ks, a • Repeat for each color component, light source • How hard to calculate?
Polygon shading • How do you use the Phong Illumination Model to render an object with shading? • Consider a polygonal sphere approximation • How do you find the normals to the faces? • Shade a face with a constant color? glShadeModel(GL_FLAT); • Called flat shading or Constant shading • How much computation would this require • Per pixel? • Per vertex?
Flat shading drawbacks • The human visual system enhances edges • We see stripes (known as MachBands) along edges • Much like aconvolution! • How to avoid?
Gouraud shading • Gouraud shading: • Define vertex normals as averageof surrounding faces • Compute lighting equation at each vertex • Interpolate colors across polygon glShadeModel(GL_SMOOTH); • Computation required • Per pixel? • Per vertex? • Very fast! Especially with reasonably large polygons and hardware color interpolation • Example
Bilinear interpolation • Rasterization is done a scan-line at a time • Bilinear interpolation: given a color at each vertex, how do you render a scan-line with smooth shading? • interpolate vertex colors along each edge of the polygon to get colors for startand end ofscanline • interpolate colors along thescanline
Gouraud drawbacks • Drawbacks of Gouraudshading? • Polygon edges are still visible • Brightness is modelled asa linear function, but that’snot really accurate • Real highlights are smalland bright and drop off sharply • If polygons are too large, highlights get distorted and dimmed (notice the funny shape) • How to avoid these artifacts?
Phong shading • To eliminate artifacts, interpolate normals • Results: better shading, much nicer highlights • Computation required per pixel? • Computationally much more expensive, but modern graphics cards can do it • Example
Shading summary • Don’t confuse Phong Illumination Model and Phong Shading • Gouraud shading: compute illumination model at each vertex. Interpolate colors. (Often done in hardware) • Phong shading: interpolate vertex normals. Compute illumination model at each vertex
Specifying lights in OpenGL • OpenGL supports those four light types • Point, directional lights GLfloat light0_pos[] = {1.0, 2.0, 3.0, 1.0}; GLfloat light0_pos[] = {1.0, 2.0, 3.0, 0.0}; • Diffuse, Ambient, Specular coefficients GLfloat diffuse0[] = {1, 0, 0, 1}; GLfloat ambient0[] = {1, 0, 0, 1}; GLfloat spedular0[] = {1, 1, 1, 1}; glEnable(GL_LIGHTING)
Enabling lights • Can enable at least 8 lights: glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light0_pos); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient0); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse0); glLightfv(GL_LIGHT0, GL_SPECULA, specular0); • Spotlights: set more light parameters as above • GL_SPOT_DIRECTION • GL_SPOT_EXPONENT • GL_SPOT_CUTOFF
Specifying Materials • Material properties are part of the drawing state, specified by glMaterialfv GLfloat ambient[] = {0.2, 0.2, 0.2, 1.0}; GLfloat diffuse[] = {1.0, 0.8, 0.0, 1.0}; GLfloat specular[] = {1.0, 1.0, 1.0, 1.0}; glMaterialfv(GL_FRONT, GL_AMBIENT, ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, specular); glMaterialf(GL_FRONT, GL_SHININESS, 100.0); GLfloat emission[]={0.0, 0.3, 0.3, 1.0}; glMaterialfv(GL_FRONT, GL_EMISSION, emission); • Use GL_FRONT_AND_BACK for two-sided faces
OpenGL Gouraud Shading • OpenGL needs to know vertex normals as well as locations glNormal3fv(n); glVertex3fv(p); • How to compute vertex normals? • Cross product for face normals • Average normals of surrounding faces • How to find neighboring faces?
Virtual Trackball shading • Flat shading • Compute a normal for each face • Gouraud shading • Compute a normal for each vertex as average of adjacent faces • [Defect: you may not want to smooth-shade across every edge: how should it really be done?] • What would you have to do to handle material properties, surface colors, etc?
Surface subdivision • In real modelers… • one can usually define smooth curved surfaces • Eg spheres, quadrics, NURBS, smoothed polygons • Modeler renders with smoothness setting • Recursively split polygons into smaller pieces, with new vertices on the smooth surface • Splitting a triangle can be done by • Bisecting angles • Computing the centrum • Bisecting sides • Of course, smoother surfaces take longer to draw
What’s missing? • Now that the rendering pipeline is all software, we can add additional effects • What’s missing?
Fresnel Effect • Surface reflectance depends on viewing angle • Fresnel shaders: allow reflection, specularity, other attributes to depend on viewing angle
Chapter summary • Phong illumination model has ambient, diffuse, and specular terms • It can be used for Flat, Gouraud, and Phong shading • OpenGL supports eight ambient, point, distant, and spot lights • You must specify light and material properties with many OpenGL function calls • Curved surfaces are modeled with polygon subdivisions