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.
Sunday, November 28, 2021
Lena is Retired
Wednesday, February 17, 2021
Average rate-distortion curves for bc7enc_rdo
bc7enc_rdo is now a library that's utilized by the command line tool, which is far simpler now. This makes it trivial to call multiple times to generate large .CSV files.
If you can only choose one set of settings for bc7enc_rdo, choose "-zn -U -u6". (I've set the default BC7 encoding level to 6, not sure that's checked in yet.) I'll be making bc7e.ispc the new default on my next checkin - it's clearly better.
All other settings were the tool's defaults (linear metrics, window size=128 bytes).
Saturday, February 13, 2021
First RDO LDR ASTC 6x6 encodings
Left=Non-RDO, 37.3 dB, 2.933 bits/texel (Deflate)
First-ever RDO ASTC encodings
I used astcenc to generate a .astc file, loaded it into memory, then used the code in ert.cpp/.h with a custom callback that decodes ASTC blocks. All the magic is in the ERT. Here's a match injection histogram - this works: 1477,466,284,382,265,398,199,109,110,87,82,105,193,3843
Friday, February 12, 2021
bc7e.ispc integrated into bc7enc_rdo
4.53 bits/texel (Deflate), 37.696 dB PSNR
BC7 mode histogram:
0: 3753
1: 15475
2: 1029
3: 6803
4: 985
5: 2173
6: 35318
7: 0
Updated bc7enc_rdo with improved smooth block handling
The command line tool now detects extremely smooth blocks and encodes them with a significantly higher MSE scale factor. It computes a per-block mask image, filters it, then supplies an array of per-block MSE scale factors to the ERT. -zu disables this.
The end result is much less significant artifacts on regions containing very smooth blocks (think gradients). This does hurt rate-distortion performance.
Thursday, February 11, 2021
Dirac video codec authors on Rate-Distortion Optimization
http://dirac.sourceforge.net/documentation/algorithm/algorithm/rdo.htm
"Perceptual fudge factors are therefore necessary in RDO in all types of coders." "There may be no common measure of distortion. For example: quantising a high-frequency subband is less visually objectionable than quantising a low-frequency subband, in general. So there is no direct comparison with the significance of the distortion produced in one subband with that produced in another. This can be overcome by perceptual weighting.."
So if you take two RDO texture encoders, benchmark them, and look at just their PSNR's, you are possibly fooling yourself and others. One encoder with higher PSNR (and better R-D performance) may visually look worse than the other. It's part art, not all science.
With bc7enc_rdo, I wanted to open source *something* usable for most textures with out of the box settings, even though I knew that its smooth block handling needed work. Textures with skies like kodim03 are challenging to compress without manually increasing the smooth block factor. kodim23 is less challenging because its background has some noise.
Releasing something open source with decent performance that works OK on most textures is more important than perfection.

















