BC7 has a weakness: There’s only a single alpha mode that supports 2 subsets (mode 7). And it assumes alpha is correlated with RGB. The other alpha modes are only 1 subset modes, so they can’t handle complex RGB blocks well.
-
-
If you do treat your textures as a bag of channels, you should try to intelligently reorder the channels. Try to ensure that RGB is correlated and that each block's RGB vectors lie along 1-2 lines, etc.
-
If you pack some fully independent data to alpha channel and need consistent high quality result for that data, you choose BC3. This is where I would still choose BC3 over BC7. Not a problem since all GPUs supporting BC7 support BC3 as well. No shader/codee changes needed.
-
Yes, exactly. Except now your RGB data only has a single subset (leading to blocky artifacts). But at least your alpha channel doesn't get mangled.
-
Other options: Configure your BC7 encoder to only use modes 4,5, which may give you higher quality (due to component rotation). Or, modify your BC7 encoder to favor modes 4,5 more often.
-
have done that and it's ok but BC7 can't encode any single channel as well as BC3 encodes alpha.
-
the old trick of encoding Y in a BC3 A, and UVA in the RGB, is still probs the best bet for explicitly RGB photo imagery, except for fact that filter isn't srgb
-
but as long as you need matrix multiply after fetch, may as well calculate PCA of entire image and use that as matrix. for typical rainbowy sample images it's close to YUV but more dichromatic photos (e.g. textures in games) have more interesting PCA axes
-
I remember that matrix multiply after fetch was expensive in PS3/XB360 gen, but they say ALU is improving so much faster than BW these days...
- 13 more replies
New conversation -
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.