Texture Cooker

This feature has been introduced with version 0.20, with the purpose of automatically process and convert textures files provided as PNG (Portable Network Graphics) into DDS (DirectDraw Surface) texture files.

Workflow

The Texture Cooker will only convert 8 bit per color (24-bit) PNG files that are following the following naming convention:

Slot
PNG Format
Color Space
Postfix
DDS Format
Slot
Base Color
PNG Format
RGB 8-bit
Color Space
sRGB
Postfix
*.color.png
DDS Format
BC7 sRGB
Slot
Detail Base Color
PNG Format
RGB 8-bit
Color Space
sRGB
Postfix
*.color.png
DDS Format
BC7 sRGB
Slot
Color Palette
PNG Format
RGB 8-bit
Color Space
Linear
Postfix
*.data.png
DDS Format
BC7
Slot
Emissive
PNG Format
RGB 8-bit
Color Space
Linear
Postfix
*.data.png
DDS Format
BC7
Slot
Metallic
PNG Format
Grayscale 8-bit
Color Space
Linear
Postfix
*.data.png
DDS Format
BC4
Slot
Detail Metallic
PNG Format
Grayscale 8-bit
Color Space
Linear
Postfix
*.data.png
DDS Format
BC4
Slot
Roughness
PNG Format
Grayscale 8-bit
Color Space
Linear
Postfix
*.data.png
DDS Format
BC4
Slot
Detail Roughness
PNG Format
Grayscale 8-bit
Color Space
Linear
Postfix
*.data.png
DDS Format
BC4
Slot
Opacity
PNG Format
Grayscale 8-bit
Color Space
Linear
Postfix
*.data.png
DDS Format
BC4
Slot
Detail Opacity
PNG Format
Grayscale 8-bit
Color Space
Linear
Postfix
*.data.png
DDS Format
BC4
Slot
Ambient Occlusion
PNG Format
Grayscale 8-bit
Color Space
Linear
Postfix
*.data.png
DDS Format
BC4
Slot
Detail Ambient Occlusion
PNG Format
Grayscale 8-bit
Color Space
Linear
Postfix
*.data.png
DDS Format
BC4
Slot
Clear Coat
PNG Format
Grayscale 8-bit
Color Space
Linear
Postfix
*.data.png
DDS Format
BC4
Slot
Height
PNG Format
Grayscale 8-bit
Color Space
Linear
Postfix
*.data.png
DDS Format
BC4
Slot
Normal
PNG Format
RGB 8-bit
Color Space
Linear
Postfix
*.normal.png
DDS Format
BC5
Slot
Detail Normal
PNG Format
RGB 8-bit
Color Space
Linear
Postfix
*.normal.png
DDS Format
BC5
Slot
Clear Coat Normal
PNG Format
RGB 8-bit
Color Space
Linear
Postfix
*.normal.png
DDS Format
BC5

  • Normal maps use OpenGL tangent space (Y+).
  • Grayscale textures reduce VRAM usage and should be preferred for data maps. Avoid indexed/palette PNG (PNG-8). Use standard 8-bit RGB or grayscale. Data textures must be linear (do not apply sRGB/gamma correction).

Texture Size Rules

  • Minimum size: Avoid anything below 16×16, smaller textures are not supported by the D3D11 renderer.
  • Use power-of-two resolutions: 128, 256, 512, 1024, 2048, 4096, etc.
  • Avoid unnecessarily large textures, use debug tools to determine if the resolution is appropriate.

Example of textures that would be converted to BC7 sRGB Example of textures that would be converted to BC7 sRGB

The automatic conversion happens as soon the game has to load a texture file that matches the requirements mentioned above.

During the conversion process, a temporary texture will be applied to the object(s) using that texture. The texture will appear once the conversion has completed.

The conversion time depends on the size of the textures, and the speed of your machine. The game’s performance will temporarily slow down during the conversion.

Locating the converted textures

The converted texture files will always be located inside Userfolder/current/temp, at the same relative location of your original texture file. (Learn more about the user folder here )

If the original file is at

levels/GridMap/test

the converted file will be found in

Userfolder/current/temp/levels/GridMap/test


Usage in mods

When publishing a mod, only include the converted DDS texture files with it. Do not include the original PNG texture files!

Not including the cooked textures with your mod will cause them having to be cooked on the machines of every user that is going to use your mod

Place the converted texture files in the same location of the originals, no other changes are required. Even though your materials file will be pointing to the original PNG file, the game will automatically detect the converted DDS files (if exists) and load it instead.

Prefer using source textures with the correct suffix: *.color.png, *.normal.png, *.data.png

Do not reference .color.dds, .normal.dds, or .data.dds directly in materials. Always reference the PNG — the game will automatically use the cooked DDS if available.


Materials.json

When manually specifying textures in a main.materials.json file (e.g. creating a skin for a vehicle), point to the PNG texture file in the texture path. The game will automatically use the converted DDS texture file if it exists, otherwise it will first proceed to convert the PNG.

PNG specified in the material file, and console message indicating the successful import and conversion to DDS PNG specified in the material file, and console message indicating the successful import and conversion to DDS

Always keep an eye on the console to see the status of the conversion process, and eventual errors.

Paths and Naming

  • Use full paths /vehicles/mycar/body.color.png
  • Always include the .png extension
  • Avoid spaces in file names my_texture.color.png

Using incorrect paths or naming may prevent the Texture Cooker from detecting and converting textures properly.


Last modified: April 22, 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.