So if the block has uncorrelated alpha and is complex enough in RGB, there’s not a lot you can do. Either RGB suffers or alpha suffers.
-
-
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...
-
if I were king of the world, I guess I'd make the 2 bit alpha-rotation field in BC7 select among four matrices at end of fetch in hardware, and have the matrices be set per texture. but ever since palettes were banished, people have been cold to such ideas.
- 12 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.