Taking texture compression to a new dimension with PVRTC2

Released at GDC 2012, Imagination’s updated PVRTC2 texture compression technology provides significant enhancements in quality and efficiency offering application developers unrivaled performance while lowering system memory usage and reducing GPU processing overhead for the low power-driven world of mobile graphics.

Everything just got better: high contrast textures, NPOT support and sub-texturing

Imagination’s PVRTC texture compression format is currently the most efficient texture compression format in the mobile industry. More than 800m devices with PowerVR GPUs provide fully hardware-accelerated texture compression including all PowerVR Series4 (MBX), Series 5/5T (SGX) and Series6 (Rogue) GPU cores.

We believe PVRTC2 is a major update for game developers who use texture compression, bringing new capabilities to all platforms which integrate our PowerVR Series5XT and Series6 cores. A wide range of features were added, giving developers and artists the right combination of tools and standards that allows them to create applications with breath-taking visuals but that can run faster and burn less power.

PVRTC2 vs PVRTC at 2bppPVRTC2 vs PVRTC at 2bpp

PVRTC2 builds on the success of our previous texture compression standard, PVRTC, by bringing several vital improvements. Therefore, if your target platform has a Series5XT or Series6 GPU, you should use PVRTC2 as the results will be significantly better compared to PVRTC.

Alongside RGB and RGBA support with 4bpp and 2bpp encoding, PVRTC2 offers better image quality, especially for textures with large areas of colour discontinuity. Developers will not have to worry about texture manipulation techniques such as border expansion to eliminate previous issues in normal mapping or for collection of sub-images (texture atlases).

PVRTC2 vs PVRTC at 4bpp

 

PVRTC2 vs PVRTC at 4bpp

Non-tiling textures will also look much better thanks to the addition of dedicated modes for dealing with areas of high contrast between texture sections. This also simplifies working with images in a skybox as borders around them are no longer needed.

To increase the efficient use of memory, PVRTC2 also introduces support for NPOT (Non Power of Two) textures that were introduced with OpenGL ES 2.0. These textures eliminate the need for increasing pixel surfaces to match powers of two, especially for larger texture dimensions: for example a 1600×1200 texture would have required using a 2048×2048 pixel surface which wasted a lot of memory. PVRTC2 can natively support any size the developer chooses to use.

PVRTC2 and PVRTC compared against ETC1, ETC2 and BC1PVRTC2 and PVRTC compared against ETC1, ETC2 and BC1

For applications that use many small textures frequently, using sub-textures from a texture atlas can be often a more efficient way of using the graphics hardware’s resources. Tile-based games usually benefit greatly in performance from a texture atlas. PVRTC2 supports sub-texturing at data-word boundaries (4×4 or 8×4 for PVRTC2 4bpp or PVRTC2 2bpp respectively).

PVRTC2: How it works

Every texture compression standard should follow two simple guidelines

–          the decompression algorithm should be straightforward

–          the bits per pixel value is fixed (unlike, say, JPG or GIF).

These two considerations make random addressing (a must-have of every texture compression standard) far simpler which in turns leads to more efficient hardware. Optimized hardware equals low power requirements and increased performance capabilities.

A complicated decompression scheme and variable bits per pixel values were not designed for the mobile space. Therefore GPUs have to add more silicon area to support them and consume more power that they would traditionally do with a hardware-optimized texture compression standard such as Imagination’s PVRTC and PVRTC2.

PVRTC2: how it worksPVRTC2: how it works

Decompressing PVRTC2 data-words is very similar to PVRTC, although there are two main features that stand out:

–          PVRTC2 has a single ‘opacity flag’ for the entire data-word as opposed to PVRTC which uses an ‘opacity flag’ for each colour segment

–          PVRTC2 introduces a ‘hard transition flag’ for sub-texturing

Setting the single ‘opacity flag’ to 1 means both colour segments are opaque whereas when it is 0, both segments must be interpreted in Transparent Mode as shown below.

A PVRTC2 data wordA PVRTC2 data word

The ‘hard transition flag’ and the ‘modulation flag’ provide additional options for interpreting the modulation data. This doubles the number of options previously available in PVRTC.

PVRTC2 flag optionsPVRTC2 flag options

The new ‘non-interpolated’ and ‘local palette’ modes improve the quality of PVRTC2 when dealing with textures that contain colour discontinuities. Developers should use the ‘non-interpolated’ mode when textures do not tile seamlessly (discontinuities exist along the image boundary) whereas textures containing local areas with a variety of very distinct colours will benefit from the ‘local palette’ mode.

Compression types for mobile: part 1 of our case study

There are currently six well-known compression types supported by OpenGL ES:

–          PVRTC, Imagination’s widely used PowerVR texture compression

–          PVRTC2, the recently updated PowerVR texture compression

–          ETC1 (Ericsson texture compression) and ETC2/EAC (backwards compatible with ETC1 and mandatory in the OpenGL ES 3.0 graphics standard)

–          ASTC (Adaptive scalable texture compression), a new optional extension for both OpenGL and OpenGL ES

–          ATITC (ATI texture compression)

–          S3TC (S3 texture compression), also called DXTn, DXTC or BCn

This case study will focus on PVRTC2, comparing it to other compression standards supported by existing silicon to test their visual efficiency. We’ve chosen four types of distinct images and different quality settings to cover a wide spectrum of possibilities:

PVRTC2: data for texture comparison

For PVRTC2, the PVRTexTool from the PowerVR Graphics SDK v3.0 has been used to compress the images mentioned above. Our tool includes an intuitive GUI, support for other popular texture compressions formats and implements error metrics which allow you to compare between results.

PVRTC2 at 4bpp and 2bpp vs ETC1, ETC2 and BC3 at 4bpp PVRTC2 at 4bpp and 2bpp vs ETC1, ETC2 and BC3 at 4bpp PVRTC2 at 4bpp and 2bpp vs ETC1, ETC2 and BC3 at 4bpp PVRTC2 at 4bpp and 2bpp vs ETC1, ETC2 and BC3 at 4bppPVRTC2 at 4bpp and 2bpp vs ETC1, ETC2 and BC3 at 4bpp

As texture data can take up to 70% of a software application, texture compression affects everything from app store download and update times to main memory usage in any mobile computing platform. File compression can also be used to reduce texture size even further, as PVRTC and PVRTC2 data can be losslessly compressed to reduce storage space.

PVRTC2 delivers the best possible image quality at any given bitrate with much less noticeable artifacts than other solutions while our PowerVR graphics architecture is designed to provide full on-chip acceleration for texture decompression offering developers and gamers alike a consistent look and feel across thousands of applications and devices as well as major savings in battery life.

If you want to know more about PVRTC, you can contact our DevTech support team on Imagination’s PowerVR Insider dedicated forum. Among other interesting and useful threads, you can find a dedicated PowerVR FAQ list that covers devices supporting PVRTC2 and briefly explains what the PVRTC standard is about. For more on PVRTC and texture compression, follow us on Twitter (@ImaginationPR and @PowerVRInsider) and subscribe to our blog.

, , , , , , , , , , ,