Phong illumination model (cheat sheet)

\( \renewcommand{\vec}[1]{ \mathbf{#1} }  \)
$$ f(  \vec p ) = \underbrace{I_a K_a}_{\color{red} \text{ambiant componant}} + \underbrace{\sum_i^\text{nb_lights} (\vec n( \vec p ) . \vec l_i) K_d I_i}_{\color{green} \text{diffuse componant}} + \underbrace{\sum_i^\text{nb_lights} f_{spec}(\vec l_i( \vec p ), \vec v(\vec p)) K_s I_i}_{\color{blue} \text{specular componant}} $$

I summarize the phong illumination model with the above equation and explain all the terms one by one.

The function \(f:\mathbb{R}^3 \rightarrow \mathbb R\) takes a 3D point in input \( \vec p : (x,y,z)\) and returns a real number which is the associated light intesity. \( \vec p \) is a point on the object's surface where you'd like to compute the light intensity. Note that usually this function is evaluated 3 times for red, blue and green intensities. This sheet only describes the computation for one color channel.

Phont lighting is an extreme simplification of how lights really behaves, however, it is very efficient to compute.

Ambiant component

In phong lighting we don't simulate light bouncing in the scene, but if we don't take this phenomenon into account, parts of the object not directly exposed to the source light would stay black. To fix this, the ambiant component arbitrarly assigned a fixed intensity. This intensity only depends on the material of the object (assigned by the user)

Diffuse component (Lambertian diffusion)

Simulate the light that is scattered uniformely where it strikes the object's surface (e.g. plaster), it only depends on the light direction. The intensity is independent from the viewing point since light is diffused uniformely.

Speculare component

Simulate light that is reflected off the object, therefor it depends on both the light source position and viewer perspective.

Two ways to compute the specular term \( f_{spec}(\vec l_i( \vec p ), \vec v(\vec p)) \):

1) Phong's specular term

$$ \left \{ \begin{matrix}  f_{spec} & = & (\vec r . \vec v)^c & \text{if } \vec r . \vec v > 0 \\  f_{spec} & = & 0 & \text{otherwise} \\ \end{matrix} \right.\  $$

Where \(c\) is coefficient representing the size of the specular reflection (user input) and \( \vec r \) is the reflection of the light vector \( \vec l \):

$$ \vec r = (2(\vec n . \vec v) \vec n) - \vec l $$

2) Jim Blinn's specular term

$$ f_{spec} = ( \vec n . \vec h)^c $$

Where \( \vec h \) is the bissector between \( l \) and \( \vec v \):

$$ \vec h = \frac{\vec l + \vec v}{ \| \vec l + \vec v \| }$$


See wikipedia's explanation.

No comments

All html tags except <b> and <i> will be removed from your comment. You can make links by just typing the url or mail-address.
Spam bot question: