# Normal Map Generator > A normal map generator is a tool that turns a texture into a normal map, an RGB image storing which way each point faces so a flat surface lights up as if it had bumps. Kenerate's free generator works in your browser and downloads the normal and height maps as PNG, for OpenGL or DirectX engines. URL: https://kenerateai.com/normal-map-generator Publisher: Kenerate AI (https://kenerateai.com) Last updated: 2026-10-01 ## Key facts - Price: Free, no account - Files: JPG, PNG or WebP in (max 2048 px) → normal map + height map PNG - Controls: Strength 0.2–12, smoothing 0–8, invert height, seamless edges - Convention: OpenGL Y+ (Blender, Unity, Godot, glTF) or DirectX Y− (Unreal, many DCC defaults) - Preview: Live 3D sphere or plane with a moving light - Privacy: Processed in your browser — no upload - See it lit: A light circles the preview so you can tell instantly whether bumps look raised or dented. - OpenGL or DirectX: Same map, green channel flipped. Blender, Unity, Godot and glTF use OpenGL (Y+); Unreal uses DirectX (Y−). - Seamless edges: Slopes are measured across the edges as if the texture repeats, so tiling textures stay seamless. - Height map too: The grey height map works as a displacement or bump map — or as a relief in the Image to STL tool. - Height: The image's luminance becomes a height field (inverted if dark should be raised). - Smooth: Optional blur removes photo noise so it doesn't become false bumps. - Slopes: A Sobel filter measures how fast height changes left–right and up–down at every pixel. - Encode: Slopes become a unit normal, stored as R = X, G = Y (flipped for DirectX), B = Z. - glTF / GLB: Convention: OpenGL (Y+) | Note: Defined by the glTF 2.0 spec - Blender: Convention: OpenGL (Y+) | Note: Set the image to Non-Color - Unity: Convention: OpenGL (Y+) | Note: Mark the texture as Normal map - Godot: Convention: OpenGL (Y+) | Note: — - Unreal Engine: Convention: DirectX (Y−) | Note: Or tick Flip Green Channel on import ## Steps 1. Add a texture — Drop a texture image onto the box above, or try the cobblestone sample. 2. Tune strength — Raise strength for deeper bumps; add smoothing if it looks noisy. 3. Pick the convention — OpenGL for Blender, Unity, Godot, glTF; DirectX for Unreal. 4. Download — Save the normal map (and height map) as PNG. ## In depth ### What the colours encode Normal mapping fakes the lighting of small bumps without adding polygons, storing a direction per texel as RGB = XYZ [18]. glTF defines tangent-space normal textures with red for X, green for Y (up) and blue for Z [8]. ### OpenGL vs DirectX The two conventions differ only in the direction of the green (Y) channel: OpenGL is “Y+”, DirectX is “Y−”, and inverting green converts one to the other [16]. Blender uses the OpenGL convention and expects normal maps to be set to Non-Color [17]. ### Photos as a height source This tool reads height from brightness. That works when brightness follows shape — grout lines dark, stones light — but shadows and colour changes also read as height. Shoot textures in flat, diffuse light, or paint a height map and use it as the input. ### From texture to print The height map is also a heightmap for 3D printing: load it in the Image to STL tool as a relief to print the same texture as a tile. References: [1] Wikipedia — STL (file format): https://en.wikipedia.org/wiki/STL_(file_format) [2] Wikipedia — Wavefront .obj file: https://en.wikipedia.org/wiki/Wavefront_.obj_file [3] Wikipedia — FBX: https://en.wikipedia.org/wiki/FBX [4] Khronos Group — glTF: https://www.khronos.org/gltf/ [5] 3MF Consortium — 3MF specification: https://3mf.io/specification/ [6] Wikipedia — Universal Scene Description (USD / USDZ): https://en.wikipedia.org/wiki/Universal_Scene_Description [7] Wikipedia — PLY (file format): https://en.wikipedia.org/wiki/PLY_(file_format) [8] Khronos Group — glTF 2.0 specification: https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html [9] Apple — AR Quick Look: https://developer.apple.com/augmented-reality/quick-look/ [10] three.js — documentation: https://threejs.org/docs/ [11] Prusa Knowledge Base — Modeling with 3D printing in mind: https://help.prusa3d.com/article/modeling-with-3d-printing-in-mind_164135 [12] Prusa Blog — lithophanes and filament transparency: https://blog.prusa3d.com/lets-play-with-filament-transparency-how-to-make-amazing-lifelike-color-photos-with-just-a-simple-color-change_104338/ [13] Polymers (2024) 16(20):2862 — FFF parameters and translucency of PLA: https://doi.org/10.3390/polym16202862 [14] Wikipedia — Lithophane: https://en.wikipedia.org/wiki/Lithophane [15] W3C — CSS Values and Units Level 3 (absolute lengths): https://www.w3.org/TR/css-values-3/ [16] Adobe Substance 3D — OpenGL vs DirectX normal maps: https://experienceleague.adobe.com/en/docs/substance-3d/bakers/common-questions/what-is-the-difference-between-the-opengl-and-directx-normal-format [17] Blender Manual — Normal Map node: https://docs.blender.org/manual/en/latest/render/shader_nodes/displacement/normal_map.html [18] Wikipedia — Normal mapping: https://en.wikipedia.org/wiki/Normal_mapping [19] SIL Open Font License: https://openfontlicense.org/ ## FAQ Q: What is a normal map? A: A texture whose red, green and blue values store the X, Y and Z direction a surface faces. Renderers use it to light flat geometry as if it had fine detail. Q: Why are normal maps blue and purple? A: A surface facing straight out has the normal (0, 0, 1), stored as about (128, 128, 255) — a light blue-purple. Bumps tilt it towards red and green. Q: OpenGL or DirectX? A: OpenGL (Y+) for Blender, Unity, Godot and glTF; DirectX (Y−) for Unreal. They differ only in the green channel, so you can flip one into the other. Q: Why does my normal map look wrong in Blender? A: Set the image's colour space to Non-Color. Treating a normal map as sRGB colour distorts the directions. Q: Can a photo make a good normal map? A: It works well for textures shot with flat, even light, like the sample. Photos with strong shadows bake the lighting into the height, so expect some false bumps. Q: What's the difference between a normal, bump and height map? A: A height (bump/displacement) map stores height as grey; a normal map stores the surface direction derived from it. Normal maps give better lighting detail; height maps can move real geometry. Q: Is my texture uploaded? A: No. Everything happens in your browser. ## Related pages - AI 3D Model Generator: https://kenerateai.com/ai-3d-model-generator - Image to 3D: https://kenerateai.com/image-to-3d-converter - AI STL Generator: https://kenerateai.com/ai-3d-printing-model-generator - Text to 3D: https://kenerateai.com/text-to-3d-generator ## Sources - Wikipedia — STL (file format): https://en.wikipedia.org/wiki/STL_(file_format) - Wikipedia — Wavefront .obj file: https://en.wikipedia.org/wiki/Wavefront_.obj_file - Wikipedia — FBX: https://en.wikipedia.org/wiki/FBX - Khronos Group — glTF: https://www.khronos.org/gltf/ - 3MF Consortium — 3MF specification: https://3mf.io/specification/ - Wikipedia — Universal Scene Description (USD / USDZ): https://en.wikipedia.org/wiki/Universal_Scene_Description - Wikipedia — PLY (file format): https://en.wikipedia.org/wiki/PLY_(file_format) - Khronos Group — glTF 2.0 specification: https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html - Apple — AR Quick Look: https://developer.apple.com/augmented-reality/quick-look/ - three.js — documentation: https://threejs.org/docs/ - Prusa Knowledge Base — Modeling with 3D printing in mind: https://help.prusa3d.com/article/modeling-with-3d-printing-in-mind_164135 - Prusa Blog — lithophanes and filament transparency: https://blog.prusa3d.com/lets-play-with-filament-transparency-how-to-make-amazing-lifelike-color-photos-with-just-a-simple-color-change_104338/ - Polymers (2024) 16(20):2862 — FFF parameters and translucency of PLA: https://doi.org/10.3390/polym16202862 - Wikipedia — Lithophane: https://en.wikipedia.org/wiki/Lithophane - W3C — CSS Values and Units Level 3 (absolute lengths): https://www.w3.org/TR/css-values-3/ - Adobe Substance 3D — OpenGL vs DirectX normal maps: https://experienceleague.adobe.com/en/docs/substance-3d/bakers/common-questions/what-is-the-difference-between-the-opengl-and-directx-normal-format - Blender Manual — Normal Map node: https://docs.blender.org/manual/en/latest/render/shader_nodes/displacement/normal_map.html - Wikipedia — Normal mapping: https://en.wikipedia.org/wiki/Normal_mapping - SIL Open Font License: https://openfontlicense.org/