Normal maps for 2D sprites that keep their shape. Most tools read brightness as height, which fails on drawn art. This one solves for a surface that fits the silhouette, then lets you paint in what the picture cannot say. Exports for Unity, Godot, Unreal, and raw OpenGL or DirectX.

Connectez-vous pour ajouter cet article à votre liste de souhaits, le suivre ou l'ignorer

Français non disponible

Ce produit n'est pas disponible dans votre langue. Veuillez consulter la liste des langues disponibles ci-dessous avant de l'acheter.

Ce jeu n'est pas encore disponible sur Steam

Date de sortie prévue : décembre 2026

Ce produit vous intéresse ? Ajoutez-le à votre liste de
souhaits et recevez une notification lors de sa sortie.
 

À propos de ce logiciel

Totally Normal Mapper generates normal maps for 2D sprites — for pixel art, for hand-painted sprites, for anything drawn rather than photographed.

Why drawn art breaks the usual approach

Most normal map generators read your artwork's brightness as height. That works on a photograph of rock, where a dark
patch really is a recess. It fails on drawn art, because shading is a decision the artist made and not a measurement of
the surface. Paint a shadow under a character's arm and a brightness-based tool reads a valley.

This one starts somewhere else. The silhouette is the one thing known for certain about the surface, so it solves for the
normals that fit the silhouette, and then lets you correct the result by painting the facts the picture does not state.

What it is good at

  • Shading does not corrupt it. Line detection uses colour rather than brightness, so a dark painted shadow is not
    mistaken for an inked fold — and nothing is differentiated, so nothing gets blurred.
  • Pixel art stays sharp. Output is solved at the sprite's own resolution. A 32x32 sprite exports as a 32x32
    normal map with its edges intact, not a soft approximation of one.
  • A live lit preview. Drag lights over the artwork and watch the surface respond. Art, normal, lit and split
    views, so you can judge the map against the thing it is for.
  • Whole animations at once. Load every frame as a batch. Settings are shared so the frames cannot disagree, hints
    stay per frame, and one command exports the lot.
  • Photoshop and Aseprite layers as masks. Import a PSD or an .aseprite file and map its layers straight onto hint
    layers, so a mask matches your artwork exactly instead of being traced with a brush. Re-read the file after editing it.
  • A real batch tool. Save the settings you dialled in, hand them to tnmap, and apply them to two hundred sprites.
    Ships as a standalone executable with nothing to install.

When the picture is ambiguous, you say so

A hint is a fact about your artwork that the artwork itself does not state — that an arm is in front of a torso, that an
eye socket is concave, that a belt buckle is flat. Painting one is not retouching the output. You are not pushing pixels
toward a look; you are adding something the solver then has to satisfy along with everything else. There are nine hint
layers, and the tools that paint them behave like the brushes you already use.

Exports your engine will accept

Every engine agrees on what a normal map means and disagrees on how to write it down. The disagreement is one bit —
whether green counts upward or downward — and getting it wrong produces no error message. It produces artwork where every
bump reads as a dent. So the export targets are named after engines rather than conventions:
  • Unity — green up, no flip needed
  • Godot 4 — green up, invert off
  • Unreal Engine 5 — green down, already flipped in the file
  • OpenGL — raw green up, matching Blender and most offline renderers
  • DirectX — raw green down, matching 3ds Max and Source 2

The batch tool

A scenery set is two hundred files that have to be consistent. tnmap is a standalone executable that applies one saved
configuration to all of them. It needs nothing installed — no runtime, no interpreter, not even this application — so it
belongs in a build script as readily as in a terminal.

What it is not

It is not a height map painter and not a 3D modeller, and it will not turn a sprite into a lit scene on its own. It
produces one thing: a normal map your engine can use, at the resolution you drew at.

Windows. Native macOS and Linux builds are planned.

Configuration requise

    Minimale :
    • Système d'exploitation et processeur 64 bits nécessaires
    • Système d'exploitation : Windows 10 64-bit, version 1809 or later
    • Processeur : Any 64-bit x86 processor
    • Mémoire vive : 4 GB de mémoire
    • Graphiques : Any GPU with WebGPU support, which in practice means Direct3D 12. Without one the solver runs on the processor: same output, slower.
    • Espace disque : 1500 MB d'espace disque disponible
    • Notes supplémentaires : 64-bit only. Minimum window size 1024x700. No network connection required at any point.
    Recommandée :
    • Système d'exploitation et processeur 64 bits nécessaires
    • Système d'exploitation : Windows 11 64-bit
    • Processeur : Four cores or more
    • Mémoire vive : 8 GB de mémoire
    • Graphiques : A discrete GPU with Direct3D 12
    • Espace disque : 2 GB d'espace disque disponible
    • Notes supplémentaires : A display of 1600x1000 or larger, which is the application's default window size.
Filtres d'évaluations