The subject of Phong shading receives careful treatment in most books
on computer graphics, and here I will cover it only in the detail
needed to be able to explain its use in 3D-Filmstrip.
As mentioned in the section on color, the Phong model for shading
surfaces (which 3D-Filmstrip uses) considers that light incident from
a light source and reflected from a given surface patch is made up of
two components. First there is a "diffuse" component whose intensity
is independent of the viewing direction and is proportional to the
cosine of the angle between the normal to the patch and the direction
of the incoming light rays. This models quite well the effect of light
reflected off a rough or matte surface. The intensity of the second or
"specular" component on the other hand is strongly dependent on the
View Direction and is meant to model the quality of shininess or
glossiness of a polished surface. If the diffuse component
predominates too strongly then the surface may seem flat and lifeless,
while if the specular component is too strong then the surface may
seem metallic and shiny with concentrated "hotspots". A good balance
between the two can give a pleasantly realistic effect that enhances
the three-dimensional qualities of the representation. We have
discussed above the way that the diffuse component is computed, and we
consider here only how to compute the intensity of the specular
component---and how to to combine the intensities of the two
components.
Suppose the light from a point source is travelling in a certain
direction v. The "Law of Reflection" (the angle of incidence equals
the angle of reflection) determines a certain direction w for the rays
reflected off the surface patch. If the surface were a perfect
reflector, then the light reflected from the source would have a
maximum intensity I when viewed from a point in the direction w as
seen from the patch, and zero from any other direction. Let P be a
viewpoint, and let A be the angle between the direction w and the
direction from the patch to P. Then the intensity of the light from
the source as seen at P is I f(cos(A)), where f(1)=1 and f(t)=0 for t
< 1. The function cos^n(A) approximates f(cos(A)) well when n is
large, and I cos^n(A) is taken as the law of reflection for an
imperfect reflector in the Phong model. We call the choice of n the
"Specular Exponent". Clearly if n is small then highlights will be
spread out and diffuse, while if n is large then highlights will be
almost pointlike.
Let's assume that if all the light were diffusely reflected the
intensity would be I_d while if all the light were reflected
specularly then the intensity would be I_s. How should we combine
these to find a total intensity I? A first guess is to assume that a
certain fraction r (called the "Specular Ratio") of the incident light
is reflected specularly and the rest is reflected diffusely. This
leads to the addition formula (1-r) I_d + r I_s, and this was the
original formula that I used. However I was a little dissatisfied with
the results and after some playing around I settled on the formula
(1-k r) I_d + r I_s where k seemed best at around 0.6.
_________________________________________________________________
Documentation Table Of Contents.
Documentation Index.