Beginner Fundamentals

Normal Maps vs Bump Maps — What's the Difference?

Both normal maps and bump maps add the illusion of surface detail to a flat mesh without adding polygons. But they work in fundamentally different ways, and knowing which to use — and why — will improve both your workflow and your final results.

⏱ ~7 min read · 5 sections · Beginner friendly

Section 01

What is a Bump Map?

A bump map is a grayscale image — black and white only — where brightness values represent height. Bright pixels push the surface outward (appear raised), and dark pixels push it inward (appear recessed). The renderer uses this height information to fake surface detail by adjusting how light hits the surface.

Bump maps were the original solution to adding surface detail cheaply, and they're still supported in most renderers today. They're simple to create — you can paint one by hand, or generate one from a photo by desaturating it and adjusting contrast.

The key limitation of bump maps is that they only store a single height value per pixel — one number. This means the renderer can only shift the apparent surface up or down relative to the camera. It can't encode complex surface angles or fine microdetail as accurately as a normal map.

Important limitation: Bump maps break at grazing angles. When light hits the surface nearly parallel, the bump map illusion falls apart and the silhouette of the mesh stays perfectly flat regardless of how much bump detail you've painted.
Section 02

What is a Normal Map?

A normal map is an RGB image where the red, green, and blue channels encode XYZ direction vectors — specifically, the direction each surface point is "facing." Instead of storing a simple height value, each pixel stores a full 3D direction. The renderer uses these directions to calculate how light should interact with each point on the surface as if the geometry were actually that complex.

That's why normal maps are purple/blue in color — the default "flat" surface direction pointing straight out encodes as roughly (128, 128, 255) in RGB, which looks like a medium blue-purple. Variations in red and green channels encode lateral tilt in X and Y directions.

Because normal maps store full 3D direction information rather than just height, they produce significantly more accurate lighting results, handle complex surface curvature much better, and hold up at grazing angles where bump maps fall apart.

Section 03

Side by Side Comparison

Here's a direct comparison of the two approaches across the properties that matter most for game development:

Property Bump Map Normal Map
Data stored Grayscale height (1 channel) XYZ direction vectors (3 channels)
File format Grayscale PNG or JPG RGB PNG (lossless recommended)
Lighting accuracy Approximate Physically accurate per pixel
Grazing angle quality Breaks down visibly Holds up well
Complex surface detail Limited Excellent
Ease of hand-painting Easy (just grayscale) Requires a generator or baking
Engine support Most engines All modern engines (standard)
Section 04

Tangent Space vs Object Space Normal Maps

You'll sometimes see normal maps referred to as either tangent space or object space. These describe how the direction vectors are encoded — relative to what reference frame.

Tangent Space (blue/purple)

Direction vectors are stored relative to the surface itself. These maps look mostly blue-purple. They can be used on animated or deforming meshes and are the standard for game assets. This is what you want 99% of the time.

Object Space (rainbow-colored)

Direction vectors are stored relative to the object's world orientation. These maps look colorful, almost rainbow-like. They're faster to render but break on animated meshes. Occasionally used for hard-surface static props.

Default to tangent space. Unless you have a specific reason to use object space, always bake and use tangent space normal maps. Every major game engine expects tangent space by default.
Section 05

When to Use Each

In modern game development, normal maps are the standard. If your engine supports them (and all major ones do), use normal maps. They're more accurate, more flexible, and produce better results at any resolution.

Bump maps still have legitimate uses though. They're a good option when you need a quick, hand-painted height hint and don't have a high-poly mesh to bake from. They're also useful as source data — many normal map generators accept a grayscale bump/height map as input and convert it to a proper normal map automatically.

Practical workflow: Paint or photograph a grayscale height map for simple surfaces, then run it through a normal map converter (many are free online) to get a proper normal map for use in your engine. You get the simplicity of painting grayscale with the quality of a normal map output.

When baking in Trumble, you'll generate a proper tangent-space normal map directly from your high-poly geometry — which is the highest quality method and the recommended approach for any asset where detail matters.