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.
-
-
This problem is easily reproduced: just put in different non-trivial uncorrelated signals into RGB vs. A and watch the open source BC7 encoders trash alpha. I've been seeing this for months but I haven't had time to investigate it until now.
-
What's actually happening is the alpha signals developers are using with BC7 are either relatively simple or are highly correlated vs. RGB. If you stray too far then either RGB or alpha quality suffers. I found this while exhaustively testing and benchmarking existing encoders.
-
games I'm familiar with moved on from the concept of rgb vs alpha in textures years ago, and treat them as a bag of channels.
-
Yea, I hear you, but BC7 and the encoders don't look at texture data that way. There are tons of assumptions made. BC7 unfortunately doesn't support 3-4 separate encoding planes. If you ignore this and just jam in whatever something's going to get trashed.
-
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.
- 17 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.