670 likes | 990 Views
Illumination & Reflectance. Dr. Amy Zhang. Outline. Illumination and Reflectance The Phong Reflectance Model Shading in OpenGL. Two Components of Illumination. Light sources with: Emittance spectrum (color) Geometry (position and direction) Directional attenuation (falloff)
E N D
Illumination & Reflectance Dr. Amy Zhang
Outline • Illumination and Reflectance • The Phong Reflectance Model • Shading in OpenGL
Two Components of Illumination • Light sources with: • Emittance spectrum (color) • Geometry (position and direction) • Directional attenuation (falloff) • Surface properties with: • Reflectance spectrum (color) • Geometry (position, orientation, and micro-structure) • Absorption
Computer Graphics Jargon • Illumination: the transport of energy from light sources between points via direct and indirect paths • Lighting: the process of computing the light intensity reflected from a specific 3‐D point • Shading: the process of assigning a color to a pixel based on the illumination in the scene
Direct and Global Illumination • Direct illumination: A surface point receives light directly from all light sources in the scene • Computed by the local illumination model • Determine which light sources are visible • Global illumination: A surface point receives light after the light rays interact with other objects in the scene I = Idirect + Ireflected + Itransmitted
Directional Light Sources • All of the rays from a directional light source have a common direction (parallel) • The direction is a constant at every point in the scene • It is as if the light source was infinitely far away from the surface that it is illuminating
Point Light Sources • The rays emitted from a point light radially diverge from the source • Direction to the light changes at each point
Other Light Sources • Spotlights • Area light sources • Light source occupies a 2D area (polygon) • Generates soft shadows.
Linearity of Light = + + Paul Haeberli, Grafica Obscura
Outline • Illumination and Reflectance • The Phong Reflectance Model • Shading in OpenGL
OpenGL Reflectance Model • A simple model that can be computed rapidly • Has three components • Diffuse • Specular • Ambient • Uses four vectors • To source • To viewer • Normal • Perfect reflector
Ideal Diffuse Reflectance • Surface reflects light equally in all directions • • Why? Examples?
Lambert’s Cosine Law • Diffuse reflectance scales with cosine of angle
Ideal Diffuse Reflectance • Lambertian reflection model • IL: The incoming light intensity • kd: The diffuse reflection coefficient • N: Surface normal • cosqi = N· L if vectors normalized • There are also three coefficients, kdr, kdg, kdb that show how much of each color component is reflected
Ideal Specular Reflectance • Normal is determined by local orientation • Angle of incidence = angle of reflection • The three vectors must be coplanar • Ideal Specular Reflectance • Surface reflects light only at mirror angle
Reflection Vector R • The vector R can be computed from the incident ray direction L and the surface normal N • Note that all vectors have unit length
How much light is seen? Depends on: • Angle of incident light • Angle to the viewer • ks is the absorption coef
Non-ideal Reflectors • Real materials tend to deviate significantly from ideal mirror reflectors • Introduce an empirical model that is consistent with our experience • The amount of reflected light is greatest in the direction of the perfect mirror reflection • The reflected light forms a “beam” pattern around this mirror direction
Phong Specular Reflection • Phong proposed using a term that dropped off as the angle between the viewer and the ideal reflection increased. n is the shininess coefficient • The cosine lobe gets more narrow with increasing n. • Values of a between 100 and 200 correspond to metals • Values between 5 and 10 give surface that look like plastic
Blinn & Torrance Variation • The specular term in the Phong model is problematic because it requires the calculation of R and V for each vertex • Blinn suggested an more efficient approximation using the halfway vector halfway vector H between L and V • H is the normal to the (imaginary) surface that maximally reflects light in the V direction
No need to compute reflection vector R at every point • Is is a function only of N, if: • the viewer is very far away and V does not change for all points on the object (e.g., orthographic projection) • L does not change for all points on the object (e.g., directional lights) • Resulting model is known as the modified Phong or Blinn lighting model • Specified in OpenGL standard
Ambient Light • Ambient light is the result of multiple interactions between (large) light sources and the objects in the environment • It represents the reflection of all indirect illumination • Amount and color depend on both the color of the light(s) and the material properties of the object • Add ka Ia to diffuse and specular terms reflection coef intensity of ambient light
Distance Terms • The light from a point source that reaches a surface is inversely proportional to the square of the distance between them • We can add a factor of the form 1/(a + bd +cd2) to the diffuse and specular terms • The constant and linear terms soften the effect of the point source
The Phong Illumination Model • Sum of three components: diffuse reflection + specular reflection + ambient • Ambient represents the reflection of all indirect illumination
Each light source has separate diffuse, specular, and ambient terms to allow for maximum flexibility even though this form does not have a physical justification • Separate red, green and blue components. Hence, 9 coefficients for each point source • Idr, Idg, Idb, Isr, Isg, Isb, Iar, Iag, Iab • Material properties match light source properties • Nine absorption coefficients • kdr, kdg, kdb, ksr, ksg, ksb, kar, kag, kab • Shininess coefficient a
Phong Examples • The direction of the light source and the n are varied
The Plastic Look • The Phong illumination model is an approximation of a surface with a specular and a diffuse layer • E.g., shiny plastic, varnished wood, gloss paint
Phong Reflectance Model • Single light source:
Phong Reflectance Model • Multiple light sources:
Computation of Vectors • L and V are specified by the application • Can compute R from L and N • Problem is determining N • OpenGL leaves determination of normal to application • Exception for GLU quadrics and Bezier surfaces
Plane Normals • Equation of plane: ax+by+cz+d = 0 • we know that plane is determined by three points p0, p1, p2 or normal n and p0 • Normal can be obtained by p2 n = (p1-p0) × (p2-p0) p0 p1
Normal to Sphere • Surface implicit function f(x, y, z) = 0 • Normal given by gradient vector • Unit sphere f(p)=p·p-1 • n = [∂f/∂x, ∂f/∂y, ∂f/∂z]T=p
Parametric Form • For unit sphere • Tangent plane determined by vectors • Normal given by cross product x=x(u,v)=cos u cos v y=y(u,v)=cos u sin v z= z(u,v)=sin u ∂p/∂u = [∂x/∂u, ∂y/∂u, ∂z/∂u]T ∂p/∂v = [∂x/∂v, ∂y/∂v, ∂z/∂v]T n = ∂p/∂u × ∂p/∂v
General Case • We can compute parametric normals for other simple cases • Quadrics • Parametric polynomial surfaces • Bezier surface patches
Outline • Illumination and Reflectance • The Phong Reflectance Model • Shading in OpenGL
Objectives • Introduce the OpenGL shading functions • Discuss polygonal shading • Flat • Smooth • Gouraud
Steps in OpenGL shading • Specify normals • Enable shading and select model • Specify lights • Specify material properties
Normals • In OpenGL the normal vector is part of the state • Set byglNormal*() • glNormal3f(x, y, z); • glNormal3fv(p); • Usually we want to set the normal to have unit length so cosine calculations are correct • Length can be affected by transformations • Note that scaling does not preserved length • glEnable(GL_NORMALIZE) allows for autonormalization at a performance penalty
Normal for Triangle p1 n p2 planen·(p - p0 ) = 0 n = (p2 - p0 ) ×(p1 - p0 ) p p0 normalizen n/ |n| Note that right-hand rule determines outward face
Enabling Shading • Shading calculations are enabled by • glEnable(GL_LIGHTING) • Once lighting is enabled, glColor() ignored • Must enable each light source individually • glEnable(GL_LIGHTi) i=0,1….. At least 8 light sources • Can choose light model parameters • glLightModeli(parameter, GL_TRUE) • GL_LIGHT_MODEL_LOCAL_VIEWER do not use simplifying distant viewer assumption in calculation • GL_LIGHT_MODEL_TWO_SIDED shades both sides of polygons independently • Time consuming
Defining a Point Light Source • For each light source, we can set an RGBA for the diffuse, specular, and ambient components, and for the position GL float diffuse0[]={1.0, 0.0, 0.0, 1.0}; GL float ambient0[]={1.0, 0.0, 0.0, 1.0}; GL float specular0[]={1.0, 0.0, 0.0, 1.0}; Glfloat light0_pos[]={1.0, 2.0, 3,0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightv(GL_LIGHT0, GL_POSITION, light0_pos); glLightv(GL_LIGHT0, GL_AMBIENT, ambient0); glLightv(GL_LIGHT0, GL_DIFFUSE, diffuse0); glLightv(GL_LIGHT0, GL_SPECULAR, specular0);
Distance and Direction • The source colors are specified in RGBA • The position is given in homogeneous coordinates • If w =1.0, a finite location • If w =0.0, a parallel source with the given direction vector • The coefficients in the distance terms (1/(a+bd+cd2)) • by default a=1.0 (GL_CONSTANT_ATTENUATION), • b=c=0.0 (GL_LINEAR_ATTENUATION, GL_QUADRATIC_ATTENUATION ). Change by a= 0.80; glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, a);
Spotlights • Use glLightv to set • Direction GL_SPOT_DIRECTION • Cutoff GL_SPOT_CUTOFF • Attenuation GL_SPOT_EXPONENT • Proportional to cosaf f q -q
Global Ambient Light • Ambient light depends on color of light sources • A red light in a white room will cause a red ambient term that disappears when the light is turned off • OpenGL also allows a global ambient term that is often helpful for testing • glLightModelfv(GL_LIGHT_MODEL_AMBIENT, global_ambient)
Moving Light Sources • Light sources are geometric objects whose positions or directions are affected by the model-view matrix • Depending on where we place the position (direction) setting function, we can • Move the light source(s) with the object(s) • Fix the object(s) and move the light source(s) • Fix the light source(s) and move the object(s) • Move the light source(s) and object(s) independently
Material Properties • Material properties are also part of the OpenGL state and match the terms in the modified Phong model • Set by glMaterialv() 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}; GLfloat shine = 100.0 glMaterialf(GL_FRONT, GL_AMBIENT, ambient); glMaterialf(GL_FRONT, GL_DIFFUSE, diffuse); glMaterialf(GL_FRONT, GL_SPECULAR, specular); glMaterialf(GL_FRONT, GL_SHININESS, shine);
Front and Back Faces • The default is shade only front faces which works correctly for convex objects • If we set two sided lighting, OpenGL will shade both sides of a surface • Each side can have its own properties which are set by using GL_FRONT, GL_BACK, or GL_FRONT_AND_BACK in glMaterialf back faces not visible back faces visible