Skip to content

Normal Map

Node icon
Texture

Generates a tangent-space normal map from an image, converting height information to surface normals for 3D lighting.

A material's colour (albedo) and grayscale height channel, and the tangent-space normal map the Normal Map node derives from the height via Central Difference.
A three-panel material pipeline: the colour albedo texture, its grayscale height/displacement map, and the derived tangent-space normal map (RGB surface-direction encoding).

Normal Map converts a height map (the image’s luminance or its alpha, picked by Source) into a tangent-space normal map for 3D lighting. The RGB channels encode surface orientation: red is the X tilt, green the Y tilt, blue faces up.

Strength sets the intensity of the relief, and Blur (px) smooths the height before the normals are computed, which reduces noise. Y Direction picks the green-channel convention: OpenGL for Blender, Unity, Godot, and glTF, DirectX for Unreal.

Method picks the derivative kernel. Scharr 3x3 and Central Difference are scaled to match Sobel’s overall strength on constant slopes, so switching does not force you to re-dial Strength, though fine detail responds differently. Try Scharr when a Sobel normal map shows directional bias on diagonal detail.

Edge Handling applies to both the Blur and the derivative. Use Wrap Both when the height map tiles on both axes (for example straight off Seamless Blend or Hex Tile), since Reflect leaves a visible discontinuity at the seam. Wrap Horizontal or Wrap Vertical suit a trimsheet that tiles on one axis and cuts hard on the other.

Set Source to Normal and the input is read as a normal map that already exists, such as one from a scan or a downloaded material. Strength then rescales its intensity, from 0 to 4: 1 keeps it exactly as authored, 0 makes it flat, and 2 doubles its slopes before the directions are made unit length again. Y Direction is the convention the map is read and written in. Method, Edge Handling, Blur, and the derive Strength give way while Source is Normal, and a single-channel image is refused with a message suggesting Luminance or Alpha.

On a texture set or a library, a Map row replaces Source:

  • Height (the default) derives a Normal from the set’s Height and writes it into the set, adding a Normal if the set has none.
  • Normal rescales the set’s own Normal with Strength. The set’s Height follows: it is scaled about its midpoint by the same factor, so the two keep describing one surface, and a line under the row says so.

Every other map passes through untouched, and the Preview jumps to the Normal tab with a dot marking the map this node edited. A set whose Normal was authored in the other convention is converted to Y Direction’s.

Normal Map sits in the Texture category of the add-node menu and the Node Library. Its output wires straight into the Normal input of a Texture node to become part of a texture set; a set that already has a Height needs no Texture node, since the set wired in gets its Normal written in place (see Texture sets).

Pins

ImagePixels or Texture
InputRequired
ImagePixels or Texture
Output

Normal Map

MapChoice
Default: Height
Texture set or library wired

Which map of the texture set this node reads. Its result is written into the set, and every other map passes through unchanged. Shown while a texture set or a library is wired

  • Base ColorWork on the set's Base Color. The first map for the color and tone nodes.
  • NormalWork on the set's Normal. Offered on Normal Map (rescale its intensity) and the nodes that read a map into a selection; a color node never edits a direction.
  • RoughnessWork on the set's Roughness, a linear 0 to 1 map with one channel.
  • MetallicWork on the set's Metallic, a linear 0 to 1 map with one channel.
  • Ambient OcclusionWork on the set's Ambient Occlusion, a linear 0 to 1 map with one channel.
  • HeightWork on the set's Height, a linear map that can pass 0 and 1.
  • OpacityNever offered: the Opacity is the set's cutout, which Mask Apply edits.
  • EmissiveWork on the set's Emissive color.
SourceChoice
Default: Luminance

What the input is read as

  • LuminanceDerive surface height from the image brightness: bright areas are high, dark areas are low.
  • AlphaDerive surface height from the alpha channel, useful for height stored in transparency.
  • NormalRead the input as an existing tangent-space normal map and rescale its intensity with Strength: 1 keeps it as authored, 0 is flat, 2 doubles the slopes.
MethodChoice
Default: Sobel 3x3 Range: Sobel 3x3 / Scharr 3x3 / Central Difference

Derivative kernel used to compute the height gradient.

  • Sobel 3x3: the original kernel.
  • Scharr 3x3: a more rotationally symmetric kernel.
  • Central Difference: a simple, sharper derivative.

Scharr and Central Difference are scaled for comparable overall strength to Sobel 3x3 on constant-slope regions, not identical response on fine detail.

Edge HandlingChoice
Default: Reflect Range: Reflect / Clamp / Wrap Both / Wrap Horizontal / Wrap Vertical

How the image continues past its edges.

  • Reflect: mirrors the image at its edges.
  • Clamp: repeats the edge pixel.
  • Wrap Both: tiles on both axes. Use it for seamless height maps.
  • Wrap Horizontal / Wrap Vertical: wraps that axis and reflects the other. Use it for a trimsheet that tiles on one axis.
StrengthNumber
Default: 2.0 Range: 0.1–50.0

Intensity of the surface relief. Higher values exaggerate surface detail. 1 = subtle, 10+ = extreme

StrengthNumber
Default: 1.00 Range: 0.00–4.00
Source Normal, or Map Normal over a texture set

Rescales the relief of an existing normal map. 1 = as authored, 0 = flat, 2 = twice as steep. Over a texture set its Height scales with it

Blur (px)Number
Default: 0.0 Range: 0.0–10.0

Blurs the height before the normals are computed, smoothing out noise and fine detail. 0 = no blur

Y DirectionToggle
Default: false

Green-channel convention of the normal map.

  • OpenGL (+Y): Y points up. Blender, Unity, Godot and glTF.
  • DirectX (-Y): Y points down. Unreal and 3ds Max.
  • Normal Map accepts a grayscale or single-channel height source directly and always outputs a full-color normal map.
  • Add a small Blur (0.5 to 1.0) to smooth a noisy source.
  • A normal map file made elsewhere reads correctly on Auto. Set Image In’s Input Color Space to Data (Normal, Roughness, ORM) (named Normal Map before) to read its values exactly as stored and see it as the file looks; see Data maps: Auto or Data.
  • After editing a height with Height Layer or a Texture Layer row’s Height Offset, rebuild the normal from the edited height here; those controls never recompute a normal on their own.
  • Going the other way, Normal to Height integrates a normal map back into a height map.