PPL: Difference between revisions
Jump to navigation
Jump to search
Code 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 (but HDR lightmaps may require shader changes to work correctly).
Garry's Mod, which uses a separate
Important: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!
SirYodaJedi (talk | contribs) No edit summary |
SirYodaJedi (talk | contribs) No edit summary |
||
| (2 intermediate revisions by the same user not shown) | |||
| Line 2: | Line 2: | ||
'''PPL''' files are lightmaps ('''p'''er-'''p'''ixel '''l'''ighting) generated by [[VRAD]] for {{ent|prop_static}} models that have {{code|[[$lightmap|generatelightmaps]]}} enabled. Unlike brush lightmaps, PPL files are always uncompressed RGB888 (24-bit {{w|Standard dynamic range|SDR}}), even when the map is compiled in [[HDR]] mode. | '''PPL''' files are lightmaps ('''p'''er-'''p'''ixel '''l'''ighting) generated by [[VRAD]] for {{ent|prop_static}} models that have {{code|[[$lightmap|generatelightmaps]]}} enabled. Unlike brush lightmaps, PPL files are always uncompressed RGB888 (24-bit {{w|Standard dynamic range|SDR}}), even when the map is compiled in [[HDR]] mode. | ||
{{code 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. | {{code 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 (but HDR lightmaps may require shader changes to work correctly). | ||
To do so in the most basic manner, modify {{file|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]]. | To do so in the most basic manner, modify {{file|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]]. | ||
| Line 9: | Line 9: | ||
{{modernImportant|To account for potential discrepancies between [[UV map]]s of [[$lod|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!}} | {{modernImportant|To account for potential discrepancies between [[UV map]]s of [[$lod|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 | A PPL file can be converted to uncompressed [[VTF]](s) using [https://ficool2.github.io/HammerPlusPlus-Website/tools.html Ficool2's proptexelvtf.exe], which can then be used for {{ent|$lightmap}}. | ||
== File format == | == File format == | ||
Latest revision as of 07:34, 25 November 2025
(in all games since
) (also in
)
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
SDR), even when the map is compiled in HDR mode.
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.
_hdr.ppl for HDR lighting.A PPL file can be converted to uncompressed VTF(s) using Ficool2's proptexelvtf.exe, 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