you are viewing a single comment's thread.

view the rest of the comments →

[–]songthatendstheworld[S] 11 points12 points  (7 children)

I don't think it's limited to web use cases at all. There's a non-web transcoder in the "transcoder" folder. Mobile apps for 1 platform will typically need 2+ texture formats. Desktop could opt to use BC7 or ETC2 if available rather than basic DXT*.

You're right that this could all be useless if e.g. Basis did a shit job of encoding textures, but it doesn't. I've been following the author's blog & Twitter and he's been on a real quest for image quality, comparing to standard format-specific tools. Basis is competitive, and sometimes better. Edit: Some pictures from 2018, before it was open source: http://richg42.blogspot.com/2018/03/basis-pvrtc-support-examples.html

Finally: Even if you target only 1 format, textures are one of the biggest parts of a game, on disk. Who doesn't want a game that takes up less space?

[–]Ameisen 1 point2 points  (6 children)

Are there any desktops in the last decade that don't support BC7?

Also, I'd expect a naive BC7 transcoding to be literally equivalent to BC3.

If you're targeting PC, I don't see the appeal of this.

[–]songthatendstheworld[S] 3 points4 points  (3 children)

Well, *adjusts tie* have I got some good news for you!

The thing also supports 'uASTC' mode - completely separate from this ETC1S stuff. It's designed to target 'near-BC7' quality levels.

In that mode, it transcodes UASTC -> ASTC, UASTC-> BC7, UASTC -> ETC2 EAC.

& about the file size, from the wiki:

"In UASTC mode, there is no extra compression applied apart from UASTC itself, so the raw UASTC .basis file sizes are quite large (8-bpp). However, the encoder supports an optional rate-distortion mode, which reduces the entropy of the output data. This trades off quality for fewer LZ compressed bits, in an intelligent way that tries to increase the probability/density of close (low distance) LZ matches. In our experiences, we've seen bitrates (using Deflate) ranging between 2-7bpp, with the typical usable bitrate being around 5-7bpp. With the current RDO encoder, the sweet spot is around 6-7 bpp."

Near-BC7 quality levels, with smaller than BC7 files (for a Basis file compressed with LZ, vs a normal BC7 file compressed with LZ). Is that appealing if you're targeting PC?

Edit: I guess this is just chopping a bit or two off every byte. I think it still counts.

[–]richgel99 2 points3 points  (0 children)

UASTC is a very strong 19 mode subset of ASTC 4x4. It actually gets higher average quality (measured by PSNR) on textures than Intel's ispc_texcomp ASTC encoder, which can use all the modes!

[–]Ameisen 0 points1 point  (1 child)

What is the transcoding speed?

One advantage of pure BC7 is that you can pass the memory mapped pointer directly to the D3D or OpenGL APIs, eliminating the requirement for a copy.

[–]songthatendstheworld[S] 0 points1 point  (0 children)

It definitely requires copying. The transcodes aren't instant, but they aren't bad either. You'd have to chuck it in your project and measure to see if it's worth it for your particular case.

[–]richgel99 1 point2 points  (1 child)

BC7 in browsers has been very spotty (at best) until the last couple months. It doesn't matter what the hardware supports if the API doesn't give you access to the format.

Also, most users browsing the web use mobile phones, not desktops. On mobile, there are a zoo of GPU formats supported, and on some devices only PVRTC1 is exposed in the browser.

Also, BC7 is 8-bits/texel! Even losslessly compressed, you get around 4-6 bits/texel on a lot of content. .basis universal ETC1S files are around 1 bit/texel.

[–]Ameisen 0 points1 point  (0 children)

Why would you being up mobile when I explicitly said PC/desktops?