PBR Texture Map Lab
Interpret the luminance or one RGB channel of a tile image as an assumed height field. Central height differences become unit-length normal vectors. Adjust contrast, blur, slope strength and the normal map green-channel direction. Roughness is an artistic estimate: a chosen base value plus a response to nearby height changes. Download base-color, height, normal and roughness PNGs with settings and edge diagnostics in a ZIP, and compare the result on a simple lit sphere. This tool cannot measure real depth, illumination, metallic properties or physical material parameters from one photograph.
Key features
- Luminance, red, green or blue as assumed height, with invert, contrast and 0–3px blur
- Normalized RGB normal map with adjustable slope and optional green-channel flip
- Estimated roughness map with separate base value and local-height detail influence
- Repeat-wrap or clamped neighbor sampling plus left/right and top/bottom color/height diagnostics
- Simple lit sphere preview and base-color, height, normal and roughness PNG/ZIP export
How to use
- Select a PNG, JPEG or WebP tile or load the periodic example.
- Choose a channel to interpret as height and adjust blur, contrast, normal strength and base roughness.
- Choose repeated-tile or clamped neighbor sampling and optionally flip the normal map green channel.
- Generate the maps and compare four channel previews and the simplified lit sphere.
- Inspect edge differences, then save individual PNGs or the ZIP with assumptions and diagnostics.
Use cases
- Compare normal direction and strength for prototype game or web 3D materials
- Inspect opposite tile edges before attempting a repeated surface
- Switch between OpenGL-style and DirectX-style green directions for a target engine
- Experiment with different roughness assumptions over the same base color
Frequently asked questions
Does one photo reveal real height and roughness?
No. You choose to interpret pixel brightness as height. Shadows, lighting and pigment can make brightness differ from depth, and roughness is an assumption derived from local brightness changes.
How are normal vectors generated?
Centered horizontal and vertical height differences are multiplied by the chosen strength, combined with z=1, then normalized to unit length. RGB encoding to 0–255 adds a little quantization error.
Does repeat-wrap automatically fix seams?
No. Repeat-wrap uses opposite-edge pixels as neighbors for normal and blur calculations. Different base-color or height values across opposite edges remain different and are reported in the diagnostics.
When should I flip the green channel?
Use it if your renderer expects the opposite normal Y direction. The default is green-up; flipping switches to green-down. Check the model UV orientation and renderer settings too.
Is the sphere a physically accurate PBR render?
No. It is a comparison preview with one directional light and a simplified highlight. It does not reproduce engine-specific color space, tone mapping, metallic response or lighting. Inspect final assets in your target engine.
Privacy
The image and generated maps are processed in browser memory without sending them to this tool's server API. This page does not automatically save files or settings to an account or browser storage. Downloads are saved to your device when you choose them.
Comments & questions