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.
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.
 Garry's Mod, which uses a separate
 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!
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) mNo edit summary | Robotboy655 (talk | contribs)   (docuement format) | ||
| (11 intermediate revisions by one other user not shown) | |||
| Line 1: | Line 1: | ||
| {{stub}}{{src topicon}}{{src13mp|only}} {{gmod|also}}   | {{stub}}{{src topicon}}{{src13mp|only}} {{gmod|also}}   | ||
| '''PPL''' files are lightmaps ('''p'''er-'''p'''ixel '''l'''ighting) generated by [[VRAD]] for {{ent|prop_static}} models that have {{code|generatelightmaps}} enabled. Unlike brush lightmaps, PPL files are always 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. | |||
| 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]]. | |||
| This is fixed in {{gmod|2}}, which uses a separate {{code|_hdr.ppl}} for HDR lighting.}} | |||
| {{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 <!--[https://cdn.discordapp.com/attachments/235121530609205249/797996930956656680/proptexelvtf.exe -->[https://files.gamebanana.com/bitpit/proptexelvtf.exe Ficool2's proptexelvtf.exe] (direct download), which can then be used for {{ent|$lightmap}}. | |||
| == File format == | |||
| The format is super simple, and is as follows: | |||
| <source lang="cpp">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]; | |||
| }; | |||
| </source> | |||
| == See also == | |||
| * [[VHV]], the equivalent for vertex-lit props | |||
| [[Category:File formats]] | [[Category:File formats]] | ||
| [[Category:Image formats]] | |||
Latest revision as of 19:15, 24 January 2025
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.
 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.
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.
 Garry's Mod, which uses a separate
 Garry's Mod, which uses a separate _hdr.ppl for HDR lighting. 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!
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!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

