Normal Map
Generate normal maps from height maps or images.
What it does
Normal Map reads image brightness as a height map and converts it to a tangent-space normal map, where red, green and blue encode surface direction rather than colour. Bright areas read as raised and dark as recessed, or the reverse with Invert. Fed a Volume, it generates a 3D normal field from the volume's density gradient instead of a flat image gradient.
When to use it
A height or bump texture, rock, brick, fabric or terrain, that needs a normal map for lighting without modelling geometry.
Faking surface detail on a flat image, carving bumps and creases from brightness alone.
Prepping a normal map for a game engine or renderer expecting the DirectX (Y-down) convention rather than OpenGL.
Deriving a 3D normal field from a Volume for volumetric shading.
| Parameter | Type | Default |
|---|---|---|
content_in | OneOf([FieldOf(Color), FieldOf(Volume)]) | — |
strength | Number | 1 |
invert | Boolean | false |
flip_y | Boolean | false |
spatial_strength | Field | — |
Gotchas
Strength changes how pronounced the bumps look. It does not change which pixels count as high or low, which is what Invert does.
OpenGL and DirectX disagree on which way the green channel points. If a normal map looks lit from the wrong side once it reaches the renderer or game engine, toggle Flip Y rather than re-tuning Strength.
On a Volume input, Strength is baked in at cook time rather than dragged live. It is not built for real-time scrubbing on volumetric data the way it is on images.
Worked example
Load a greyscale height map, or any image with useful brightness contrast, and wire it into Content.
Raise Strength until the bumps read clearly without breaking into noise.
If the surface looks inverted, bumps reading as dents, enable Invert.
If lighting looks wrong in the target engine, toggle Flip Y to match its normal-map convention.
See also
Slope · Emboss · Displace · Rasters (images)