Normal Estimate

Estimate surface normals from images with machine-learning inference.

What it does

Normal Estimate predicts a surface normal for every pixel of an image, an ML read of the geometry the photo depicts rather than an inference from brightness gradients. The output is an RGB normal map, where a flat surface facing camera reads as a neutral blue of roughly 0.5, 0.5, 1.0, and plugs into a Material for relighting.

Quality picks the model size: Fast is quickest, Accurate takes longer and resolves finer surface detail. Flip Y swaps the normal convention for a pipeline that expects the opposite axis handedness. Position offsets the estimated surface in world units.

When to use it

ParameterTypeDefaultWhat it does
imageRaster—Image to estimate surface normals from (any Raster source)
qualityString"fast"Quality: fast (~30ms), balanced (~60ms), accurate (~100ms). One of: fast, balanced, accurate.
flip_yBooleanfalseFlip Y axis (DirectX convention instead of OpenGL)
enabledBooleantrueEnable normal estimation
positionVec3(0, 0, 0)Position offset in world units (X, Y, Z)
opacityNumber1Layer opacity (0 = transparent, 1 = opaque). Editable, wirable, keyframable.

Gotchas

Turning Enabled off passes the node through without estimating normals. This is useful for A/B comparing relit against unlit, and easy to leave switched off by accident.

Worked example

  1. Add a Normal Estimate node and wire an image into Image.

  2. Leave Quality on Fast while you compose; switch to Accurate for a final render.

  3. Wire the normal_map output into a Material's normal input.

  4. Add a Light and a Render node downstream to see the relit surface.

  5. If the shading looks inverted, toggle Flip Y.

See also

Depth Estimate · Vision Segment · Rasters (images)