The short answer

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.

Two triangles compared, the Gouraud one with a colour value marked at each vertex spreading inward, and the Phong one with normal arrows at the vertices and across the whole interior
Gouraud interpolates colours from the vertices. Phong interpolates normals and shades every pixel.

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

Infographic comparing Gouraud and Phong shading on what each interpolates, where lighting is evaluated, how highlights are handled, and relative cost
Gouraud vs Phong shading at a glance: what is interpolated, lighting frequency, highlights, and cost.
AspectGouraud ShadingPhong Shading
What gets interpolatedColours computed at the verticesSurface normals from the vertices
Where lighting is evaluatedOnce at each vertexOnce at every covered pixel
Evaluations per triangleFixed at 3, one per vertexEqual to the pixel count
Cost as the triangle grows on screenStays flat, does not growGrows with pixel area
Specular highlight handlingMissed or distorted away from a vertexRendered correctly anywhere on the face
Quality on curved surfacesFacet edges can still peek throughSmoother, normal changes continuously
Mach band artifactsVisible at colour discontinuitiesLargely avoided
Need to renormalise interpolated valuesNo, colours need no renormalisingYes, interpolated normals need it
Relative computational costLowHigh
Hardware era it suitedConstrained, early real-time hardwareModern GPUs with per-pixel shading
Relationship to the Phong reflection modelCan use it, evaluated at verticesCan use it, evaluated per pixel
Modern equivalent in a shader pipelineVertex-shader lightingFragment-shader per-pixel lighting
Main strengthCheap, fast, good enough for diffuse surfacesCorrect highlights, smooth curvature
Main limitationHighlights lost or distorted off-vertexFar higher per-pixel cost

The Specular Highlight Problem

Two triangles each with a highlight position marked at the centre, the Gouraud one left unfilled and labelled highlight lost, the Phong one filled and labelled highlight kept
A highlight in the middle of a polygon never reaches a vertex, so Gouraud loses it.

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 triangleGouraud evaluationsPhong evaluationsRatio
1,00031,000about 333 times more
5,00035,000about 1,667 times more
20,000320,000about 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

Because Gouraud shading only evaluates lighting at the three vertices. If the highlight lands inside the triangle, away from every vertex, none of the vertex colours capture it. Phong shading evaluates lighting at every pixel instead, using an interpolated normal. So it catches a highlight wherever it actually falls.

No. Phong shading is an interpolation scheme: interpolate normals, then shade per pixel. The Phong reflection model is the ambient-diffuse-specular illumination equation itself. Gouraud shading can use that same reflection model too; it just evaluates it at the vertices instead.

Gouraud shading runs it three times, once per vertex, no matter how large the triangle looks on screen. Phong shading runs it once per covered pixel, so a triangle spanning twenty thousand pixels needs twenty thousand evaluations.

Gouraud shading interpolates colours. The lighting equation already ran at each vertex, so only the resulting colour values get blended across the triangle. Phong shading interpolates surface normals instead, and runs the lighting equation afterward, at every pixel.

Frequently Asked Questions

Gouraud shading evaluates lighting at each vertex, then interpolates the resulting colours across the polygon. Phong shading interpolates the surface normals instead, then evaluates lighting at every pixel. That single difference changes cost, quality, and how well each one renders specular highlights.

Yes, when a highlight happens to fall on or near a vertex. Away from a vertex, Gouraud shading behaves differently. Inside a triangle’s flat interior, it either misses the highlight or smears it into a duller blur than it should be.

Because Phong shading evaluates the full lighting equation once per pixel, while Gouraud shading evaluates it only once per vertex. A triangle always has three vertices. It can still cover thousands of pixels, so Phong shading’s cost grows with the triangle’s size on screen.

No. Phong shading is an interpolation scheme, not a lighting model. The Phong reflection model is the actual illumination equation instead. It can be evaluated inside either Gouraud shading or Phong shading.

No. Gouraud shading still suits constrained hardware and diffuse-only surfaces with no strong specular highlight. Its fixed, low cost per triangle stays useful whenever per-pixel lighting is not affordable or not needed.

Per-pixel lighting inside a fragment shader. It interpolates a normal across each triangle. Lighting then runs at every pixel, the same idea Bui Tuong Phong described in the 1970s, just on modern GPU hardware.

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:


Whatsapp-color Created with Sketch.

By Arun Kumar

Full Stack Developer with a BE in Computer Science, working with React, Next.js, Node.js, MongoDB, and AI/ML tools. Founder of DiffStudy — built to help CS students ace GATE and university exams, and keep developers up to date across AI, cloud, system design, web development, and every field of computer science. Every article is written from real hands-on experience, not just theory.

Leave a Reply

Your email address will not be published. Required fields are marked *


You cannot copy content of this page