- From: Chris Blume (ProgramMax) <programmax@gmail.com>
- Date: Mon, 13 Oct 2025 14:07:04 -0400
- To: "Portable Network Graphics (PNG) Working Group" <public-png@w3.org>
- Message-ID: <CAG3W2KdSFGMCxemuFqf5Nd=cNazOWXPd_xd3-ykdQsoNQ54V7A@mail.gmail.com>
A new whitepaper was just released: Variable-Rate Texture Compression: Real-Time Rendering with JPEG <https://arxiv.org/abs/2510.08166>. As part of our 5th Edition work, we're investigating options for better compression. JPEGs and PNG share a similar issue where you cannot (currently/previously) index directly into a pixel and decode just it. (Or perhaps into a macroblock, etc.) Typically, you have to decode the entire file and store it in memory. This means the image is not compressed while in use. In some cases that is fine. Perhaps the image is decoded once and then stored as raw data while being displayed, anyway. But in other cases this isn't fine, such as games. In 3D rendering, texel lookup counts are overwhelming. There is a reason GPUs have faster RAM than what we can buy for our system RAM, leading it by several years. Keeping that data compressed helps because it is more likely to stay in cache. But given the nature of texel lookups, it also needs to be indexable. I haven't yet read the paper. I assume it keeps the Huffman tree in memory and stores offsets for each macroblock. This is vaguely related to our investigation of DEFLATE restart markers. I doubt we'll want to insert that many restart markers, though. If my guess is correct, adding the index to JPEG is fairly trivial and doesn't increase file size much. But since DEFLATE can look back into its compression window, we would sacrifice compression ratio at each restart. It also hurts PNG filtering. So while vaguely related, the two solutions do not apply equally in a given scenario.
Received on Monday, 13 October 2025 18:07:19 UTC