PBR Map Generator

VIEW MODE SPHERE
READY|100% CLIENT-SIDE
1024×1024 · 5 MAPS · WEBGL

Frequently Asked Questions

Drop in a single photo or albedo texture and the generator derives normal, roughness, ambient occlusion, height and metallic from that same source in one pass. Each map keeps its own controls, so you can tune contrast or strength per map while the 3D preview shows the whole material together. When it looks right, one download gives you the complete PBR material set as a single ZIP.

Yes, but they are inferred, not measured. Roughness is derived from local brightness and contrast — specular highlights sit on the glossiest parts — while metallic comes from a threshold that isolates the bright, desaturated regions bare metal produces. A photo cannot know a surface's real reflectance, so treat the sliders as a fast starting point and check the result against reference. For painted, plastic or stone surfaces the metallic map should end up almost entirely black.

It is free with no signup, no email and no account. There is no watermark, no resolution cap and no limit on how many materials you export. Nothing is metered because nothing runs on our servers — the work happens on your own GPU.

Your image is never uploaded. Every map is generated client-side on your GPU through WebGL, and the file stays in your browser's memory from the moment you drop it until you close the tab. Nothing is stored, logged or sent anywhere, which makes the tool safe for client work and NDA material.

Stair-stepping on smooth slopes is 8-bit quantization: 256 height levels spread across a gentle gradient become visible terraces once the mesh is actually displaced. The height map here exports as a true 16-bit PNG, so you get 65,536 levels and the banding disappears. If terracing survives a 16-bit export, the cause is usually too little mesh subdivision or an over-cranked displacement scale rather than the map itself.

In Blender, wire roughness and metallic straight into the Principled BSDF, run normal through a Normal Map node, and send height to the Material Output Displacement socket — set every map except base color to Non-Color. In Unreal, import the set, use the Normalmap compression setting for the normal and untick sRGB on the grayscale maps before plugging them into the matching material inputs. Unity's Lit shader wants smoothness rather than roughness, so invert the roughness map on import or supply it through the smoothness source your shader expects. AO is multiplied into ambient lighting in all three, so it belongs on the occlusion input rather than on base color.