Gouraud vs Phong Shading comes down to one choice: what gets interpolated, and where lighting gets evaluated. Both are interpolation schemes for shading a polygon smoothly. Neither one is a lighting model by itself. Gouraud shading evaluates the illumination model at each vertex, using that vertex’s normal, producing one colour per vertex. Those vertex colours are then interpolated across the polygon’s interior, along its edges and then across scanlines. So lighting runs only three times per triangle, once per vertex. Phong shading instead interpolates the surface normals across the polygon. It then evaluates the illumination model at every pixel, using that pixel’s own interpolated normal. Lighting now runs once per pixel, not once per vertex. That lets Phong shading render specular highlights correctly, even inside a large flat triangle. Gouraud shading often misses that same highlight, or smears it into a dull blur. That extra correctness costs far more computation. The lighting equation can run thousands of times per triangle, instead of three. Gouraud shading can even use the exact same Phong reflection model for its lighting maths. It just evaluates that equation at the vertices instead of at every pixel.
Gouraud shading and Phong shading both solve the same problem. A polygon mesh is not a curved surface, but it needs to look like one. Henri Gouraud introduced his interpolation scheme in 1971. Bui Tuong Phong published his method a few years later, in the 1970s.
Students often treat the two names as interchangeable, since both smooth out a flat mesh. They are not the same scheme. One evaluates lighting at the vertices. The other evaluates it at every pixel instead. That single choice changes cost, quality, and which highlights survive.
Shading only matters once a pixel is known to be visible. Hidden-surface removal decides which pixels get shaded at all, a problem compared in z-buffer vs painter’s algorithm. Gouraud and Phong shading pick up from there, deciding what colour a visible pixel gets.

Why Shading Needs Interpolation At All
A 3D model is not really curved. It is a mesh of flat polygons, usually triangles, each with its own flat plane. A sphere built from a hundred triangles still has a hundred flat facets, unless something smooths the transitions between them.
The simplest fix is flat shading. Flat shading runs the lighting equation once per polygon, using one normal for the whole face. It paints that single colour across it. Every triangle stays visibly flat, so facet edges show through as hard lines, especially on curved surfaces.
Gouraud and Phong shading both exist to hide those facet edges. Each one interpolates something across a polygon’s interior, smoothing the change from one triangle to the next. Rasterizing a triangle already means interpolating pixel positions along its edges, the same idea used in DDA vs Bresenham line drawing. Shading interpolation just carries colour or normal values along for that same ride.
So the real question is not whether to interpolate. It is what to interpolate, and when the lighting maths actually runs. That single choice is where Gouraud shading and Phong shading part ways.
How Gouraud Shading Works
Gouraud shading, introduced by Henri Gouraud in 1971, computes lighting at the vertices only. Each vertex already carries a normal, usually averaged from the faces around it. The illumination equation runs once per vertex, using that vertex’s own normal, and produces one colour per vertex.
Those vertex colours are not the final image yet. They still need spreading across the triangle’s interior. The renderer interpolates them along each edge first, then across each scanline between the two edge colours, filling every pixel with a blended value.
So lighting itself is evaluated only three times per triangle, once per vertex. Everything past that point is colour interpolation, cheap arithmetic instead of a full lighting calculation.
The advantage is speed. Gouraud shading stayed the default for real-time graphics for years. The lighting equation runs only at a scene’s vertices. That holds however many pixels the scene later covers.
The disadvantage shows up on specular highlights. A highlight can only appear where a vertex sits, because lighting is never evaluated inside the triangle. A bright highlight might belong in the middle of a large flat polygon. It just gets missed, or smeared into something dimmer than it should be. Gouraud shading also produces Mach band artifacts. The eye perceives false edges at colour discontinuities, even where the real surface is smooth.
How Phong Shading Works
Phong shading, published by Bui Tuong Phong in the 1970s, takes the opposite approach. It interpolates the surface normal itself, not a colour, across a triangle’s interior.
Each vertex still starts with its own normal. The renderer does not turn that normal into a colour right away. Instead, it interpolates the normal vectors across edges and scanlines, the same way Gouraud shading interpolates colours. Those normals also need transforming into the light’s own space first. That step is distinct from transforming vertex positions, covered in geometric transformation vs coordinate transformation.
The lighting equation then runs at every covered pixel, using that pixel’s own interpolated normal. A triangle covering ten thousand pixels runs the full illumination model ten thousand times, not three.
The advantage is correctness. Every pixel gets its own lighting calculation. So a specular highlight can appear anywhere inside a polygon, not only at a vertex. Curved surfaces also look smoother, since the normal itself changes gradually across each triangle instead of jumping between flat facets.
Cost is the disadvantage here. Running the illumination equation per pixel costs far more than running it per vertex, especially on a large polygon. Interpolated normals also drift away from unit length as they blend. Each one needs renormalising before use. That adds yet another step per pixel.
Gouraud vs Phong Shading: Comparison Table

| Aspect | Gouraud Shading | Phong Shading |
|---|---|---|
| What gets interpolated | Colours computed at the vertices | Surface normals from the vertices |
| Where lighting is evaluated | Once at each vertex | Once at every covered pixel |
| Evaluations per triangle | Fixed at 3, one per vertex | Equal to the pixel count |
| Cost as the triangle grows on screen | Stays flat, does not grow | Grows with pixel area |
| Specular highlight handling | Missed or distorted away from a vertex | Rendered correctly anywhere on the face |
| Quality on curved surfaces | Facet edges can still peek through | Smoother, normal changes continuously |
| Mach band artifacts | Visible at colour discontinuities | Largely avoided |
| Need to renormalise interpolated values | No, colours need no renormalising | Yes, interpolated normals need it |
| Relative computational cost | Low | High |
| Hardware era it suited | Constrained, early real-time hardware | Modern GPUs with per-pixel shading |
| Relationship to the Phong reflection model | Can use it, evaluated at vertices | Can use it, evaluated per pixel |
| Modern equivalent in a shader pipeline | Vertex-shader lighting | Fragment-shader per-pixel lighting |
| Main strength | Cheap, fast, good enough for diffuse surfaces | Correct highlights, smooth curvature |
| Main limitation | Highlights lost or distorted off-vertex | Far higher per-pixel cost |
The Specular Highlight Problem

Picture one large triangle lit by a single point light. Position that light so the highlight lands right in the middle of the face, far from any vertex.
Gouraud shading evaluates lighting only at the three corners. None of them sit near the highlight, so each corner returns a fairly dim colour. Interpolating three dim colours across the triangle just produces another dim triangle. The highlight is gone, even though the reflection model says it should be there.
Move that same highlight so it happens to fall right on a vertex instead. Gouraud shading catches it then, at least at that one point. Interpolation then smears the bright vertex colour outward. The highlight ends up as a soft blur radiating from a corner, rather than a tight, correctly shaped spot.
Phong shading has no such blind spot. Its interpolated normal changes smoothly across the triangle, and the illumination model runs fresh at every pixel. Wherever the highlight should physically appear, the per-pixel normal at that spot points the right way. Lighting then reflects the light source correctly, right there.
That gap is the clearest argument for choosing Phong shading over Gouraud shading. Diffuse lighting changes gradually across a surface, so coarse interpolation barely shows. A specular highlight is sharp and localized instead, so it needs the resolution only per-pixel evaluation can give.
Worked Example: Counting Lighting Calculations
Counting is the cleanest way to see the cost difference. Take a single triangle, which always has exactly three vertices, and ask how many times the lighting equation actually runs.
Flat shading is the cheapest baseline: one evaluation for the whole polygon, since one normal represents the entire face.
Gouraud shading evaluates lighting once per vertex. A triangle has three vertices. So the count stays at three, no matter how big that triangle ends up on screen. Whether it covers a hundred pixels or a hundred thousand, three vertex evaluations never change.
Phong shading evaluates lighting once per covered pixel instead. That count depends on how much screen space the triangle fills after projection. Screen mapping is covered in viewport vs window in computer graphics.
| Pixels covered by the triangle | Gouraud evaluations | Phong evaluations | Ratio |
|---|---|---|---|
| 1,000 | 3 | 1,000 | about 333 times more |
| 5,000 | 3 | 5,000 | about 1,667 times more |
| 20,000 | 3 | 20,000 | about 6,667 times more |
Gouraud’s count stays fixed at the number of vertices. So it never grows as the triangle gets bigger on screen. Phong’s count grows directly with pixel area instead, since every covered pixel needs its own evaluation. That gap is the entire performance story between the two schemes.
It also explains why Gouraud shading dominated when hardware was weak. A GPU with limited per-pixel throughput could not afford Phong shading’s steep expense. Vertex-only lighting was often the only realistic choice back then.
Phong Shading Is Not the Phong Reflection Model
Phong shading and the Phong reflection model share a name, and that causes real confusion. They are not the same thing.
The Phong reflection model is an illumination equation. It adds an ambient term, a diffuse term, and a specular term together. That sum produces one colour for a given point, normal, and light direction.
Phong shading is an interpolation scheme instead. It interpolates normals across a polygon, then evaluates whatever illumination model is in use, once per pixel.
Here is the part many articles get wrong: Gouraud shading can use the Phong reflection model too. It just evaluates that same ambient-diffuse-specular equation at the vertices, not at every pixel. Then it interpolates the resulting colours instead of the normals.
So the naming trap runs both directions. Phong shading does not require the Phong reflection model. The Phong reflection model does not require Phong shading either. One is where lighting gets evaluated; the other is what the lighting equation actually computes.
Modern GPUs blur this further. Per-pixel lighting inside a fragment shader is essentially Phong shading, whatever reflection model the shader happens to compute. That is why the interpolation-versus-equation distinction still matters on current hardware.
Where Each One Is Used
Gouraud shading has not disappeared. Constrained hardware still benefits from its lower cost. So do mobile GPUs with tight power budgets, and diffuse-only surfaces with no strong specular highlight.
Phong shading, or something equivalent to it, is the default wherever per-pixel lighting is affordable. A fragment shader lights every pixel this same way. It runs the same interpolate-then-evaluate idea Phong described, whatever specific reflection model sits inside it.
Rasterizing a triangle at all depends on scan conversion, the process compared for lines in raster scan vs random scan. Shading interpolation rides along scanline by scanline, on top of that same pixel grid, once the frame buffer starts filling.
Neither scheme is obsolete. The choice comes down to how much per-pixel cost a project can afford. It also depends on how much the surface actually needs a correctly placed highlight.
Interview Questions
Frequently Asked Questions
Wrapping Up
Gouraud vs Phong Shading is not a contest between an old idea and a better one. Both are interpolation schemes solving the same problem, just at different places in the pipeline.
Keep the one real distinction close for exams. Gouraud shading interpolates colours computed at the vertices. Phong shading interpolates normals and shades every pixel instead. That single choice decides whether a specular highlight survives, and how many times the lighting equation actually runs.
So the honest framing is a tradeoff between cost and correctness, not a flaw on either side. Reach for the vertex-count argument whenever a question asks about performance. Reach for the specular-highlight case whenever a question asks about quality.
Related reading on DiffStudy:
- Z-Buffer vs Painter’s Algorithm
- DDA vs Bresenham Line Drawing Algorithm
- Raster Scan vs Random Scan
- Viewport vs Window in Computer Graphics
- CS Fundamentals hub