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.
-
-
BC7 has too many opaque-only modes (modes 0-3). Perhaps one of those modes could have been used for improved decorrelated alpha on complex blocks. RGB is good enough.
Show this thread -
Once your texture has an alpha channel you instantly lose half the modes in BC7. This is a flaw IMO. Most devs will be highly tempted to put in alpha data because BC7 is expensive (8bpp).
Show this thread -
Also, if your texture has decorrelated alpha, BC3 is stronger than you may think. BC3 has 5658 endpoints, while BC7 m4/5 have 5556 or 7776 endpoints.
Show this thread -
Some developers disable the mode 4/5 component rotation thing to avoid oddball artifacts with alpha textures, making these modes a little weaker.
Show this thread
End of conversation
New conversation -
-
-
it's not as bad as you describe, because each block can decide which channel is independent. with bc3 it's always the same channel that gets to "be alpha"
-
First, this is exactly the feature that I'm seeing some AAA developers disable (mode 4/5 component rotation) because it leads to different artifacts vs. the other modes. Even with rotation support, existing BC7 encoders are weak with uncorrelated alpha: http://richg42.blogspot.com/2018/10/bc7-with-decorrelated-alpha.html …
-
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.
- 19 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.