Gouraud and Phong Shading


To this point we have discussed how to compute an illumination model at a point on a surface, but not which points of the surface that the illumination model is applied. The process of appliying the illumination model to various surface points is called shading.

Shading can be a costly process involving the computation of and normalizing of vectors to light sources and the viewer. The simplest shading method applies only one illumination calculation for each primitive. This technique is called constant or flat shading. It is most often used on polygonal primitives.

Another shading method applies the illumination model on a subset of surface points and interpolates the intensity of the remaining points on the surface. This technique is called Gouraud Shading. In the case of a polygonal mesh usually the illumination model is applied at each triangle vertex and the colors in the triangles interior are linearly interpoled from these vertex values.

There are several considerations that must be addressed before Gouraud Shading can be applied. If you are fortunate to be given a surface normal for each vertex then you compute the illumination at each vertex using that normal and interpolate the interior points. But often vertex normals are unavailable, in this case we approximate a vertex normal by averaging the normals of the adjacent faces.

The linear interpolation can be accomplished using the plane equation method discussed in the lecture on rasterizing polygons.

Another approach to shading applies the illumination model at every point on the rendered surface.

A special case of this method, called Phong Shading (not to be confused with Phong's illumination model), occurs when the surface normal is linearly interpolated accross polygonal facets. A Phong shader assumes the same input as a Gouraud shader, which means that it expects a normal for every vertex. The illumination modle is applied at every point on the surface being rendered, where the normal at each point is the result of linearly interpolating the vertex normals defined at each vertex of the triangle.


This page was last modified on Monday, November 18, 1996