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

ParameterTypeDefault
imageOneOf([FieldOf(Raster)])
qualityString"fast"
flip_yBooleanfalse
enabledBooleantrue
positionVec3(0, 0, 0)
opacityNumber1

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)