Miptex

From Valve Developer Community
Revision as of 09:20, 28 July 2024 by SirYodaJedi (talk | contribs)
Jump to navigation Jump to search

Miptex is an 8-bit texture format used by Quake Quake and GoldSrc GoldSrc. They can be stored individually with a .mip file, but most tools and engines expect them to be embedded in a BSP or WAD.

Miptex are always a multiple of 16, and contains the full-size texture plus 3 smaller mipmaps, although these mipmaps are only used by the software renderer (the OpenGL renderer uses the GPU to generate 32-bit mipmaps). Some programs also will use these mipmaps, such as TrenchBroom TrenchBroom.

Half-Life extends the miptex format to add a dedicated palette, instead of relying upon an external shared palette. This is an uncompressed 768 byte array of 256 24-bit RGB values, like Quake1-16px.png Quake's palette.lmp.

Technical

WAD2

The header of a WAD2 miptex lump can be represented by the following C struct (from 🖿client/bspfile.h in the Quake I source code release):

#define	MIPLEVELS	4
typedef struct miptex_s
{
	char		name[16];
	unsigned	width, height;
	unsigned	offsets[MIPLEVELS];		// four mip maps stored
} miptex_t;
Note.pngNote:unsigned is 32-bits.

It is then followed by raw 8-bit image data for each mipmap, at the offsets relative to the start of the file.

WAD3

Todo: Provide structs for paletted version of miptex.

Derivatives

Quake II Quake II encapsulates a modified version of miptex in a file format called WAL, which is always stored individually per texture and contains additional surface metadata for compilers. Variations of WAL, such as Daikatana WALs, M8, and M32, are used in other Quake II Engine Quake II Engine games, and add some additional features.