Most papers and encoders focus on opaque performance with BC7, but alpha textures are very important too. BC7's alpha support is somewhat weaker than opaque, especially with alpha signals that are uncorrelated vs. RGB. It only has a single 2 subset mode that can handle alpha, with limited color precision (555.1 with 2-bit indices).
This test exercises each codec in a different way than my previous opaque-only tests. Modes 0-3 are useless with transparent blocks.
I've finished the alpha path in my new non-RDO BC7 encoder. Results on a 4k test texture containing random 4x4 blocks (both in RGB and A) picked from thousands of textures in my corpus:
My encoder - higher quality settings:
Time: 42.4 secs
RGB: 46.058 RGB Avg. PSNR
A: 44.521 PSNR
My encoder - lower quality settings:
Time: 21.9 secs
RGB: 45.986
A: 44.539
My encoder - faster settings:
Time: 12.8 secs
RGB: 45.850
A: 43.949
ispc_texcomp slow:
Time: 155.4 secs
RGB: 45.826
A: 44.216
ispc_texcomp basic:
Time: 45.6 secs
RGB: 45.820
A: 44.188
ispc_texcomp fast:
Time: 23.3 secs
RGB: 45.647
A: 44.307
This was with linear colorspace metrics, and benchmarking was on a single thread. The RGB/A stats are PSNR (higher is better). (In case you're wondering, SSIM and PSNR are highly correlated with block compression, so I usually use PSNR until I start doing whole-texture stuff with RDO.)
I'm now ~2x faster at higher quality vs. the fastest CPU BC7 encoder I'm aware of, and there are several easy optimizations left. And this is before enabling perceptual metrics.
No comments:
Post a Comment