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
A flat photo or video frame relit as if it had real depth, with the normal map fed into a Material and lit
Surface detail an edge or height-based normal approach cannot see (skin pores, fabric weave, fine surface texture) taken straight from a photo
A Material, Light and Render pipeline built from 2D source footage that needs shaded surfaces rather than flat colour
| Parameter | Type | Default |
|---|---|---|
image | OneOf([FieldOf(Raster)]) | — |
quality | String | "fast" |
flip_y | Boolean | false |
enabled | Boolean | true |
position | Vec3 | (0, 0, 0) |
opacity | Number | 1 |
Gotchas
Normals here are estimated from the image's visual content, a different approach from a height-map-based normal node, which derives normals from brightness gradients. Use this node for a photo or video needing inferred surface geometry; use a gradient-based approach where a height or displacement image already exists.
For a relit surface that looks inside-out, or lit from the wrong side, try Flip Y, which swaps between the two common normal-map axis conventions.
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
Add a Normal Estimate node and wire an image into Image.
Leave Quality on Fast while you compose; switch to Accurate for a final render.
Wire the normal_map output into a Material's normal input.
Add a Light and a Render node downstream to see the relit surface.
If the shading looks inverted, toggle Flip Y.