Basic Lighting and Shading
The Important Properties of Light
• It can Reflect, bend, spread and scatter
Most Common Light Sources
• Global Illumination• Light Located at Infinity (Distant Light)• Light Located Locally– Uniform Light (Ambient)– Point Source • Intensity is L(p,P0) = (1 / |p-p0|2 ) L(P0)
– Spotlights (Directional Lights)
OpenGL Light Types
PointSpotlightAmbientDistant
Point
home.elka.pw.edu.pl/.../general/General.html
Spot
home.elka.pw.edu.pl/.../general/General.html
Ambient (Area)
home.elka.pw.edu.pl/.../general/General.html
Distant (Sun / Moon)
home.elka.pw.edu.pl/.../general/General.html
Physical Light
Bidirectional Reflection Distribution Function– (BRDF)
This is based on 5 Variables:– Frequency– Source Vector (x,y)– Output Vector (x,y)
• It also requires a ‘real’ surface
This is a hugely expensive calculation
• Most light consists of a large frequency Range
• In games we have many fast ways of creating the effects of light
Firslty we need to get rid of the ‘spectrum’
• The human Eye recognises colours through 3 types of cones– We can exploit this behaviour by directly
addressing the cones
http://www.unenergy.org/index.php?p=1_180_CPV---Concentrated-PVhttp://www.atmos.ucla.edu/~fovell/AS3/theory_of_color.html
By exploiting this behaviour we can define the colour of light as
• RGB• Varying the levels of Red, Green and Blue can
make the eye ‘see’ every colour of the spectrum.
• The downside to this simplification is that our model of light looses the ability to separate during reflections/refractions.
• As a solution to this we can either use multiple lights, or use explicit functions to ‘create’ light separation
• For offline rendering you may even consider doing a BRDF Rendering using a more complex Lighting method
http://www.tufts.edu/as/tampl/projects/micro_rs/theory.html
Using Basic Lighting in OpenGL
http://www.cs.virginia.edu/~gfx/Courses/2002/RealTime.fall.02/Cg/CG%20Effects%20Explained/Cg%20Effects%20Explained.htm
Enabling Lighting
Enable Lighting in OpenGLglEnable(GL_LIGHTING)
Enable Each Individual LightglEnable(GL_LIGHTi)i <= GL_MAX_LIGHTS
All implementations support at least 8 lights
The 3 Functions to set you lights
• glLightfv(…)• glLightf(…)• glLightModelfv(…)
Specular Reflection
• Specular– The more specular a surface, the move light is
reflected very closely to the angle of reflection– A mirror is a near perfect Specular Surface
http://www.indigorenderer.com/joomla/forum/files/specular_material_test_01_168.jpg
Diffuse Reflection(Lambertian reflection)
http://torcode.com/http://www.glenspectra.co.uk/SiteResources/Data/Templates/1product.asp?DocID=389&v1ID=
Emissive
• It Glows!
http://www.gennetten-concreteartist.com/d-network.html
Translucent Surfaces
http://www.trinity3d.com/product.php?productid=1572&cat=293&page=2http://www.nondot.org/sabre/Projects/Raytracer/
The End (for now)