✅ Result Ready
How Image to Normal Map Generator Works
A normal map is a texture used in real-time 3D rendering to simulate surface detail without adding geometry. Instead of carving detailed bumps and scratches into a mesh (which would require millions of extra polygons), a normal map stores the simulated surface direction of each point as a colour — red encodes left/right tilt, green encodes up/down tilt, and blue encodes how directly the surface faces the camera. The rendering engine uses this directional information to compute lighting as if those surface details really existed, even though the underlying mesh is flat.
This tool uses the Sobel edge detection operator to compute a normal map from a greyscale representation of your input image. Sobel is a standard image processing technique that estimates the local gradient of the image at each pixel — essentially how rapidly brightness changes in the horizontal and vertical directions. These gradients are mapped to the X and Y components of a surface normal vector, and the Z component is set to a configurable strength value. The result is a standard tangent-space normal map in the format expected by Unity, Unreal Engine, Godot, Blender, and virtually all real-time 3D renderers.
Step-by-Step Guide
- Upload a texture or photo. Tileable texture photos work especially well — stone, wood grain, fabric, metal, concrete, brick.
- Adjust normal strength. Higher strength values exaggerate the surface detail. Start at the default (4.0×) and adjust to taste.
- Click Generate Normal Map. The tool applies the Sobel operator across the full image and generates a normal map PNG.
- Preview the result. The output is displayed with the characteristic blue-purple tint of a normal map — this is correct and expected.
- Download the PNG. Import as a Normal Map texture in Blender (set Colour Space to Non-Colour), Unity, or Unreal Engine.
Best Use Cases
- Game asset texturing: Apply to flat polygon surfaces to simulate detailed stone, brick, cloth, or metal without adding geometry.
- Blender procedural materials: Plug the normal map into the Normal Map node in Blender's shader graph for adding surface detail.
- 3D model finishing: After generating a mesh with the Image to 3D Model tool, generate a matching normal map to add fine surface detail in your game engine or renderer.
- Displacement to normal conversion: The Image to Depth Map output can be fed directly into this tool to produce a matching normal map.
Honest Limitations
- Requires visible surface detail in the source image. A flat-colour image produces a flat (all blue) normal map with no detail. The tool needs tonal variation to detect edges.
- Sobel is a mathematical approximation. The resulting normal map will differ from one produced by a dedicated 3D artist hand-painting details or baking normals from a high-poly mesh. It is a useful automatic starting point, not a replacement for manual authoring on hero assets.
- Tileable textures only output tileable normal maps if the source is seamlessly tileable. If your source photo has non-matching edges, the normal map will also have seam artefacts.
Frequently Asked Questions
Import the PNG into your Unity project. In the Texture Import Settings, set Texture Type to Normal Map. Unity will automatically process it. Then assign it to the Normal Map slot of your material in the Inspector. Unity's Standard Shader and URP/HDRP Lit shaders all support normal maps.
A bump map is a single-channel greyscale texture that stores height variation; the renderer derives normals from it at render time. A normal map pre-computes those normals as RGB values, which is more accurate and more efficient at runtime. Modern game engines almost universally prefer normal maps over bump maps.
Related Tools
Image → 3D team · Last updated