ToolPkg

Generate a normal map from a sprite

A normal map lets a flat 2D sprite react to lights as if it had depth — the basis of dynamic lighting in Godot and Unity 2D. This free tool reads your sprite's brightness as a height map, computes surface gradients and outputs a tangent-space normal map, all in your browser.

Tune strength, smoothing and Y direction

Raise the strength for more pronounced bumps, add a little smoothing to clean up noisy or hard-edged pixel art, and choose the Y direction for your engine: Godot and OpenGL use Y+, while Unity and DirectX use Y-. Toggle invert if light areas should read as recessed.

Free, private, no upload

Everything runs locally in your browser — no sign-up, no watermark and no file limit — and your sprite never leaves your device. The alpha channel is preserved so transparent areas stay transparent.

Frequently asked questions

How do I make a normal map from a sprite?

Upload your sprite, adjust the strength and smoothing, pick Godot or Unity for the Y direction, and export — the normal map is generated in your browser as a PNG.

What is a normal map used for?

A normal map stores surface direction per pixel so a 2D sprite can catch dynamic lights and cast highlights and shadows, giving flat art a sense of depth in engines like Godot and Unity.

Does it work for Godot and Unity?

Yes. Choose Godot (Y+) or Unity (Y-) so the green channel points the right way; the rest of the normal map is standard tangent space that both engines read.

Is the normal map generator free?

Yes, completely free with no sign-up, no watermark and no limit on how many sprites you process.

Why does my normal map look noisy or too flat?

Add a little smoothing to reduce noise from hard pixel edges, and raise or lower the strength to make the bumps more or less pronounced until the lighting looks right.

Are my images uploaded to a server?

No. The normal map is generated locally in your browser, so your sprites stay on your device.