A reliable workflow
Prepare a source that can represent height
Begin with an image whose brightness can plausibly represent height, remove directional lighting, and decide whether dark or light should be raised.
Tune at the asset's actual texel density
Tune blur and strength at target texel density, inspect multiple primitive shapes, then check a repeating grid if the material will tile.
Finish the decision in the target renderer
Export lossless PNG, import as non-color normal data, verify Y direction, and iterate from the target renderer rather than the 2D thumbnail.
1. Choose a source that can support height
The first decision in how to create a normal map is whether the source represents relief. A purpose-made grayscale height map is the strongest input: define clearly whether white is high or low. A color texture can be used only as an estimate because pigment, illumination, reflections, and transparency also change brightness. Remove broad shadows and highlights, select the channel that best follows structure, and keep an untouched original. If two equally plausible height interpretations exist, the image alone does not contain enough evidence; paint a height map or bake from geometry.
2. Generate slopes with restrained settings
A reliable method for how to create a normal map begins with low strength, an explicit Y convention, and a filter chosen for the source. Scharr offers balanced response around diagonal features; Sobel may match an existing workflow. Apply only enough blur to suppress noise smaller than the asset's final texel footprint. Use clamp for isolated textures and wrap for genuinely tileable height fields. Invert height before calculating slopes when raised and recessed areas are reversed. Flat source regions should remain near a neutral forward-facing normal rather than filling with random color variation.
3. Inspect direction, seams, and scale
Learning how to create a normal map includes learning how to reject one. Use a known asymmetric groove and move a light left-to-right and top-to-bottom. Inspect a sphere for abrupt direction changes, a plane for the intended UV scale, and a 3×3 repeat for border seams. Zoom out to a mip-like view to catch shimmer from high-frequency noise. Do not judge solely from the 2D purple image: both Y conventions look similar, and a strong map can look impressive while producing unstable grazing-angle lighting.
4. Export and verify in the destination
The final step in how to create a normal map is a controlled import. Export lossless PNG, name the Y+ or Y− convention, and classify the texture as non-color normal data. Connect it through the correct normal-decoding path, use the UV set and tangent basis intended for the asset, then inspect material strength, mipmaps, and platform compression. Compare the browser preview with the final mesh under the same directional test. Preserve the source and settings so a later correction can be regenerated instead of destructively edited from an undocumented file.