Texture compression
The chosen texture compression determines:
- how much space the texture consumes on disk
- how much memory it occupies on the GPU
Texture and Pixel Formats
In TexturePacker, it is important to distinguish between Texture Format and Pixel Format:
-
Texture Format: Configures the image file container (e.g.,
.pvr,.ktx,.png). It determines the file structure and extension. -
Pixel Format: Configures the internal encoding of the pixel data (e.g.,
ETC2,ASTC,RGBA8888).
In TexturePacker, you first select the Texture Format (the container file type, e.g., KTX), and then the Pixel Format (the specific compression, e.g., ASTC). TexturePacker only displays pixel formats that are compatible with the selected Texture Format.
Hardware vs. Software Compression
The main difference between software and hardware compression lies in where the data is decompressed and how much memory it occupies on the GPU.
Software Compression (e.g., PNG, JPG, WebP)
- Disk Space: These formats are excellent for reducing file sizes for storage or download.
- GPU Processing: They cannot be used directly by the GPU. The engine must decompress them into a raw format (like RGBA8888) in system memory before uploading them to the GPU.
- Memory Usage: Once loaded, they take up the full amount of memory required for an uncompressed texture (e.g., 4 bytes per pixel for RGBA8888).
Hardware Compression (e.g., ASTC, ETC2, PVRTC)
- Disk Space: These formats often have larger file sizes than highly optimized PNGs or JPEGs.
- GPU Processing: They are designed to be read directly by the GPU hardware in their compressed state.
- Memory Usage: They remain compressed in GPU memory, typically using only a fraction of the memory (e.g., 1 byte per pixel or less). This reduces memory pressure and increases rendering performance due to lower bandwidth requirements (the amount of data transferred between memory and the GPU).
Supported Hardware Compressions
The table below provides an overview of the compression ratios and hardware-specific requirements for each format. bpp (bits per pixel) indicates how much memory each pixel requires: lower values mean better compression.
| Compression | bpp | Hardware Restrictions / Notes |
|---|---|---|
| ASTC | 0.89 - 8.00 | Flexible block sizes (4x4 to 12x12). Supported on modern mobile (iOS, Android) and desktop GPUs. |
| ETC1 | 4 | No alpha channel. Standard for older Android devices. |
| ETC2 | 4 - 8 | Supports alpha (8 bpp). Standard for OpenGL ES 3.0 compatible devices. |
| PVRTC I | 2 - 4 | Requires power-of-two (POT) textures (e.g., 512x512, 1024x2048), some platforms might require squared textures (details). Standard for iOS devices. |
| PVRTC II | 2 - 4 | Improved quality over PVRTC I. Does not require square or POT textures. |
| DXT1 | 4 | No alpha or 1-bit transparency. Standard for desktop (DirectX). |
| DXT5 | 8 | Supports full alpha channel. Standard for desktop (DirectX). |
| Basis Universal (ETC1S mode) | 0.3 - 1.25 | Medium quality, fast transcoding to many other formats (ETC1, etc.). Highly compressed on disk. |
| Basis Universal (UASTC mode) | 4 - 8 | High quality, fast and simple transcoding to ASTC and BC7. Highly compressed on disk. |
Supported Texture Formats
Here's a list of Texture Formats (containers) TexturePacker supports, and the Hardware Compression algorithms (Pixel Formats) they can be compressed to.
| Texture Format | File Extension | Supported Hardware Compression (Pixel Formats) |
|---|---|---|
| PVR | .pvr | PVRTC I+II, ETC1+2, DXT1+5, ASTC, Basis Universal (ETC1S+UASTC) |
| KTX | .ktx | PVRTC I+II, ETC1+2, DXT1+5, ASTC |
| ZKTX | .ktx | PVRTC I+II, ETC1+2, DXT1+5, ASTC (file zipped on disk) |
| KTX2 | .ktx2 | PVRTC I+II, ETC1+2, DXT1+5, ASTC, Basis Universal (ETC1S+UASTC) |
| PKM | .pkm | ETC1, ETC2 |
| DDS | .dds | DXT1, DXT5 |
| ASTC | .astc | ASTC |
| BASIS | .basis | Basis Universal (ETC1S & UASTC) |
Other texture formats (like PNG, JPG, WebP, ...) are also supported by TexturePacker, but they cannot store hardware-compressed textures.
Note: Support for Adobe Texture Format (.atf) was removed in TexturePacker version 6.0.2.