Shading Shading: determining light reflection from objects at
each pixel. Basic Reflection Model: Phong Reflection Model (most
commonly used) I= k a I a + k d I d (l n) + k s I s (v r ) I :
reflected-light intensity
Slide 2
Ambient Reflection: Direction independent k a I a I a :
incident ambient-light intensity k a : object ambient-reflection
coefficient part of the object material properties
Slide 3
Lambertian / Diffusive Reflection: Lighting-direction dependent
I d k d (l n) = I d k d cos( ) I d : incident difussive-light
intensity k d : object diffusive-reflection coefficient : angle
between light direction (l) and surface normal (n). Both l and n
are unit vectors.
Slide 4
Specular Reflection: Viewing-direction dependent I s k s (v r)
= I s k s cos (). I s : incident specular-light intensity k s :
object specular-reflection coefficient : angle between reflection
direction (r) and viewing direction (v). : specular-reflection
exponent, shaniness coefficient. 1/ : roughness.
Slide 5
The effects of ambient, diffusive and specular reflection.
Slide 6
The effects of ambient, diffusive and specular reflection.
(http://en.wikipedia.org/wiki/Utah_teapot) Teapots shaded with
different parameters.
Slide 7
Attenuation: Distance dependent, no impact on ambient light f
att = 1/(a + bd + cd 2 ) d : distance from the light to the surface
point. a,b,c: constant, linear, quadratic attenuation coefficients.
I = k a I a + f att k d I d (l n) + f att k s I s (v r ) I = k a I
a + I d k d cos( ) / (a + bd + cd 2 ) + I s k s cos () / (a + bd +
cd 2 )
Slide 8
Summary: I = k a I a + f att k d I d (l n) + f att k s I s (v r
) I = k a I a + I d k d cos( ) / (a + bd + cd 2 ) + I s k s cos ()
/ (a + bd + cd 2 )
Slide 9
Colored Lights and Surfaces : I = (I r, I g, I b ) = { I, = r,
g, b} : color channel ->Colored lights: I a, I d, I s,
->Colored objects: k a, k d, k s, I = I a k a + f att I d k d (l
n) + f att I s k s (v r) with = r, g, b. I r = I ar k ar + f att I
dr k dr (l n) + f att I sr k sr (v r) I g = I ag k ag + f att I dg
k dg (l n) + f att I sg k sg (v r) I b = I ab k ab + f att I db k
db (l n) + f att I sb k sb (v r)
Slide 10
Multiple Lights: I = I a k a + f atti [I d i k d (l i n) + I s
i k s (v r i ) ] with = r, g, b. m: number of lights. OpenGL
support ambient component for individual light. I = [ I a i k a + f
atti [I d i k d (l i n) + I s i k s (v r i ) ]]
Slide 11
Many more things consider: Shadow, Reflection, Transparency,
Refraction,
http://www.codeproject.com/KB/graphics/RayTracerNet.aspx Figure 2.
Shading effects: a) Ambient, b) Diffuse, c) Highlights, d) Shadows
and e) Reflection (notice the reflection on the floor also)
Slide 12
How to get to each pixel? Two approaches: object order and
image order Frame Buffer: a buffer of memory to store the colors of
the screen, one memory cell per pixel.
http://www.webopedia.com/TERM/F/frame_buffer.html
http://en.wikipedia.org/wiki/Framebuffer
http://en.wikipedia.org/wiki/Linux_framebuffer
Slide 13
Image-order Shading
Slide 14
Ray-tracing (Image created by Russell Yuncker) (Image created
by Jian He)
Slide 15
Simple Ray Tracing: for (each scan line in image ) { for (each
pixel in scan line ) { determine ray from eye through pixel;
for(each object in scene) { if(object is intersected and is closest
considered thus far) record intersection point and object id. } set
pixels color to that at closest object intersection point (using
the REGULAR I formula.) }
Slide 16
Recursive Ray Tracing: Set pixels color to that at closest
object intersection point using the I formular given below. I = (1-
k r - k t )I regular + k r I r + k t I t I regular : regular
reflection of lights from light source. Computed by the formula
above. k r : reflection coefficient. I r : illumination from other
objects (to be reflected). k t : transmission coefficient. I t :
illumination from other objects (to be transmitted).
Slide 17
Recursive Ray Tracing: for (each scan line in image ) { for
(each pixel in scan line ) { determine ray from eye through pixel;
for(each object in scene) { if(object is intersected and is closest
considered thus far) record intersection point and object id. } set
pixels color to that at closest object intersection point (using
the RECURSIVE I formula.) }
Slide 18
Programming Image-order Shading Ray Tracing using Povray (Image
created by Russell Yuncker) (Image created by Jian He)
Slide 19
http://www.iss.rwth- aachen.de/Projekte/grace/raytracing.html
http://www.iss.rwth- aachen.de/Projekte/grace/raytracing.html
Figure: mirror + shadow Free ray tracing software: POV-Ray
(http://www.povray.org/)http://www.povray.org/ Start->Program
Files->Pov Ray for Windows Run the examples in the scenes
directory: C:\Program Files\Pov Ray for Windows\scenes. The
resulting image is stored in the same directory as the source
file.
Slide 20
// Shading Demonstration // Using POV-Ray's SDL (Scene
Description Language) #include "colors.inc" #include "stdcam.inc"
sphere {, 0.4// center & radius pigment { rgb }//color finish {
ambient.2// k a diffuse.6// k d specular.75// k s roughness.01 //
1/ } } text { ttf "cyrvetic.ttf"// font type "Color Sphere", 0.1,
0// string, thickness, gap scale translate pigment { rgb }
Slide 21
Note: Rotation and scaling are about the origin. Need to move
the object to the origin, rotate/scale there and then move it back.
(WoodBox example) #declare Box_Lid = box { translate -2.75*z // put
"hinge" at origin rotate x*25 // open the lid translate 2.75*z //
move "hinge" back translate y*2 // lift to top texture {T3} }
Slide 22
By default, POV-Ray has the positive y-axis pointing up, the
positive x-axis pointing to the right, and the positive z-axis
pointing into the screen. But this will change depending on the
camera settings. (Help: camera, placing) You place the camera in
the world coordinate system. But the images are displayed from the
cameras point of view.
Slide 23
More Info on Ray Tracing Povray Community (Hall of Fame,
Contests, ) http://www.povray.org/community/ UNC Ray Tracing
Tutorial http://www.cs.unc.edu/~rademach/xroads- RT/RTarticle.html
Ray Tracing Contests: http://www.irtc.org:7777/irtc/irtc
Slide 24
Ray Traced Images and Videos Images for raytracing Images for
raytracing
http://www.google.com/images?hl=en&rlz=&q=Raytracing&um=1
&ie=UTF-
8&source=univ&ei=Z4VxTN6RGIG0lQei3_C0Dw&sa=X&oi=ima
ge_result_group&ct=title&resnum=4&ved=0CD4QsAQwAw&biw
=1280&bih=621
http://www.google.com/images?hl=en&rlz=&q=Raytracing&um=1
&ie=UTF-
8&source=univ&ei=Z4VxTN6RGIG0lQei3_C0Dw&sa=X&oi=ima
ge_result_group&ct=title&resnum=4&ved=0CD4QsAQwAw&biw
=1280&bih=621 Videos for raytracing Videos for raytracing
http://www.google.com/search?source=ig&hl=en&rlz=&=&q=r
aytracing&aq=f&aqi=g-s7g1g-
s2&aql=&oq=&gs_rfai=Ch7LQko1xTLWPBZG6hATSztjlDwA
AAKoEBU_Q5UWV#q=raytracing&hl=en&prmd=ivb&source
=univ&tbs=vid:1&tbo=u&ei=ko1xTMeSE4TGlQePy_mhDg&sa
=X&oi=video_result_group&ct=title&resnum=8&ved=0CEkQ
qwQwBw&fp=fff49bcb8f5e5b8c
http://www.google.com/search?source=ig&hl=en&rlz=&=&q=r
aytracing&aq=f&aqi=g-s7g1g-
s2&aql=&oq=&gs_rfai=Ch7LQko1xTLWPBZG6hATSztjlDwA
AAKoEBU_Q5UWV#q=raytracing&hl=en&prmd=ivb&source
=univ&tbs=vid:1&tbo=u&ei=ko1xTMeSE4TGlQePy_mhDg&sa
=X&oi=video_result_group&ct=title&resnum=8&ved=0CEkQ
qwQwBw&fp=fff49bcb8f5e5b8c
Slide 25
Hardware Assisted Ray Tracing Nvidia GF100 Ray-tracing
http://www.youtube.com/watch?v=Cbnv_z6VDj8 Writing a Ray Tracer
http://www.siggraph.org/education/materials/HyperGraph/r
aytrace/rtrace0.htm A raytracer in C++
http://www.codermind.com/articles/Raytracer-in-C++-
Introduction-What-is-ray-tracing.html Povray Source Code
http://www.povray.org/download/
Slide 26
Object Order Shading: Geometrically approximate objects as
patched (triangled) surfaces. Appearance-wise use three shading
methods to approximate: Flat, Gouraud, Phong
Slide 27
Z Buffer (depth buffer): a buffer of memory to store the z
values of the screen, one memory cell per pixel.
http://en.wikipedia.org/wiki/Z-buffering line of sight Frame buff Z
buff
Slide 28
Flat/Constant Shading:
http://www.yourdictionary.com/computer/flat-shading
http://www.yourdictionary.com/computer/flat-shading for (each
object) for(each triangle of the object) compute its reflection
using color and normal of the triangle for(each pixel in the
triangle) if(closer to the viewer than the current z buffer value)
{ update z buffer with the new z update pixel color with the
triangle reflection }
Slide 29
Gouraud/Smooth Shading
http://en.wikipedia.org/wiki/Gouraud_shading
http://en.wikipedia.org/wiki/Gouraud_shading
http://en.wikipedia.org/wiki/Gouraud_shading for (each object)
for(each triangle of the object) {for(each vertex of in the
triangle) compute the vertex reflection using the color and the
normal of the vertex for(each pixel in the triangle) if(closer to
the viewer than the current z buffer value) { update z buffer with
the new z interpolate the pixel color from the vertex reflections.
}
Slide 30
Phong Shading:
http://www.yourdictionary.com/phong-shading#computer for (each
object) for(each triangle of the object) for(each pixel in the
triangle) if(closer to the viewer than the current z buffer value)
{update z buffer with the new z interpolate the pixel normal from
the vertex normals compute the pixel color/relection using Phong
reflection model using pixel normals and the properties of the
object. }
Slide 31
Comparaison of Shading Methods:
http://en.wikipedia.org/wiki/Gouraud_shading
Slide 32
Comparaison of Shading Methods:
http://en.wikipedia.org/wiki/Gouraud_shading
http://en.wikipedia.org/wiki/Phong_shading
http://en.wikipedia.org/wiki/Gouraud_shading
http://en.wikipedia.org/wiki/Phong_shading
http://en.wikipedia.org/wiki/Gouraud_shading
http://en.wikipedia.org/wiki/Phong_shading
Comparaison of Shading Methods: Gouraus vs. Phong
http://en.wikipedia.org/wiki/Gouraud_shading
http://en.wikipedia.org/wiki/Phong_shading
http://en.wikipedia.org/wiki/Gouraud_shading
http://en.wikipedia.org/wiki/Phong_shading
http://en.wikipedia.org/wiki/Gouraud_shading
http://en.wikipedia.org/wiki/Phong_shading GOURAUD SHADING
Slide 35
Comparaison of Shading Methods: High Resolution Gouraud
http://en.wikipedia.org/wiki/Gouraud_shading
http://en.wikipedia.org/wiki/Phong_shading
http://en.wikipedia.org/wiki/Gouraud_shading
http://en.wikipedia.org/wiki/Phong_shading
http://en.wikipedia.org/wiki/Gouraud_shading
http://en.wikipedia.org/wiki/Phong_shading
Slide 36
Graphics Packages using Object-order Shading: Animation: Alice
Panda3D XNA / XNA Game Studio Express Processing 3DS Max Maya Flash
Rendering APIs: OpenGL ActiveX Renderman Pixie - Open Source
RenderMan Web Graphics: VRML X3D SecondLife Flash Microsoft
Silverlight Google SketchUp HTML5.0