Legacy Normal Map Packing
Older BeamNG content and third party assets may use different normal map channel layouts depending on the compression format and type. Modern workflows standardize this to BC5 (RG) normal maps, but legacy formats may require conversion to work correctly.
Channel packing formats
Different formats store the X and Y components of the normal in different channels:
Modern standard normal map format. Stores X in Red and Y in Green.
Legacy format with swapped channels.
Swap channels: R = G, G = R
Old packing using Alpha for X and Green for Y.
Repack channels: R = A, G = G
Uncompressed formats typically using standard channel layout.
Ensure R = X, G = Y and save as *.normal.png
Modern standard
The engine expects:
- BC5 compression
- X → Red channel
- Y → Green channel
- OpenGL tangent space (Y+)
Converting legacy normal maps
When working with older assets, you may need to repack channels:
-
3Dc (G,R)
Swap channels → R = G, G = R
-
DXT5nm (A,G)
Move channels →
R = Alpha,
G = Green
-
Incorrect Y direction
If lighting appears inverted, flip the green channel (Y).
After conversion:
Recommended workflow
- Always use RGB 8-bit PNG as source
- Store normals in R (X) and G (Y)
- Keep textures in linear color space
- Avoid manually creating DDS unless necessary
Common issues
- Wrong lighting direction → Y channel inverted
- Flat or broken shading → incorrect channel packing
- Artifacts or compression issues → not using BC5
Notes
Do not rely on legacy formats like DXT5nm or 3Dc for new content. Always try to use Texture Cooker for correct rendering and optimal quality.