Skip to main content

NORMAL MAP COMPARISON

Normal Map vs Displacement Map: Which One Should You Use?

Normal maps change how light responds to a surface without changing the mesh. Displacement maps move the surface itself, so they can affect silhouettes, shadows, and contact points. The right choice depends on whether the detail must be visible in geometry or only in shading.

The short answer

Choose the map by the change you need to see

Use a normal map for small, frequent surface detail on a low-cost mesh. Use displacement when the relief must change the silhouette, cast its own shadow, or interact with nearby geometry. Many production materials combine a normal map for fine detail with carefully limited displacement for larger forms.

Editorial comparison showing a purple-blue normal map on a flat plane beside a displaced rocky surface with geometric relief
A normal map changes the lighting direction on a surface; displacement changes the surface shape itself.

Decision guide

Choose the map by the change you need to see

A normal map stores a direction for each texel. The shader uses that direction to make a flat or lightly modeled surface react to light as if it had more detail. The vertices stay where they are, which makes normal mapping fast and predictable for repeated materials, distant assets, and real-time scenes. It cannot repair a flat silhouette or make an object block another object.

A displacement map stores relative height. A renderer or geometry system samples that height and moves vertices, subdivided surface points, or micro-polygons. The result can change the outline, self-shadowing, and contact with other surfaces, but it needs enough geometry and a budget that matches the camera distance. A height texture by itself does not guarantee visible displacement: the material, subdivision, scale, and renderer must all support it.

The useful production answer is often a layered material. Reserve displacement for broad forms that need depth, use a normal map for medium and fine detail, and keep the texture scale consistent across albedo, roughness, and height. Test the result under the real light and camera instead of judging a map by its color in an image viewer.

Production notes

Production boundaries and concrete examples

Silhouette is the clearest dividing line. A normal map can make a flat brick face catch a highlight, but the edge of that brick remains in the original plane. Displacement can break that edge when the surface has enough subdivisions, which is why it matters for a hero asset seen against a bright background.

Shadow behavior is the second test. If a groove must hide light from itself or create a contact shadow on a nearby surface, a lighting-only normal map cannot produce that geometry. Use limited displacement for the broad groove, then keep the normal map for the smaller scratches that would be wasteful to model.

Texture authoring and renderer settings must agree. Height, normal, roughness, and albedo should share a UV scale, while height and normal data should use the non-color interpretation expected by the renderer. A technically correct map can still look inverted when the green channel convention or tangent basis is wrong.

Performance depends on screen coverage rather than texture resolution alone. A displacement map on a tiny background prop may cost more than it contributes, while a close-up surface can justify subdivision. Decide per asset and camera, and keep a cheaper normal-only fallback for lower quality levels.

Keep the source height signal in the material package. It lets you regenerate a normal map for a different tangent basis, adjust displacement amplitude without painting a new texture, and explain why two renderers show different relief. Exported RGB values are the result, not the only source of truth.

Choose by the asset and camera

Tiled stone wall

Use displacement for the large broken edges that affect the outline and contact shadows. Layer a normal map for pores and small chips so the wall still reads at mid distance without dense geometry everywhere.

Fabric on a real-time character

Prefer a normal map for the weave and seam detail. The camera usually cannot resolve individual threads as geometry, and a stable normal map keeps skinning and performance predictable.

Close-up sculpted prop

Start with displacement for the primary sculpted forms, then add normal detail after the mesh and lighting are approved. This keeps the silhouette honest while avoiding a noisy height signal.

Distant repeated material

Use a normal-only version unless a camera test proves that geometry changes are visible. Store displacement as an optional quality tier instead of forcing it onto every instance.

At a glance

Normal map vs displacement map

AspectNormal mapDisplacement map
What changesPer-pixel lighting directionSurface position or mesh height
SilhouetteDoes not change the outlineCan change the outline when geometry is displaced
Runtime costUsually low and stableHigher; depends on subdivision and screen coverage
Best detail scaleFine cracks, pores, fabric, and small groovesLarge ridges, stones, bricks, and contact forms
Setup riskGreen-channel, color-space, and strength errorsHeight range, subdivision, scale, and self-intersection errors
Typical fallbackUse when the camera cannot resolve geometryUse normal or bump detail for the remaining micro-detail

Practical workflow

A reliable way to choose and test

01

Start with the visible requirement

Ask whether the detail must affect the object outline or only its highlights. If a camera will never see the edge of a chipped tile, a normal map is usually enough. If the edge must break against the background, plan for displacement or real geometry.

  • Check the closest camera distance.
  • Mark details that must cast or receive contact shadows.
  • Separate hero assets from repeated background materials.
02

Prepare a clean source height signal

Use a grayscale height map with a clear interpretation: white is relatively high, black is relatively low, and mid-gray is the neutral surface. Remove baked highlights and shadows before converting. A noisy source creates noisy normals and unstable displacement.

  • Keep the height range intentional.
  • Avoid using a shaded photograph as raw height data.
  • Preview the source at the final tiling scale.
03

Generate and orient the normal map

Use the local converter to create a tangent-space normal map, then choose the OpenGL or DirectX Y direction expected by the target renderer. Treat the exported PNG as data, not display color, and verify the normal input rather than the base-color input.

  • Start with moderate Strength and Contrast.
  • Use light Blur only to remove source noise.
  • Toggle the Y direction if grooves look like ridges.
04

Add displacement only where geometry earns its cost

For displacement, confirm the renderer has enough subdivision or micro-geometry and that the height scale is expressed in scene units. Apply it to a simple plane or sphere first, then inspect the production mesh for stretching, seams, and self-intersection.

  • Test subdivision before increasing height strength.
  • Keep displacement scale consistent with object dimensions.
  • Recheck shadows, contact points, and the silhouette.
05

Validate in the final lighting and camera

A map can look convincing in a flat preview and fail under the real shader. Rotate a key light, compare grazing and frontal angles, and inspect the asset at the distance where it will be used. Keep the cheaper normal detail when extra geometry is not visible.

  • Compare the same UV scale across material maps.
  • Check mipmaps, filtering, and platform compression.
  • Save the source height map beside the exported assets.

Common mistakes

Why the result looks wrong

Expecting a normal map to change the silhouette

The shading can suggest a ridge, but the mesh edge remains flat. Use displacement or geometry when the outline or contact shadow matters.

Treating height as a color texture

Color management and incorrect channel handling can shift the values. Mark height and normal data as non-color data where the renderer requires it.

Scaling displacement from the texture alone

A grayscale range has no physical unit until the material and mesh establish one. Tune height against the object size, subdivision, and camera.

Using one map for every distance

Close-up hero assets may need layered displacement and normals, while distant or repeated assets usually benefit from a stable normal map only.

Official references

Check the renderer documentation

Renderer versions and pipelines can change labels and defaults. Use these official references for the exact engine version in your project.

FAQ

Normal map and displacement questions

Is a displacement map better than a normal map?

Neither is universally better. Displacement is better when the surface must physically move or change its silhouette. A normal map is usually better for small detail, repeated materials, and real-time performance where geometry is not visible.

Can a normal map replace displacement?

It can replace displacement when the detail only needs to change lighting and the outline or contact shadows do not matter. It cannot replace visible relief that changes the mesh shape.

Should I use a height map, bump map, or normal map?

A height map is a grayscale source or displacement signal. A bump workflow derives a lighting perturbation from height at shader time. A normal map stores that surface direction directly in RGB. Choose the representation that matches your renderer and the detail scale you need.

Why does my displacement map look flat?

Common causes are insufficient subdivision, a height range that is too small for the mesh, a material that does not enable displacement, or a camera that is too far away to resolve the change. Verify each layer before increasing strength.

Can I combine normal and displacement maps?

Yes. Use displacement for broad or silhouette-changing relief, then layer a normal map for fine cracks and texture. Keep both maps aligned to the same UV scale and reduce strength until the material remains believable under multiple lights.

Next step

Generate a test map, then validate it on the final mesh

Use a normal map for small, frequent surface detail on a low-cost mesh. Use displacement when the relief must change the silhouette, cast its own shadow, or interact with nearby geometry. Many production materials combine a normal map for fine detail with carefully limited displacement for larger forms.