The "Rosetta stone" for a basic universal GPU format is a subset of ETC1 we call ETC1S/ETC1SA. It uses no flips and disables individual mode, i.e. each 4x4 block has a single 5:5:5 color, a 3-bit table index, and 16 selectors. This is easily transcodable to all other GPU formats. I've blogged and presented about this before over the past year.
This baseline format's quality is BC1/ETC1 (not awesome but good enough for web). Alpha uses two ETC1S blocks. Transcoding to PVRTC needs two passes. The PVRTC transcode step's selector pass is the slowest part. With this approach any RDO ETC1 solution can be a universal solution
That's the basic idea. None of this is theory, we have all of this working now and are already shipping it. We'll be open sourcing our transcoders at some point (unsure exactly when), so others can take crunch's ETC1 solution and hook it up to our stuff.
You can see some example transcodes to various GPU formats from a single source file here. I'll post more soon.
We're being very open about this because we're trying to establish some kind of standard around this format. The wide distribution of GPU-independent texture data on the web is inevitable.
The encoder can either be dumb and not aware of the final transcoding steps, or it can actively predict what's going to happen when the data is transcoded to various formats and try to boost quality in a balanced fashion. Our encoder does this.
The risk of us releasing this info now is that somebody else will open source a universal GPU tex solution before they would have otherwise. (It's probably inevitable - crunch already supports ETC1. It won't be great quality, but it should work.) We're confident that our encoder's quality will be much better than any open source solution for a while. Also, this is just "baseline" quality, which isn't that good. We're extending this to support better quality when transcoding to ASTC/BC7.
No comments:
Post a Comment