Convection Texture Tools is now roughly equal quality-wise with NVTT at compressing BC7 textures despite being about 140 times faster, making it one of the fastest and highest-quality BC7 compressors.
How this was accomplished turned out to be simpler than expected. Recall that Squish became the gold standard of S3TC compressors by implementing a "cluster fit" algorithm that ordered all of the input colors on a line and tried every possible grouping of them to least-squares fit them.
Unfortunately, using this technique isn't practical in BC7 because the number of orderings has rather extreme scaling characteristics. While 2-bit indices have a few hundred possible orderings, 4-bit indices have millions, most BC7 mode indices are 3 bits, and some have 4.
With that option gone, most BC7 compressors until now have tried to solve endpoints using various types of endpoint perturbation, which tends to require a lot of iterations.
Convection just uses 2 rounds of K-means clustering and a much simpler technique based on a guess about why Squish's cluster fit algorithm is actually useful: It can create endpoint mappings that don't use some of the terminal ends of the endpoint line, causing the endpoint to be extrapolated out, possibly to a point that loses less accuracy to quantization.
Convection just tries cutting off 1 index at each end, then 1 index at both ends. That turned out to be enough to place it near the top of the quality benchmarks.
Now I just need to add color weighting and alpha weighting and it'll be time to move on to other formats.
Friday, March 30, 2018
Subscribe to:
Posts (Atom)