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.
-
-
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.
-
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
- 15 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.