This article's documentation is for anything that uses the Source engine. Click here for more information.

PPL

From Valve Developer Community
(Redirected from Ppl)
Jump to navigation Jump to search

Stub

This article or section is a stub. You can help by expanding it.

(only in Source 2013 Multiplayer) (also in Garry's Mod)

PPL files are lightmaps (per-pixel lighting) generated by VRAD for prop_static models that have generatelightmaps enabled. Unlike brush lightmaps, PPL files are always uncompressed RGB888 (24-bit Wikipedia icon SDR), even when the map is compiled in HDR mode.

Cpp.pngCode Fix:Being always RGB888 is a VRAD limitation, not a format or engine one; a custom compiler could make DXT1, I8, or even RGBA16161616F lightmaps, and these would be properly loaded by the game.

To do so in the most basic manner, modify 🖿vradstaticprops.h to replace all mentions of IMAGE_FORMAT_RGB888 with the desired format. If used in conjunction with a modified VBSP, this could be replaced with if statements or switch cases that check for newly assigned static prop flags.

This is fixed in Garry's Mod Garry's Mod, which uses a separate _hdr.ppl for HDR lighting.
Icon-Important.pngImportant:To account for potential discrepancies between UV maps of LoD models, PPL files contain a lightmap for each LoD model. This can greatly increase the file size of a map if a lightmapped model has several LoD models!

A PPL file can be converted to uncompressed VTF(s) using Ficool2's proptexelvtf.exe (direct download), which can then be used for $lightmap.

File format

The format is super simple, and is as follows:

struct FileHeader_t
{
    int            version;
    unsigned int   checksum;
    unsigned int   imageFormat;
    int            meshCount;
    unsigned int   unused[4];

    // Immediately after, "meshCount" number of MeshHeader_t headers
};

struct MeshHeader_t
{
    unsigned int   lod;
    unsigned int   offset; // Offset from the top of the file to the raw image data in given image format (usually RGB888)
    unsigned int   length; // Length of the image data, including all mip maps
    unsigned int   width;
    unsigned int   height;
    unsigned int   unused[3];
};


See also

  • VHV, the equivalent for vertex-lit props