Free, in your browser, no sign-up
Sprite Normal Map Generator
Drop a transparent PNG sprite or pixel-art tile and get a normal map with the same outline, ready for 2D lights. Open the 3D tab and move the light with your pointer to check it, then download the PNG.
PNG, JPG or WebP. Large images are scaled to 2048 px. Transparent sprites keep their outline.
Free maps are made on your device. Nothing is uploaded unless you ask for an AI set.
Normal
AI texture set
An AI model reads the material in your photo and returns base colour, normal, roughness, metalness and height. Preview and export it like the free maps.
Sign in to get a free AI setExport for
ZIP with Albedo, Normal (OpenGL), ORM packed, Height and a setup note.
What the free maps look like
Real output from this tool with its default settings. Left: the image that went in. Right: the normal map that came out.
Before Normal map Transparent sprite
A 32 × 32 pixel-art chest. The transparent outline is kept, so the normal map drops straight onto the sprite.
How it treats sprites
When the PNG has transparent pixels, the tool keeps the outline in every map and switches the preview to a flat sprite lit by a 2D light that follows your pointer, the way 2D engines light sprites.
Height comes from brightness, so light pixels count as raised and dark outlines as low. That gives sprites a rounded, bevelled look. If your shading is the other way round, switch on Dark is high. A sprite sheet works the same way; leave transparent space between frames so each one gets its own edges.
Pixel art tips
Make the normal map at the sprite’s real size, not an upscaled copy, so one normal pixel matches one art pixel. Then pick Normal and use Download this map.
Small sprites look soft with the default smoothing. Under Height, move the Sharpen ↔ smooth slider left to 0 or below, and keep Detail size at 1 for crisp, per-pixel shading. Lower Strength if the light looks too harsh.
Using it in Godot 4
Godot 4 reads OpenGL-style normal maps (green up), which is this tool’s default, so leave DirectX off.
- Select your Sprite2D. In its Texture slot, choose New CanvasTexture.
- Open the CanvasTexture. Put your sprite in Diffuse > Texture and the downloaded normal map in Normal Map > Texture.
- For pixel art, set Texture > Filter to Nearest on the node (or in Project Settings under Rendering > Textures > Canvas Textures > Default Texture Filter).
- Add a PointLight2D, give it a Texture (a soft radial gradient works), and move it over the sprite. Raise its Height so the light comes from in front of the sprite and the bumps show.
- If the lighting looks upside down, the green channel is flipped: make the map again with DirectX off.
Need maps from a real photo?
The free maps are worked out from brightness, which suits clean textures. For photos of real surfaces, AI texture sets read the material itself.
Free maps
Free
Runs on your device
- 8 maps, including packed ORM
- Ready-made sets for Unreal, Unity, Godot and Blender
- Worked out from image brightness: best for clean textures and sprites
- Unlimited, no account
AI texture set
From $0.20 a set
1 free set when you sign up
- Base colour, normal, roughness, height and metalness
- Made by PATINA, an AI model built for PBR materials
- Tells metal from non-metal parts, which brightness alone cannot
- Packs of 15, 50 or 150 sets, valid for a year
Questions
Will the transparent background stay transparent?
Yes. Transparent PNGs are detected when you add them and Keep transparency switches on. The normal, height and other single maps download as PNG with the same alpha; only the packed ORM is solid.
Does it work for Unity 2D too?
Yes. Unity’s 2D lights read OpenGL-style normal maps as well. Add the PNG as a secondary texture named _NormalMap in the Sprite Editor.
Can it shade each pixel by hand-drawn light direction?
No. It works out shape from brightness only. For exact control, paint the normal map by hand, or use this as a base and touch it up.