Oodle Data Compression and IO

Oodle Texture Compression

Oodle Texture is an SDK for encoding of GPU textures to BC1-BC7 formats that can be compressed dramatically smaller. Oodle Texture can make maximum quality BCN encodings that are 5-15% smaller after compression. With rate distortion optimization, Oodle Texture can make high visual quality encodings that are 20-50% smaller.

Oodle Texture is not a compressor itself, it prepares data for the compressor you choose, so it works on all platforms. Most usage requires no runtime processing at all. Oodle Texture is independent from Oodle Data Compression, but they work well together.

Rate Distortion Optimization

Oodle Texture Rate Distortion Optimization (RDO), sometimes known as "super compression", lets you encode BCN textures with your choice of size-quality tradeoff. Oodle Texture RDO searches the space of possible ways to convert your source texture into BCN, finding encodings that are both high visual quality and smaller after compression. RDO can often find near lossless encodings that save 10% in compressed size, and with only small visual difference can save 20-50%.

Oodle Texture RDO provides fine control with the lambda parameter, ranging from the same quality as non-RDO BCN encoding, to gradually lower quality, with no sudden increase in distortion, or unexpected bad results on some textures. Oodle Texture RDO is predictable and consistent across your whole data set; you can usually use the same lambda level on most of your textures with no manual inspection and tuning. Visit Oodle Texture RDO examples to see for yourself.

RDO encoding just produces BCN block data, which can be put directly into textures, and stored in hardware tiled order. Oodle Texture RDO does not make a custom output format and therefore requires no runtime unpacking.

Lossless Transform for BC7

Oodle Texture also includes a lossless transform for BC7 blocks called "BC7Prep" that makes them more compressible. BC7Prep takes BC7 blocks that are often very difficult to compress and rearranges their bits, yielding 5-15% smaller files after subsequent compression. BC7Prep does require runtime reversal of the transform, which can be done on the GPU. BC7Prep can be used on existing BC7 encoded blocks, or for additional savings can be used with Oodle Texture RDO in near lossless mode. This allows significant size reduction on textures where maximum quality is necessary.

Full Support for all BC1-7

Oodle Texture has high quality baseline non-RDO encoders for all BC1-7 that support all modes and formats. This includes HDR BC6H, 16-bit BC4 and 5, signed and unsigned formats. The non-RDO encoders offer a very good quality-speed tradeoff. Oodle Texture can do RDO encoding of all BC1-7 (except BC2 which is rarely used). Oodle Texture works well with all kinds of texture content, it makes no assumptions about contents to achieve its results, and has no limitations or reduced format support.

Compatible with any lossless compressor

Oodle Texture RDO optimizes for the compressed size of the texture after packing with any general purpose lossless data compressor. This means it works great with hardware decompression. On consoles with hardware decompression, RDO textures can be loaded directly to GPU memory, Oodle Texture doesn't require any runtime unpacking or CPU interaction at all. Of course it works great with Kraken and all the compressors in Oodle Data Compression, but you don't need Oodle Data to use Oodle Texture, they are independent.

Perceptual allocation for visual quality

Oodle Texture RDO has excellent quality under simple numerical measures like RMSE, but what really matters is how the output looks. To that end, Oodle Texture uses perceptual rate allocation for BCN RDO that gives more bits to blocks where errors would be highly visible, and allows more error in blocks where it won't be noticed. This means Oodle Texture's visual quality is even better than the numbers indicate.

See for yourself! This is an encoding of "my soup" to BC7, which would be 8 bits per pixel uncompressed. Oodle Texture improves the Kraken size reduction from only 3.5% on the baseline (lambda=0) encoding to 45% at lambda=40 with very little visual degredation. It's common for BC7 textures without RDO to be nearly incompressible like this one is, but with Oodle Texture it can be compressed almost 2 to 1!

Oodle Texture RDO looks great on all kinds of images and game textures, in all BC1-BC7 formats. See more Oodle Texture RDO examples for yourself.

Try it!

Oodle is easy to use, cross platform, and super fast. Don't take our word for it, email us for a free evaluation SDK.