Convert grayscale height maps into tangent-space normal maps. Adjust strength and coordinate system (OpenGL / DirectX) for your target engine. Real-time 3D preview. All processing happens in your browser.
Click and drag to rotate • Scroll to zoom
Drag and drop any grayscale height or displacement map: PNG, JPEG, WebP, or BMP. The tool loads your map for gradient analysis. Nothing is uploaded to a server.
Adjust strength to control normal intensity, and toggle DirectX Y-inversion for Unity/Unreal Engine compatibility. All changes update instantly in the preview.
Inspect the normal map on a 3D sphere with adjustable lighting. Rotate to see how surface detail reacts to light. Download as PNG for Blender, Unity, Unreal, or any 3D software.
The normal map is generated from your height map using gradient detection. Here's how the conversion works.
The tool samples neighboring pixel luminance from your height map to calculate surface slope in both X and Y directions. Brighter-to-darker transitions become sloped normals, while flat areas produce outward-facing normals.
Unlike base-color-to-normal which uses edge detection, height-to-normal directly reads the grayscale values as elevation data. White = high = slopes facing downward, black = low = slopes facing upward. This produces more physically accurate normals from actual height data.
Use the "Invert Y" toggle for DirectX engines (Unity, Unreal Engine, 3ds Max). Leave unchecked for OpenGL engines (Blender, Godot, Maya). The difference is only in the green channel's vertical direction.
The generated normal map is applied to a Three.js mesh alongside your height map as a reference. Rotate, zoom, and adjust lighting to verify surface detail and bump direction before downloading.
Follow this quick workflow to convert any grayscale height or displacement map into a usable normal map for PBR materials.
Use a pure grayscale height map where white = high elevations (peaks, ridges) and black = low elevations (valleys, crevices). You can generate height maps from base color images using our BaseColor to PBR Generator, or use height maps exported from ZBrush, Blender, or Substance Designer.
Start with default strength for subtle surface relief, or increase for more dramatic bump effects. If your target engine is Unity or Unreal Engine, enable Invert Y (DirectX). For Blender, Godot, or Maya, leave it unchecked (OpenGL). The 3D preview updates instantly so you can see the result.
Check the 3D preview, rotate the mesh and watch how surface detail catches the light. Ensure bumps appear to rise outward, not sink inward (if inverted, toggle Invert Y). When satisfied, download the normal map as PNG. Import directly into your PBR material's normal map slot in your engine or 3D software.
The Height to Normal Map converter is one step in a complete PBR material workflow. Combine it with these free tools.