Light the three corners, then smear the colour across the face. Gouraud (1971) computes the lighting at each of a triangle's three vertices, then fills the interior by interpolating the resulting colours with the barycentric weights — cheaper than per-pixel shading, and it is runnable: the interior at the centroid is exactly the average of the corner colours. Down the center, data flows: three lit corners go in, the interpolator fills the face, the proven interior comes out. The blue team builds it; the red team breaks the linearity.
source H. Gouraud, Continuous Shading of Curved Surfaces, IEEE Trans. Computers C-20(6):623–629 (June 1971) — doi:10.1109/T-C.1971.223313. Rendered, not quoted.
Two steps, no more:
1 · light the corners. At each vertex, Lambert diffuse: colour = albedo × max(0, N·L). Three normals, one light, three lit colours cA, cB, cC.
2 · interpolate the colours. For an interior point, the barycentric weights (wA,wB,wC) sum to 1; the colour is wAcA + wBcB + wCcC — linear in the weights, exact at the corners.
| vertex | N·L | lit colour |
|---|
Per-vertex lighting smeared across the face — Gouraud 1971. It is the barycentric interpolation of colour: one lighting solve per corner, then cheap linear fill.
Its neighbour, the-phong-reflection, interpolates the normals and solves lighting per pixel — costlier, but it catches a highlight that lands inside a triangle. Gouraud, sampling only the corners, is blind to it. Same barycentric weights; one carries colour, the other carries normals. Each sphere is the next one's premise.
The blue team's live check: re-derive the centroid colour two ways — by interpolation and by plain average — and confirm they match, with the weights summing to 1. If red breaks the linearity, this badge is where it shows.
A triangle A,B,C with a per-vertex normal N and albedo. One directional light L = (0,0,1). The diffuse solve at each corner (N·L = 0.5 here) times the albedo gives three vertex colours:
| albedo | lit colour c | |
|---|---|---|
| A | red | (.45,.05,.05) |
| B | green | (.05,.45,.05) |
| C | blue | (.05,.05,.45) |
These three colours — and nothing between them — are what you feed the panel below. The whole interior is reconstructed from these three samples.
GOURAUD: the corner colours smeared by the barycentric weights — a smooth gradient, computed live per pixel from the three samples.
The centroid colour is computed from the three corners on the spot — never looked up. Switch to PHONG and mark the highlight to see what the smear loses.
What the machine produces, proven: the interior colour at the centroid equals the plain average of the three corner colours, exact to 1e-9; at each edge midpoint it equals the mean of the two adjacent corners; at each corner it equals that corner exactly. And the disclosed cost: an interior specular peak that Phong catches (~1.0) the Gouraud smear misses (~0).
The blue team's witness (left) re-derives these live; the red team (right) tries to make the smear non-linear.
Phong shading (per-pixel normals) fixes exactly this by moving the lighting solve inside the loop — at a cost Gouraud was built to avoid. The choice is a budget, not a truth. That is why the panel lets you switch modes and mark what each one keeps.
"Gouraud interpolates the normals." Cut. That is Phong. Gouraud interpolates the colours already computed at the vertices — the whole reason it is cheaper and the reason it misses interior highlights.
"Gouraud shading is smooth, so it is correct." Cut. Smooth ≠ right: it is a linear guess between three samples. Mach banding along the shared edges is a real perceptual artifact of that guess.
"The interior is a lighting calculation." Kept, corrected. The interior is arithmetic — a weighted average. Lighting happens only at the three corners; the fill is pure interpolation.
The red team's move: make the smear non-linear — square the barycentric weights without renormalizing. The corners still look right, but the interior drops below the true average and the weights no longer sum to 1. The blue team's witness (window 7) is watching.
Squared weights sum to 1/3 at the centroid, not 1 — so the interpolated interior is darker than the average of the corners, and the witness recomputes, disagrees, and turns red. Nothing is faked; the attack is real and it is caught.