Understanding PBR and Normal Maps
Physically Based Rendering (PBR) has become the industry standard for creating realistic materials in games, VFX, and architectural visualization. Normal maps are a critical component of the PBR workflow, working alongside other texture maps to create convincing surface detail without adding geometry.
The PBR Texture Set
A complete PBR material typically includes:
Core Maps
- Albedo/Base Color - Pure surface color without lighting information
- Normal Map - Surface detail and directionality
- Roughness - Surface microsurface variation
- Metallic - Whether surface behaves as metal or dielectric
- Ambient Occlusion (AO) - Soft shadows in crevices
How Normal Maps Fit In
Normal maps add geometric detail by influencing how light interacts with the surface. They work in tandem with roughness maps - a detailed normal map with uniform roughness creates different results than a smooth normal map with varying roughness.
Creating Consistent Texture Sets
When generating textures from a height map or photographs, maintain consistency across all maps:
From Height Maps
Height Map Input
↓
├─→ Normal Map (surface angle data)
├─→ Displacement Map (actual geometry deformation)
├─→ AO Map (cavity darkening)
└─→ Roughness Map (edge variation)Use the same source height map for all derivative maps to ensure they align perfectly.
From Photographs
The photometric stereo method (4-directional photos) can generate:
- High-quality normal maps
- AO approximation from shadow analysis
- Roughness hints from specular variation
Engine Integration Best Practices
Unity Setup
- Import Settings: Set texture type to "Normal Map"
- Format: BC5 compression for optimal quality
- Mipmap Generation: Enable for proper LOD behavior
- sRGB: Disable (normal maps are linear data)
Unreal Engine Setup
- Compression: TC_Normalmap preset
- sRGB: Automatically disabled
- Flip Green Channel: May be needed depending on source
- LOD Group: Shared with other material textures
Common Issues and Solutions
Seam Visibility
Problem: Visible seams when tiling normal maps
Solution:
- Ensure height map tiles seamlessly before generation
- Use offset controls to verify tiling in 3D preview
- Check that all PBR maps tile at the same frequency
Intensity Mismatch
Problem: Normal map appears too strong or weak
Solution:
- Adjust strength during generation rather than in-engine
- Match normal intensity to roughness values
- Reference real-world materials for appropriate detail levels
Color Space Errors
Problem: Pink or incorrect coloring
Solution:
- Verify sRGB is disabled for normal maps
- Check that tangent space matches between software
- Confirm texture compression settings
Workflow Optimization Tips
1. Name Consistently
Use a clear naming convention:
material_name_albedo.png
material_name_normal.png
material_name_roughness.png
material_name_metallic.png
material_name_ao.png2. Resolution Guidelines
Match texture resolution across all maps:
- 1K (1024): Mobile, background objects
- 2K (2048): Standard props, environments
- 4K (4096): Hero assets, close-up views
3. Test Early
Import and test materials in your target engine early in the process. Lighting behavior varies between engines, and what looks correct in one may need adjustment in another.
Performance Considerations
Normal maps have minimal runtime performance impact compared to additional geometry. However:
- Compression matters: Use engine-appropriate compression (BC5/DXT5 for PC, ASTC for mobile)
- Mipmap properly: Reduces bandwidth and improves visual quality at distance
- Don't over-detail: Extremely fine detail gets lost with mipmapping
Generating All Maps at Once
Modern normal map generators can create multiple PBR maps from a single source:
- Load height map or photos
- Configure strength and filtering
- Preview in 3D with all maps applied
- Export complete PBR set in consistent format
This ensures:
- Perfect alignment between maps
- Consistent texel density
- Matching detail levels
- Synchronized tiling behavior
Conclusion
Normal maps are most effective when integrated thoughtfully into a complete PBR workflow. By maintaining consistency across all texture maps, using appropriate engine settings, and testing early, you can create materials that look realistic across all lighting conditions and viewing distances.
The key is treating normal maps not as isolated textures, but as part of a cohesive material system where each map contributes specific information about surface behavior.
