Co-owner of Binomial LLC, working on GPU texture interchange. Open source developer, Open Geospatial Consortium member, graphics programmer, former video game developer. Worked previously at SpaceX (Starlink), Valve, Ensemble Studios (Microsoft), DICE Canada.
The documentation is still coming online. This wiki page was just added: https://github.com/BinomialLLC/basis_universal/wiki/Shader-and-In-Loop-Deblocking
The Basis Universal GPU texture library v2.5 will have full .DDS file format support: 2D/cubemaps/texarrays+mips, BC1-7 and uncompressed, are usable on any GPU device/API. It uses near-lossless transcoding to ASTC LDR 4x4, and in cases when it can't do a format latent to latent transcode it falls back to real-time full-featured analytical encoding for other LDR formats using bc7f, etc1f etc. It…
We just added Trellis quantization to XUBC7 (supercompressed universal BC7) via AC truncation, as long as the PSNR drop is within a configurable channel-weighted PSNR window, and the PSNR doesn't fall below a lower limit. This helps at higher Q (DCT quality) levels. Trellis quant is another video method we've ported successfully into GPU texture supercompression.…
I've been doing this for fun as a side project, as ASTC is still way more important. (ASTC is the most deployed GPU format in the world, BC7 is niche by comparison.) It'll all be entirely open source: - XBC7 v1 (completed, integrating ongoing): Always lossless for mode config+RGBA endpoints, lossless or lossy weights using either lossless residual DPCM or lossy absolute or residual DCT. DPCM…
The next step is integration and connecting the BC7->ASTC LDR 4x4, ETC1, etc. transcoders into place in the Basis Universal library. Bitrate and quality at low Q's (Q=1/100) are exceptional vs. XUASTC LDR 4x4 (~1.5-3.0 bpp), and at Q=100 it's lossless in BC7 space at up to ~5.6 bpp or less depending on the content. Q=1 is totally usable, unlike XUASTC LDR where it falls apart because it's stuck…
This GPU texture supercompression method for weights (or "indices", or "selectors") uses neighboring blocks to predict the weight grid of the current block, before applying a forward 2D DCT/DST to the weights, quantizing the coefficients, and coding them. The current working prototype (which I've been showing live on X) creates weight predictions using weights from a small neighborhood of already…
“Shrek” was a launch title for the original Xbox that I worked on 25 years ago (in 2001). It was the first shipped game to use a technique called Deferred Shading. It wasn’t my first 3D game, though: I wrote Sandbox Studios’ software rasterizer and D3D7 renderers. https://xboxdevwiki.net/Shrek From the site - G-buffer visualization: Light accumulation - with static and dynamic stencil shadow…
We're feature complete. We're now on the downslope to shipping support for in-loop deblocking using a simple standardized reconstruction operator. The operator uses 1 tap or 5 taps (1 center, 2 up/down, 2 left/right) near ASTC block edges, and is fully compatible with mipmapping and bilinear/trilinear filtering. It can be applied in a simple GPU pixel shader or during transcoding. It's so simple…
I've ported Intel's ASTC compressor (in ispc_texcomp) to pure C for benchmarking and discovered this gem during the process. The swap() utility function for float values, located near the top, has a silly typo bug that casts the first value to int (!). It's used in several places on floating point values, including block errors (scores).…
Modern GPU texture compressors have a secret (but dangerous) superpower: prefiltering (blurring). Sometimes an encoder way overfits edges, causing overall perceptual quality to collapse. One way to overcome this is to blur the input and encode the block again. This is what we do in HDR on the very worst blocks (as measured by SSIM). It's paradoxical: blurring can boost perceptual quality.
Most game developers misunderstand ASTC: the largest block sizes were intended for the largest resolution content (4k) . GPU shader deblocking is easy: at the largest block sizes it's essentially free (because the bottleneck is typically memory bandwidth on mobile/tablets, not some ALU or cached tfetches). The largest block sizes collapse memory consumption/bandwidth enormously (0.89-1.28 bpp for…
Let's say you have multiple petabytes of JPEG's/WebP/etc. content and you need (not want - because your competitors are doing it already) to add GPU texture support to your app. What do you do? Encode 2-3x times without supercompression (BC7+ASTC, maybe ETC1 too, no supercompression): utterly impractical, explodes (8x-16x or more) overall content size. Even 1 format (say ASTC) without…
Binomial has shown that image compression and GPU texture compression aren't separate fields . They're the same field, and the tools from one transfer directly to the other. XUASTC is currently using JPEG-style DCT (from 1992) on ASTC weight grids: https://github.com/BinomialLLC/basis_universal/wiki/XUASTC-LDR-Weight-Grid-DCT We ported JPEG-style coding into ASTC, even preserving how libjpeg-style…
ASTC GPU texture blocks form a latent image space where JPEG techniques still work . (So does BC7.) Here's a XUASTC LDR 4x4 (arithmetic vs. Zstd profile) bit rate vs. distortion graph across 151 test textures/images (the same test corpus we used to create bc7e.ispc ). Distortion was measured using PSNR-HVS-M . XUASTC LDR 4x4 transcodes to standard ASTC LDR 4x4 in memory/VRAM (8.0 bpp). It supports…
Binomial LLC has forked the Khronos Group's KTX-Software repo, to use as a staging ground for next-generation GPU texture compression technology: https://github.com/BinomialLLC/KTX-Software-Binomial-Fork/
ASTC's complexity has created an ecosystem where correctness is an ongoing research problem rather than a fully solved one. See: https://github.com/BinomialLLC/basis_universal/wiki/List-of-Available-Software-ASTC-Decoders
The basisu command line tool has a new option, -peek , which opens any standard ARM LDR/HDR .ASTC texture file , unpacks each block, and computes a bunch of statistics about the exact ASTC configurations the blocks used. This is how we found out that Intel's ispc_texcomp's ASTC encoder is, for all practical purposes, broken.…
See here: https://documentation-service.arm.com/static/67ca1a5ece2747241fced502 More general info on the real-world complexities of decoding ASTC are here: https://github.com/BinomialLLC/basis_universal/wiki/List-of-Available-Software-ASTC-Decoders
1. ASTC is now the king : In billions of devices. Everything else=fallback, including BC7. To us, BC7 is essentially a greatly simplified ASTC, but with some p-bits. 2. At multi-petabyte ( planetary ) scales: Supercompression bitrate=Matters enormously. Notably, game developers (who have been using compressed textures the longest) don't work at scales this large, so the approaches and techniques…