Legacy Normal Maps

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:

Format
XY Channels
Description
Conversion to Standard (BC5 RG)
Format
GFXFormatBC5
XY Channels
R, G
Description
Modern standard normal map format. Stores X in Red and Y in Green.
Conversion to Standard (BC5 RG)
No conversion needed
Format
GFXFormat3Dc
XY Channels
G, R
Description
Legacy format with swapped channels.
Conversion to Standard (BC5 RG)
Swap channels: R = G, G = R
Format
GFXFormatDXT5nm
XY Channels
A, G
Description
Old packing using Alpha for X and Green for Y.
Conversion to Standard (BC5 RG)
Repack channels: R = A, G = G
Format
PNG/JPG/BMP
XY Channels
R, G
Description
Uncompressed formats typically using standard channel layout.
Conversion to Standard (BC5 RG)
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.
Last modified: April 24, 2026

Any further questions?

Join our discord
Our documentation is currently incomplete and undergoing active development. If you have any questions or feedback, please visit this forum thread.