A normal map is a texture that encodes surface relief into pixel color: flat geometry starts looking detailed without extra polygons. Below are four ways to get one from an ordinary photograph — from classic plugins to on-device Android scanning.
File → Open.Image → Adjustments → Desaturate (Ctrl+Shift+U). Brightness becomes “height”: lighter = higher.Image → Adjustments → Levels (Ctrl+L) so the relief reads clearly.Filter → NVIDIA Texture Tools → Normal Map, tune the relief strength.Colors → Desaturate.Filters → Map → Normalmap.File → Export As… → PNG.Services like NormalMap-Online: upload a photo → tweak sliders → download PNG. Nothing to install, but three “buts”: the photo goes to a third-party server (privacy), the output is 8-bit, and the generator gives no other maps (albedo, roughness, height).
The first three methods assume relief from brightness. The fourth measures it: the Shape-from-Shading method captures a series of frames under different lighting (flash + screen) and computes how the surface reflects light at varying angles. The result is a true micro-relief map, not an imitation.
In NACK3D it looks like this:
| Method | Cost | Relief source | Bit depth | Other maps | Privacy |
|---|---|---|---|---|---|
| Photoshop + plugin | Adobe subscription | brightness | 8 | none | local |
| GIMP + NormalMap | free | brightness | 8 | none | local |
| Online generator | free | brightness | 8 | none | photo on server |
| NACK3D (SfS) | 7 days free | light (photometric stereo) | up to 16 | 6 maps | local, offline |
The RGB channels encode the normal’s offset along the X, Y, Z axes. A flat patch is the vector (0, 0, 1), which in color gives (128, 128, 255) — that lilac-blue tint. Relief offsets shift the color toward red and green.
In OpenGL the green channel points up (Y+), in DirectX — down (Y−). The wrong choice flips the relief inside out. Unity uses OpenGL, Unreal uses DirectX; NACK3D has a Flip Y toggle and ready-made packs for each engine.
8 bits is enough for game materials at mid distance. For close-ups, displacement and cinematics take 16 bits — otherwise smooth slopes show banding steps.
Methods 1–3 work with one file, but the relief will be conditional. Photometric stereo needs a series of frames under different light — the phone shoots it itself in a second, so the result is closer to a real scan.
NACK3D — a texture scanner for Android: normal, depth and a full PBR set from a single shot, processed on-device. The first 7 days are free.
Get it on Google Play ↗