Texture compression

Type of data compression

Three-dimensional (3D)
computer graphics

Fundamentals

* Modeling
* Scanning
* Rendering
* Printing

Primary uses

* 3D models
* Computer-aided design
* Graphic design
* Video games
* Visual effects
* Visualization
* Virtual engineering
* Virtual reality
* Virtual cinematography

Related topics

* Computer-generated imagery (CGI)
* Animation
* computer
* skeletal
* 3D display
* Wire-frame model
* Texture mapping
* Motion capture
* Crowd simulation
* Global illumination
* Volume rendering

* v
* t
* e

Texture compression is a specialized form of image compression designed for storing texture maps in 3D computer graphics rendering systems. Unlike conventional image compression algorithms, texture compression algorithms are optimized for random access.

Texture compression can be applied to reduce memory usage at runtime. Texture data is often the largest source of memory usage in a mobile application.

## Tradeoffs

[edit]

In their seminal paper on texture compression,[1] Beers, Agrawala and Chaddha list four features that tend to differentiate texture compression from other image compression techniques. These features are:

Decoding Speed
It is highly desirable to be able to render directly from the compressed texture data and so, in order not to impact rendering performance, decompression must be fast.
Random Access
Since predicting the order that a renderer accesses texels would be difficult, any texture compression scheme must allow fast random access to decompressed texture data. This tends to rule out many better-known image compression schemes such as JPEG or run-length encoding.
Compression Rate and Visual Quality
In a rendering system, lossy compression can be more tolerable than for other use cases. Some texture compression libraries, such as crunch,[2] allow the developer to flexibly trade off compression rate vs. visual quality, using methods such as rate-distortion optimization (RDO).
Encoding Speed
Texture compression is more tolerant of asymmetric encoding/decoding rates as the encoding process is often done only once during the application authoring process.

Given the above, most texture compression algorithms involve some form of fixed-rate lossy vector quantization of small fixed-size blocks of pixels into small fixed-size blocks of coding bits, sometimes with additional extra pre-processing and post-processing steps. Block Truncation Coding is a very simple example of this family of algorithms.

Because their data access patterns are well-defined, texture decompression may be executed on-the-fly during rendering as part of the overall graphics pipeline, reducing overall bandwidth and storage needs throughout the graphics system. As well as texture maps, texture compression may also be used to encode other kinds of rendering map, including bump maps and surface normal maps. Texture compression may also be used together with other forms of map processing such as MIP maps and anisotropic filtering.

## Availability

[edit]

Some examples of practical texture compression systems are S3 Texture Compression (S3TC), PVRTC, Ericsson Texture Compression (ETC) and Adaptive Scalable Texture Compression (ASTC); these may be supported by special function units in modern Graphics processing units.

OpenGL and OpenGL ES, as implemented on many video accelerator cards and mobile GPUs, can support multiple common kinds of texture compression - generally through the use of vendor extensions.

## Supercompression

[edit]

A compressed-texture can be further compressed in what is called "supercompression". Fixed-rate texture compression formats are optimized for random access and are much less efficient compared to image formats such as PNG. By adding further compression, a programmer can reduce the efficiency gap. The extra layer can be decompressed by the CPU so that the GPU receives a normal compressed texture,[3] or in newer methods, decompressed by the GPU itself. Supercompression saves the same amount of VRAM as regular texture compression, but saves more disk space and download size.[4]

Further information: Adaptive scalable texture compression § Universal ASTC, and S3 Texture Compression § Data preconditioning

## Neural Texture Compression

[edit]

Random-Access Neural Compression of Material Textures (Neural Texture Compression) is a Nvidia's technology which enables two additional levels of detail (16x more texels, so four times higher resolution) while maintaining similar storage requirements as traditional texture compression methods.[5]

The key idea is compressing multiple material textures and their mipmap chains together, and using a small neural network, that is optimized for each material, to decompress them.[6]

## See also

[edit]

* Block Truncation Coding (BTC)
* Vector quantization
* Color Cell Compression

## References

[edit]

1. ^ Andrew Beers; Maneesh Agrawala; Navin Chaddha (1996), "Rendering from Compressed Textures", Computer Graphics, Proc. SIGGRAPH: 373–378
2. ^ "crunch open source texture compression library". GitHub. Retrieved 2016-09-13.
3. ^ Strom, Jacob; Wennersten, Per (5 August 2011). Lossless compression of already compressed textures. HPG '11: Proceedings of the ACM SIGGRAPH Symposium on High Performance Graphics. pp. 177–182\. doi:10.1145/2018323.2018351.
4. ^ Krajcevski, Pavel; Pratapa, Srihari; Manocha, Dinesh (11 November 2016). "GST: GPU-decodable supercompressed textures". ACM Transactions on Graphics. 35 (6): 1–10\. doi:10.1145/2980179.2982439.
5. ^ "Nvidia Uses Neural Network for Innovative Texture Compression Method". 6 May 2023.
6. ^ "Random-Access Neural Compression of Material Textures | Research".

## External links

[edit]

* http://gamma.cs.unc.edu/GST/ GST: GPU-decodable Supercompressed Textures

* v
* t
* e

Data compression methods

Lossless|

| Entropy type|

* Adaptive coding
* Arithmetic
* Asymmetric numeral systems
* Golomb
* Huffman
* Adaptive
* Canonical
* Modified
* Range
* Shannon
* Shannon–Fano
* Shannon–Fano–Elias
* Tunstall
* Unary
* Universal
* Exp-Golomb
* Fibonacci
* Gamma
* Levenshtein

|

Dictionary type|

* Byte pair encoding
* Lempel–Ziv
* 842
* LZ4
* LZJB
* LZO
* LZRW
* LZSS
* LZW
* LZWL
* Snappy

Other types|

* BWT
* CTW
* CM
* Delta
* Incremental
* DMC
* DPCM
* Grammar
* Re-Pair
* Sequitur
* LDCT
* MTF
* PAQ
* PPM
* RLE

Hybrid|

* LZ77 + Huffman
* Deflate
* LZX
* LZS
* LZ77 + ANS
* LZFSE
* LZ77 + Huffman + ANS
* Zstandard
* LZ77 + Huffman + context
* Brotli
* LZSS + Huffman
* LHA/LZH
* LZ77 + Range
* LZMA
* LZHAM
* RLE + BWT + MTF + Huffman
* bzip2

Lossy|

| Transform type|

* Discrete cosine transform
* DCT
* MDCT
* DST
* FFT
* Wavelet
* Daubechies
* DWT
* SPIHT

|

Predictive type|

* DPCM
* ADPCM
* LPC
* ACELP
* CELP
* LAR
* LSP
* WLPC
* Motion
* Compensation
* Estimation
* Vector
* Psychoacoustic

Audio|

| Concepts|

* Bit rate
* ABR
* CBR
* VBR
* Companding
* Convolution
* Dynamic range
* Latency
* Nyquist–Shannon theorem
* Sampling
* Silence compression
* Sound quality
* Speech coding
* Sub-band coding

|

Codec parts|

* A-law
* μ-law
* DPCM
* ADPCM
* DM
* FT
* FFT
* LPC
* ACELP
* CELP
* LAR
* LSP
* WLPC
* MDCT
* Psychoacoustic model

Image|

| Concepts|

* Chroma subsampling
* Coding tree unit
* Color space
* Compression artifact
* Image resolution
* Macroblock
* Pixel
* PSNR
* Quantization
* Standard test image
* Texture compression

|

Methods|

* Chain code
* DCT
* Deflate
* Fractal
* KLT
* LP
* RLE
* Wavelet
* Daubechies
* DWT
* EZW
* SPIHT

Video|

| Concepts|

* Bit rate
* ABR
* CBR
* VBR
* Display resolution
* Frame
* Frame rate
* Frame types
* Interlace
* Video characteristics
* Video quality

|

Codec parts|

* DCT
* DPCM
* Deblocking filter
* Lapped transform
* Motion
* Compensation
* Estimation
* Vector
* Wavelet
* Daubechies
* DWT

Theory|

* Compressed data structures
* Compressed suffix array
* FM-index
* Entropy
* Information theory
* Timeline
* Kolmogorov complexity
* Prefix code
* Quantization
* Rate–distortion
* Redundancy
* Symmetry
* Smallest grammar problem

Community|

* Hutter Prize

People|

* Mark Adler

*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template