Texture map baker
Make a normal map, height map and roughness map from one texture photo for 3D materials, with the OpenGL or DirectX green-channel convention clearly labeled. The maps are estimated from brightness and are a starting point to refine.
Accepted files: .png,.jpg,.jpeg,.webp. Choose one file. Up to 20 MiB in total.
Images stay in this browser and are never uploaded. Use one still PNG, JPEG or WebP image up to 20 MiB and 4,194,304 pixels, for example 2048 by 2048. Strength 0.1 to 20, smoothing 0 to 16 pixels, detail radius 1 to 16 pixels. Processing stops after 30 seconds. You get three PNG maps at the source size and a JSON report. Source metadata and color profiles are not copied. One still image up to 20 MiB and 4,194,304 pixels, such as 2048 by 2048. Up to 1,000,000 characters. Review the settings before running.
Your result
How to use Texture map baker
- Choose a texture image, ideally evenly lit and without strong shadows.
- Pick the normal map convention your 3D software uses.
- Adjust the strength, smoothing and roughness settings, then run the tool.
- Download the normal, height and roughness PNG files.
Useful next steps
Height from brightness
Height is the Rec. 709 luminance of the encoded colors (ITU-R BT.709-6, 2015): 0.2126 red + 0.7152 green + 0.0722 blue, optionally inverted so dark areas are raised and smoothed with a box blur. This is a heuristic: bright paint on a flat wall will look raised, so these are not measured surface data.
Normals and the green channel
Slopes come from 3 x 3 Sobel filters on the height map, multiplied by the strength, and each normal is stored as (n x 0.5 + 0.5) x 255. OpenGL maps (used by Blender, Unity and glTF) put +Y up in green, so a surface rising toward the top of the image has green below 128. DirectX maps (Unreal Engine, 3ds Max) flip green. The file name says which one you downloaded.
Roughness
Roughness is the base value plus the gain times the local standard deviation of height within the detail radius, clamped to 0 to 1. Busy, detailed areas become rougher and smooth areas stay near the base value. With tiling on, every filter wraps around the edges so the maps tile like a seamless texture.