Flat shading is the simplest shading model which calculates the illumination at a single point for each polygon (or polygon vertices in OpenGL) which means that it the color is the same for all points of each polygon


  • Fast, a single computation per polygon (or one per polygon vertex in OpenGL)


  • Inaccurate
  • Discontinuities at polygon boundaries


GLSL has the keyword flat to skip interpolation

// vertex shader
flat out vec4 polygon_color;
void main() {
  // ...
  polygon_color = vec4(ambient + diffuse + specular, 1.0);

// fragment shader
flat in vec4 polygon_color;
out vec4 color;
void main () {
  color = polygon_color;