Ludo.ai
Normal maps

AI Normal Map Generator for 2D Game Art

Ludo makes the normal map for the game art it generates: sprites, animated sprite sheets, props, tiles and textures. The map lines up with the art pixel for pixel and, on a sprite sheet, frame for frame, so 2D lighting in Godot, Unity or your own shader works on the whole animation. Pixel art gets one normal per art pixel, and a seamless tile gets a map that tiles too.

a knight with a sword and a round shield, walking
Sprite sheet + normal map
Lit by the pointer, 36 frames
Try it

Move the light over a Ludo sprite

Each asset here came out of Ludo with its normal map. Your pointer is the light, the way a 2D light in your engine would use the map. Switch to the map itself to see what the colours encode, or to the original art to compare.

Move your pointer over it: the light follows.

A 64-frame pixel-art walk and its 64-frame normal map, one normal per art pixel.

What is a normal map for 2D sprites?

A normal map stores the direction each pixel of an image faces, as colour: red for left and right, green for up and down, blue for towards the viewer. A game engine's 2D lights read it to shade a flat sprite as if it had depth, so a torch on the wall or a muzzle flash lights the side of the character that faces it. Ludo generates the map with the art: for a single image, for every frame of an animated sprite sheet, and for every direction of a Directional Sprites character.

Updated November 2026

How it works

Turn on Normal Map

In the Sprite Generator, switch on Normal Map in Sprite Sheet Options before you animate. In Directional Sprites it is in step 4.3. For an image, pick Generate Normal Map in its actions.

Get the art and its map

The sprite sheet comes back with a map laid out exactly like it, same grid, same cells, same transparency. An image gets one map the same size as the image.

Check it lit, then export

Hover the map thumbnail in the asset's corner to see it lit by your pointer. Download Normal Map on its own, or Download Sheet + JSON for the sheet, its frame data and the map in one zip.

What devs build with it

Dynamic 2D lighting

Torches, muzzle flashes, spells and day-night cycles light your characters from the side the light is on, instead of a flat sprite that looks the same everywhere.

Animated characters

Every frame of a walk, attack or idle has its own normals, so the lighting follows the motion rather than sliding over it.

Tiles and textures

Seamless textures and tiles get maps that tile on the same axes, so the light carries across a floor or wall without a seam.

Pixel art

Pixel art gets one normal per art pixel, so the shading stays on the pixel grid instead of smearing across it.

FAQ


  • In Ludo's Sprite Generator, turn on Normal Map in Sprite Sheet Options and animate as usual: the sprite sheet comes back with its normal map. For a sprite you already made, pick Generate Normal Map in its actions and press Apply. For any image in the Image Generator, pick Generate Normal Map.


  • Yes. The map is laid out exactly like the sprite sheet: same grid, same cell size, same transparency, one map frame per animation frame. Use the sheet's frame data for both.


  • OpenGL: red points right, green points up, blue points towards the viewer, and a flat surface is (128, 128, 255). Godot and Unity use this convention. For Unreal, flip the green channel.


  • A lossless WebP with the same size and transparency as the art. Download Normal Map saves it on its own, and Download Sheet + JSON puts it in the zip next to the sheet.


  • Yes. Pixel art gets one normal per art pixel, so the lighting stays on the grid.


  • Yes. Pass save_normals: true to sprite sheet and image generations and the result carries a normal_map_url. createNormalMap makes the map of an image you already have. In the Ludo CLI, add --save-normals, or run ludo image normal-map.


  • Directional Sprites renders a 3D model, so each direction's map comes from the model's real surface normals rather than an estimate from the flat image.

Experience the future of game creation

Free to try. No credit card required.