This article relies too much on references to primary sources. (February 2014) (Learn how and when to remove this template message)
This article needs additional citations for verification. (March 2012) (Learn how and when to remove this template message)
Gouraud shading, named after Henri Gouraud, is an interpolation method used in computer graphics to produce continuous shading of surfaces represented by polygon meshes. In practice, Gouraud shading is most often used to achieve continuous lighting on triangle surfaces by computing the lighting at the corners of each triangle and linearly interpolating the resulting colours for each pixel covered by the triangle. Gouraud first published the technique in 1971.
Gouraud shading works as follows: An estimate to the surface normal of each vertex in a polygonal 3D model is either specified for each vertex or found by averaging the surface normals of the polygons that meet at each vertex. Using these estimates, lighting computations based on a reflection model, e.g. the Phong reflection model, is then performed to produce colour intensities at the vertices. For each screen pixel that is covered by the polygonal mesh, colour intensities can then be interpolated from the colour values calculated at the vertices.
Comparison with other shading techniques
In comparison to Phong shading, Gouraud shading's strength and weakness lies in its interpolation. If a mesh covers more pixels in screen space than it has vertices, interpolating colour values from samples of expensive lighting calculations at vertices is less processor intensive than performing the lighting calculation for each pixel as in Phong shading. However, highly localized lighting effects (such as specular highlights, e.g. the glint of reflected light on the surface of an apple) will not be rendered correctly, and if a highlight lies in the middle of a polygon, but does not spread to the polygon's vertex, it will not be apparent in a Gouraud rendering; conversely, if a highlight occurs at the vertex of a polygon, it will be rendered correctly at this vertex (as this is where the lighting model is applied), but will be spread unnaturally across all neighboring polygons via the interpolation method.
The problem is easily spotted in a rendering which ought to have a specular highlight moving smoothly across the surface of a model as it rotates. Gouraud shading will instead produce a highlight continuously fading in and out across neighboring portions of the model, peaking in intensity when the intended specular highlight passes over a vertex of the model. While this problem can be fixed by increasing the density of vertices in the object, at some point the diminishing returns of this approach will favour switching to a more detailed shading model.
Gouraud shading uses linear interpolation
It is a common misconception that Gouraud shading is any interpolation of colors between vertices. For example perspective correct interpolation. The original paper makes it clear Gouraud shading is specifically linear interpolation of color between vertices. By default most modern GPUs use perspective correct interpolation between vertices which produces a different result than Gouraud shading. The differences will be especially pronounced on polygons stretching deep into the view where the differences between linear interpolation and perspective correct interpolation will be more pronounced.
Any linear interpolation of intensity causes derivative discontinuities which triggers Mach bands, a common visual artifact of Gouraud Shading.
- Gouraud, Henri (1971). Computer Display of Curved Surfaces, Doctoral Thesis. University of Utah.
- Gouraud, Henri (1971). "Continuous shading of curved surfaces" (PDF). IEEE Transactions on Computers. C-20 (6): 623–629. doi:10.1109/T-C.1971.223313.
- Gouraud, Henri (1998). "Continuous shading of curved surfaces". In Rosalee Wolfe (ed.). Seminal Graphics: Pioneering efforts that shaped the field. ACM Press. ISBN 1-58113-052-X.