— Free tool · no sign-up

Free PBR map generator. Normal, roughness and AO maps from one texture.

Drop a texture and get its normal, height, roughness, metalness and ambient occlusion maps, tuned live on a 3D preview.

Updated

No texture at hand?

01— The maps

What each PBR map does

A physically based material splits a surface into color, shape and finish. Seven files, one job each.

Normal
Bends the light at each pixel to fake small bumps without extra geometry. OpenGL (green up) by default; DirectX on request.
Height
Brightness as elevation, for displacement or parallax. Saved as a 16-bit PNG, for smoother displacement than an 8-bit file gives.
Roughness
How matte (white) or glossy (black) each point is.
Metalness
Which parts are bare metal (white). Black for most materials; a photo cannot show it, so you set it.
Ambient occlusion
Darkens the crevices that ambient light reaches least.
ORM
AO, roughness and metalness in the red, green and blue channels of one file, as glTF and Unreal read them.
Base color
Your texture, with baked-in lighting evened out if you ask for it.
02— Method

How to make PBR maps from a photo

One photo holds color and shading, not true depth or finish, so every map is an estimate. Five steps to good ones, and what this tool does with each.

  1. 01Start seamless and evenly lit

    Every map inherits the source's seams and shadows. Make the texture tile, and as flat-lit as you can, before anything else.

    This tool: checks whether your texture tiles and, if it does, keeps every map tileable.

  2. 02Read height from shading

    Crevices are usually dark and raised faces light, so brightness with the large-scale lighting removed is a good first height.

    This tool: the Height tab balances large shapes against fine detail, and inverts it for pale gaps.

  3. 03Build normals and AO from the height

    The slopes of the height give the normal map; how far each point sits below its surroundings gives the occlusion.

    This tool: normals mix three scales of detail, and AO measures depth at four radii.

  4. 04Set roughness and metalness by material

    They describe the surface, not its shape, and a photo shows little of either. Pick a base value for the material and let the texture add variation.

    This tool: a base and a variation for roughness; a value and an optional light or dark mask for metalness.

  5. 05Judge them on a 3D shape

    Maps that look right flat can be far too strong under light. Check them tiled on a lit sphere or plane.

    This tool: the material preview updates as you move the sliders.

03— Under the hood

How it works

Four steps, all of them on your device.

  1. 01Read

    The texture is decoded in a Web Worker on your device, at up to 4096 px, and a 1024 px copy is made for the preview so the sliders respond as you drag.

  2. 02Height

    Brightness minus its large-scale variation, smoothed and stretched to the full range. If the texture tiles, every filter wraps around its edges.

  3. 03Normal and AO

    Slopes of the height at three scales give the normal map, with its strength set per texture width so the preview and the full-size download closely match. AO adds up how far each point sits below its neighbourhood at four radii.

  4. 04Download

    The download recomputes every map at full size with your settings. Each map is a PNG named after your file (rock_normal_gl.png, rock_orm.png); the height map is 16-bit, and the ZIP holds all seven.

Texture not tiling yet? Make it tile first with the free seamless texture generator, then send it here in one click.

04— FAQ

Questions about the PBR map generator.

What the maps are made from, and where an estimate stops being enough.

No. The tool runs in your browser, in a Web Worker on your own device. The texture is never sent to SBFS or anyone else; closing the tab discards it. Share result sends only a link to this page.

They are estimates read from shading, the same approach other single-image generators take, not measurements. They work well for stone, concrete, plaster, bark, soil and fabric, where dark means deep. Strong directional light, painted patterns or printed text end up in the height as if they were relief. For a hero asset, scanned or photogrammetry maps remain the reference.

Blender, Unity, Godot, three.js and glTF expect OpenGL (green up), the default. Unreal Engine expects DirectX (green down): tick DirectX on the Normal tab. The file name says which: rock_normal_gl.png or rock_normal_dx.png.

Because most materials are not metal, and a photo cannot tell bare metal from paint of the same color. Set it to 100 for bare metal, or use the light or dark mask for a texture where only some parts are metal, such as worn steel with bright bare patches.

One image with ambient occlusion in red, roughness in green and metalness in blue. glTF's metallic-roughness texture reads green and blue the same way and Unreal's ORM convention matches, so one file replaces three.

Yes, when your texture does. The tool checks the edges when it reads the file and, if they match, filters across them so every map wraps too. If the texture does not tile yet, make it seamless first with the free seamless texture generator.

The size of your texture, up to 4096 px on the long side. The preview runs on a 1024 px copy; the download recomputes everything at full size, with every radius scaled so it looks the same. Large textures take a few seconds.

Yes. No sign-up, no email, no watermark and no limit on how many textures you run. The only limits are 50 MB and 4096 px per texture, set by how much memory a browser tab can use.

More free tools

All free tools

Need realistic materials in a product configurator?

Want your own products configured and priced on your site? Get a free demo of one of them. Materials that read right under light are part of the setup. See configurator demos by industry.

Book a 20-min call