---
title: "What Is a Normal Map? (And Why It's Purple)"
description: "A normal map is a texture that fakes fine surface detail by changing how light hits each pixel. How normal maps work, why they look blue, and how to use them."
source: https://docs.3daistudio.com/concepts/what-is-a-normal-map
---

# What Is a Normal Map?

A normal map is a texture that fakes fine surface detail by changing how light hits each pixel. How normal maps work, why they look blue, and how to use them.

A normal map is a texture that makes a 3D surface look more detailed than it really is. Each pixel stores a direction instead of a color, and the renderer uses that direction to light the surface, so bumps, grooves and seams appear without adding any polygons.

| | |
| --- | --- |
| **Stores** | The direction the surface faces at each pixel, as RGB |
| **Changes** | How light falls on the surface, not its shape |
| **Typical look** | Light blue and purple |
| **Part of** | PBR materials, next to base color, roughness and metalness |
| **Used in** | Games, real-time viewers, renders |

## How does a normal map work?

Lighting depends on which way a surface faces, its "normal". A normal map replaces the flat face's normal with a different direction at every pixel. Light then hits each pixel as if it sat on a tiny slope, which the eye reads as real detail like pores, scratches or panel lines.

The direction is encoded in the color channels: red for left and right (X), green for up and down (Y), and blue for straight out of the surface (Z). The geometry stays exactly as it was, which is why normal maps are so cheap to render.

## Why are normal maps blue and purple?

Most normal maps are tangent-space maps, where a pixel pointing straight out of the surface is stored as RGB (128, 128, 255). That value is a light blue-purple, and since most of a surface points roughly straight out, most of the map has that color. Slopes show up as pinker or greener tints.

Object-space normal maps store directions relative to the whole model instead and look like a rainbow of colors. They are less common because they don't work on deforming characters.

## What is the difference between OpenGL and DirectX normal maps?

The two conventions flip the green channel. A map made for one looks inverted in the other, with bumps that appear to point inward. Flip the green channel when moving a map between them.

| Convention | Green channel | Used by |
| --- | --- | --- |
| **OpenGL** (Y+) | Up is green | Blender, Unity, Godot |
| **DirectX** (Y-) | Down is green | Unreal Engine, 3ds Max |

## Normal map vs bump map vs displacement map

All three add surface detail, but only displacement changes the actual shape. Normal maps are the standard for real-time 3D because they look detailed and cost almost nothing.

| | Normal map | Bump map | Displacement map |
| --- | --- | --- | --- |
| Stores | Direction (RGB) | Height (grayscale) | Height (grayscale) |
| Changes geometry | No | No | Yes |
| Silhouette | Unchanged | Unchanged | Changes |
| Cost | Very low | Very low | High, needs dense geometry |

## Where do normal maps come from?

Normal maps are usually baked from a detailed high-poly model onto a simpler low-poly version, generated from a photo or texture, or produced together with the other maps of an AI-textured model.

- **Baking:** the detail of a high-poly sculpt is projected onto a [low poly](https://docs.3daistudio.com/concepts/what-is-low-poly) model, which is how game assets keep their detail
- **From an image:** a [normal map generator](https://www.3daistudio.com/Tools/PBRMapGenerator) estimates surface direction from a photo or texture
- **With AI texturing:** the [AI texture generator](https://www.3daistudio.com/TextureGenerator) creates base color, roughness, metalness and normal maps for a whole model at once

## How do I use a normal map?

Plug it into the normal input of your material and make sure the engine treats it as non-color data. Then check the green channel convention.

- **Blender:** Image Texture node with color space **Non-Color**, into a **Normal Map** node, into the Normal input of the Principled BSDF
- **Unity:** set the texture's type to **Normal map** in the import settings, then assign it to the material's Normal Map slot
- **Unreal Engine:** import with the **Normalmap** compression setting, and flip the green channel if the map was made in OpenGL style
- **Godot:** enable **Normal Map** in the StandardMaterial3D and assign the texture

## Frequently Asked Questions

### Why does my normal map look wrong or inverted?

The two most common causes are a flipped green channel (an OpenGL map in a DirectX engine or the other way round) and the texture being read as color instead of non-color data. Fix the color space first, then flip the green channel if bumps still point inward.

### Do I need a normal map for 3D printing?

No. A printer only uses the geometry, so normal map detail disappears in a print. To keep painted or fine detail physically, it has to become real geometry, for example with DetailForge in [Export for 3D Printing](https://docs.3daistudio.com/utilities/export-for-3d-printing).

---

> Documentation index for AI agents: https://docs.3daistudio.com/llms.txt
