stb_dxt.h PCA: 35.754 dB, .551 us/block
rgbcx.h PCA: 35.794, .651
rgbcx.h PCA+inset: 35.925, .640
rgbcx.h 2D LS+inset+opt round: 35.920 dB, .541
rgbcx.h bounds+inset+XY covar: 35.836 dB, .472
This is across 100 textures, so even small avg. improvements are significant. Amazingly, the inset method (a few lines of code) buys rgbcx.h PCA .131 dB! All encoders should be doing this. You *must* pay attention to every little detail in these texture encoders.
Quality is performance in competitive texture block encoding, so even small boosts in quality allow us to dial down the # of total orders to check for the same average quality. This leads to a more competitive encoder.
Methods:
This is across 100 textures, so even small avg. improvements are significant. Amazingly, the inset method (a few lines of code) buys rgbcx.h PCA .131 dB! All encoders should be doing this. You *must* pay attention to every little detail in these texture encoders.
Quality is performance in competitive texture block encoding, so even small boosts in quality allow us to dial down the # of total orders to check for the same average quality. This leads to a more competitive encoder.
Methods:
- bounds+inset+XY covar method is Castano's/van Waveren's.
All encoders should be applying the "inset" method describes in this paper, because from a quantization perspective it makes perfect sense.
- 2D LS is Humus's method, ported to mostly integer math, with added inset+optimal rounding to 565:
- stb_dxt.h and rgbcx.h PCA is 3D integer PCA (3x3 covar+4 power iters, pick 2 colors along principle axis).
- PCA+inset+optimal rounding does PCA, picks 2 colors, then lerps the 2 colors by 1/16 or 15/16, then optimal rounds to 565.
No comments:
Post a Comment