Texture Compression. Jacob Ström, Ericsson Research

Similar documents
Lecture 6: Texturing Part II: Texture Compression and GPU Latency Hiding Mechanisms. Visual Computing Systems CMU , Fall 2014

texture compression using smooth profile functions

Table-based Alpha Compression

PVRTC & Texture Compression. User Guide

Optimizing DirectX Graphics. Richard Huddy European Developer Relations Manager

DHTC: An Effective DXTC-based HDR Texture Compression Scheme

Adaptive Scalable Texture Compression

I ll be speaking today about BC6H compression, how it works, how to compress it in realtime and what s the motivation behind doing that.

Mobile Performance Tools and GPU Performance Tuning. Lars M. Bishop, NVIDIA Handheld DevTech Jason Allen, NVIDIA Handheld DevTools

Video Compression An Introduction

Interframe coding A video scene captured as a sequence of frames can be efficiently coded by estimating and compensating for motion between frames pri

PVRTC Specification and User Guide

Saving the Planet Designing Low-Power, Low-Bandwidth GPUs

Adaptive Normal Map Compression for 3D Video Games

CSEP 521 Applied Algorithms Spring Lossy Image Compression

Optimizing for DirectX Graphics. Richard Huddy European Developer Relations Manager

OPTIMIZED QUANTIZATION OF WAVELET SUBBANDS FOR HIGH QUALITY REAL-TIME TEXTURE COMPRESSION. Bob Andries, Jan Lemeire, Adrian Munteanu

Outline Introduction MPEG-2 MPEG-4. Video Compression. Introduction to MPEG. Prof. Pratikgiri Goswami

Luma Adjustment for High Dynamic Range Video. Jacob Ström, Jonatan Samuelsson, Kristofer Dovstam Ericsson Research

Lecture 6: Texture. Kayvon Fatahalian CMU : Graphics and Imaging Architectures (Fall 2011)

Hot Chips Bringing Workstation Graphics Performance to a Desktop Near You. S3 Incorporated August 18-20, 1996

ASTC Does It. Eason Tang Staff Applications Engineer, ARM

Differential Compression and Optimal Caching Methods for Content-Based Image Search Systems

Mesh Based Interpolative Coding (MBIC)

Texture Compression in Memory- and Performance- Constrained Embedded Systems. Jens Ogniewski Information Coding Group Linköpings University

Features. Sequential encoding. Progressive encoding. Hierarchical encoding. Lossless encoding using a different strategy

Module Introduction. Content 15 pages 2 questions. Learning Time 25 minutes

7.5 Dictionary-based Coding

POWERVR MBX. Technology Overview

3D Graphics Texture Compression And Its Recent Trends.

A LOW-COMPLEXITY AND LOSSLESS REFERENCE FRAME ENCODER ALGORITHM FOR VIDEO CODING

On improving the performance per area of ASTC with a multi-output decoder

Squeezing Performance out of your Game with ATI Developer Performance Tools and Optimization Techniques

Real-Time YCoCg-DXT Compression

Using Virtual Texturing to Handle Massive Texture Data

VC 12/13 T16 Video Compression

Video coding. Concepts and notations.

Morphological: Sub-pixel Morhpological Anti-Aliasing [Jimenez 11] Fast AproXimatte Anti Aliasing [Lottes 09]

Feeding the Beast: How to Satiate Your GoForce While Differentiating Your Game

RSX Best Practices. Mark Cerny, Cerny Games David Simpson, Naughty Dog Jon Olick, Naughty Dog

Xuena Bao, Dajiang Zhou, Peilin Liu, and Satoshi Goto, Fellow, IEEE

Review and Implementation of DWT based Scalable Video Coding with Scalable Motion Coding.

Scalable Texture Compression using the Wavelet Transform

TEXTURE COMPRESSION IN MEMORY- AND PERFORMANCE-CONSTRAINED EMBEDDED SYSTEMS

The Next Generation of Compression JPEG 2000

VIDEO SIGNALS. Lossless coding

ECE 417 Guest Lecture Video Compression in MPEG-1/2/4. Min-Hsuan Tsai Apr 02, 2013

2D/3D Graphics Accelerator for Mobile Multimedia Applications. Ramchan Woo, Sohn, Seong-Jun Song, Young-Don

MULTIMEDIA SYSTEMS

Mattan Erez. The University of Texas at Austin

IMAGE PROCESSING (RRY025) LECTURE 13 IMAGE COMPRESSION - I

GeForce4. John Montrym Henry Moreton

Multimedia Decoder Using the Nios II Processor

Real-Time Rendering (Echtzeitgraphik) Michael Wimmer

MRT based Adaptive Transform Coder with Classified Vector Quantization (MATC-CVQ)

Compression of Stereo Images using a Huffman-Zip Scheme

DIGITAL TELEVISION 1. DIGITAL VIDEO FUNDAMENTALS

International Journal of Emerging Technology and Advanced Engineering Website: (ISSN , Volume 2, Issue 4, April 2012)

Lecture Information Multimedia Video Coding & Architectures

VIDEO AND IMAGE PROCESSING USING DSP AND PFGA. Chapter 3: Video Processing

AUDIOVISUAL COMMUNICATION

Whiz-Bang Graphics and Media Performance for Java Platform, Micro Edition (JavaME)

GPU-friendly Data Compression. GTC, 22.Mar.2013 Jens Schneider, GMSV, KAUST

Wireless Communication

Vertex Shader Design I

CMPT 365 Multimedia Systems. Media Compression - Image

Khronos Data Format Specification

Graphics Processing Unit Architecture (GPU Arch)

Introduction to Video Compression

The Power and Bandwidth Advantage of an H.264 IP Core with 8-16:1 Compressed Reference Frame Store

Image, video and audio coding concepts. Roadmap. Rationale. Stefan Alfredsson. (based on material by Johan Garcia)

Self-shadowing Bumpmap using 3D Texture Hardware

Real-Time Buffer Compression. Michael Doggett Department of Computer Science Lund university

Jingyi Yu CISC 849. Department of Computer and Information Science

Optimizing Games for ATI s IMAGEON Aaftab Munshi. 3D Architect ATI Research

Texture Compression using Wavelet Decomposition

DCT Based, Lossy Still Image Compression

Introduction to CacheWorx. Lucian Plesea - Esri Robert Jensen - Esri

Working with Metal Overview

CSE237A: Final Project Mid-Report Image Enhancement for portable platforms Rohit Sunkam Ramanujam Soha Dalal

Digital Video Processing

Modified SPIHT Image Coder For Wireless Communication

MRT based Fixed Block size Transform Coding

2014 Summer School on MPEG/VCEG Video. Video Coding Concept

JPEG decoding using end of block markers to concurrently partition channels on a GPU. Patrick Chieppe (u ) Supervisor: Dr.

Discrete Techniques. 11 th Week, Define a buffer by its spatial resolution (n m) and its depth (or precision) k, the number of

Bringing AAA graphics to mobile platforms. Niklas Smedberg Senior Engine Programmer, Epic Games

Chapter 10 Computation Culling with Explicit Early-Z and Dynamic Flow Control

JPEG 2000 vs. JPEG in MPEG Encoding

Content Aware Texture Compression

PowerVR Performance Recommendations The Golden Rules. October 2015

Cross Layer Protocol Design

Image Processing Tricks in OpenGL. Simon Green NVIDIA Corporation

CMPT 365 Multimedia Systems. Media Compression - Video Coding Standards

Lecture Information. Mod 01 Part 1: The Need for Compression. Why Digital Signal Coding? (1)

Sampling, Aliasing, & Mipmaps

Chroma Adjustment for HDR Video. Jacob Ström, Per Wennersten Ericsson Research

Multimedia in Mobile Phones. Architectures and Trends Lund

Sampling, Aliasing, & Mipmaps

CS 354R: Computer Game Technology

Transcription:

Texture Compression Jacob Ström, Ericsson Research

Overview Benefits of texture compression Differences from ordinary image compression Texture compression algorithms BTC The mother of all texture compression systems S3TC used in desktops/laptops (PCs, Macs) BC6 BC7 High bit rate texture compression on desktops/laptops PACKMAN, ETC used in Android 2.2

Texture Mapping is a Bandwidth Hog For each pixel drawn in the image, eight pixels from the texture (texels) are usually read. drawn image texture mipmap levels

Texturing and the bus BUS GPU Memory Problems: Bus can get full (performance bottleneck)

Texture Compression helps Memory BUS Texture decom- presor GPU Benefits: Less traffic on bus = higher performance Less traffic on bus = lower power consumption

Power Savings Especially good for mobile devices

good for battery life... unless you want to carry an extra battery.

Benefits of Texture Compression Higher Performance Bandwidth is usually the factor limiting performance in rasterization-based graphics hardware. Texture Compression reduces texturing bandwidth with a factor of up to 6 Spare bandwidth can be used for higher performance, or lower power consumption (mobile case) Higher Quality! (Yes, really ) Even a huge video memory gets full. With a compression ratio of 6, you can increase the resolution one mipmap level and still save memory

Benefits of Texture Compression Higher Performance Bandwidth is usually the factor limiting performance in rasterization-based graphics hardware. Texture Compression reduces texturing bandwidth with a factor of up to 6 Spare bandwidth can be used for higher performance, or lower power consumption (mobile case) Higher Quality! (Yes, really ) Even a huge video memory gets full. With a compression ratio of 6, you can increase the resolution one mipmap level and still save memory with texture compression, 128x128 pix, 8192 bytes

Benefits of Texture Compression Higher Performance Bandwidth is usually the factor limiting performance in rasterization-based graphics hardware. Texture Compression reduces texturing bandwidth with a factor of up to 6 Spare bandwidth can be used for higher performance, or lower power consumption (mobile case) Higher Quality! (Yes, really ) Even a huge video memory gets full. With a compression ratio of 6, you can increase the resolution one mipmap level and still save memory with texture compression, 128x128 pix, 8192 bytes no texture compression, downsampled to 64x64, 12288 bytes

Benefits of Texture Compression with texture compression, 128x128 pix, 8192 bytes no texture compression, downsampled to 64x64, 12288 bytes

Caches Memory BUS $ Texture decom- presor GPU If the on-chip cache stores compressed data: More blocks can fit in cache = better hit rate Mobile case: a smaller cache (less silicon) can hold the same number of blocks

Difference to Image Compression why not just use JPEG? First a short recap on how JPEG compresses images image JPEG bits left image courtesy of Henrik Wann Jensen

Difference to Image Compression why not just use JPEG? First a short recap on how JPEG compresses images The image is first divided into 8x8 blocks. image JPEG bits left image courtesy of Henrik Wann Jensen

Difference to Image Compression why not just use JPEG? First a short recap on how JPEG compresses images The image is first divided into 8x8 blocks. image JPEG bits left image courtesy of Henrik Wann Jensen

Difference to Image Compression why not just use JPEG? First a short recap on how JPEG compresses images The image is first divided into 8x8 blocks. Each block is then encoded and put into the file image JPEG bits left image courtesy of Henrik Wann Jensen

Difference to Image Compression why not just use JPEG? First a short recap on how JPEG compresses images The image is first divided into 8x8 blocks. Each block is then encoded and put into the file image JPEG bits left image courtesy of Henrik Wann Jensen

Difference to Image Compression why not just use JPEG? Most image compression algorithms, such as JPEG, uses variable bit length coding (VLC). A block that is hard to code is allowed to occupy more bits than a block that is, for instance, just black.

Difference to Image Compression why not just use JPEG? Most image compression algorithms, such as JPEG, uses variable bit length coding (VLC). A block that is hard to code is allowed to occupy more bits than a block that is, for instance, just black. image JPEG bits left image courtesy of Henrik Wann Jensen

Difference to Image Compression why not just use JPEG? Most image compression algorithms, such as JPEG, uses variable bit length coding (VLC). A block that is hard to code is allowed to occupy more bits than a block that is, for instance, just black. simple area few bits image JPEG bits left image courtesy of Henrik Wann Jensen

Difference to Image Compression why not just use JPEG? Most image compression algorithms, such as JPEG, uses variable bit length coding (VLC). A block that is hard to code is allowed to occupy more bits than a block that is, for instance, just black. simple area complex area few bits many bits image JPEG bits left image courtesy of Henrik Wann Jensen

Difference to Image Compression why not just use JPEG? However, variable bit rate also means that you cannot calculate the address for a pixel in the JPEG bits.

Difference to Image Compression why not just use JPEG? However, variable bit rate also means that you cannot calculate the address for a pixel in the JPEG bits. image??? JPEG bits left image courtesy of Henrik Wann Jensen

Difference to Image Compression why not just use JPEG? However, variable bit rate also means that you cannot calculate the address for a pixel in the JPEG bits. In order to know the address for a particular pixel, you have to parse the entire file. image??? JPEG bits left image courtesy of Henrik Wann Jensen

Difference to Image Compression why not just use JPEG? However, variable bit rate also means that you cannot calculate the address for a pixel in the JPEG bits. In order to know the address for a particular pixel, you have to parse the entire file. During rendering, you would have to parse the entire file for every texel! Not feasible.??? image JPEG bits left image courtesy of Henrik Wann Jensen

Difference to Image Compression why not just use JPEG? Therefore, most texture compression coders are fixed rate coders, which means that each block in the image occupies the same number of bits, for instance 64 bits per 4x4 block. In this way, it is simple to calculate the address for a particular block in the compressed texture bit stream.??? image JPEG bits left image courtesy of Henrik Wann Jensen

Difference to Image Compression why not just use JPEG? Therefore, most texture compression coders are fixed rate coders, which means that each block in the image occupies the same number of bits, for instance 64 bits per 4x4 block. In this way, it is simple to calculate the address for a particular block in the compressed texture bit stream. image JPEG bits left image courtesy of Henrik Wann Jensen

Difference to Image Compression why not just use JPEG? Note, that there is only one rate that will guarantee error free coding, and that is to have no compression at all! Thus, for fixed rate coding, one has to allow error (distortion) in the image. The goal is to make this error as small as possible. ~ original compressed and decompressed left image courtesy of Henrik Wann Jensen

Difference to Image Compression why not just use JPEG? Decompression should be of low complexity. Up to eight texels must be decompressed for each pixel. If we are unlucky, all eight texels can be in different blocks. drawn image texture mipmap levels

Difference to Image Compression why not just use JPEG? Decompression should be of low complexity. Up to eight texels must be decompressed for each pixel. If we are unlucky, all eight texels can be in different blocks. texture mipmap levels This means that we have to have eight parallel block decompressors on the chip to deliver one filtered pixel per clock.

Differences to Image Compression Summary 1. Random access is needed a fixed rate coder makes this possible. 2. Several parallel units needed low hardware decompression complexity necessary. (Long compression times OK though!) 3. Indirect addressing due to use of palettes or other global, texture depending data should be avoided.

Texture Compression Formats

Block Truncation Coding Predecessor to texture compression techniques

BTC Block Truncation Coding Image is divided into 4x4 blocks Two 8-bit gray shades are encoded per block col 0 col 1

BTC Block Truncation Coding Image is divided into 4x4 blocks Two 8-bit gray shades are encoded per block A bit mask of 16 bits is also used. col 0 col 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1

BTC Block Truncation Coding Image is divided into 4x4 blocks Two 8-bit gray shades are encoded per block A bit mask of 16 bits is also used. col 0 col 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1

BTC Block Truncation Coding Image is divided into 4x4 blocks Two 8-bit gray shades are encoded per block A bit mask of 16 bits is also used. col 0 col 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1

BTC Block Truncation Coding Bit rate equals 8+8+16 = 32 bits per block, i.e., 2 bits per pixel (bpp). Everything is contained in the codeword, no global data or color palette needs to be read.

BTC Block Truncation Coding Compression To compress a block, you need to find a pair of base colors and the bitmask. If you have the base colors, it is simple to get the bitmask: Just try each pixel and see which color is best. Since there are only 256*256 such pairs, you can try all pairs. col 0 col 1 + 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1

BTC Block Truncation Coding Quality However, having only two shades of gray gives rise to banding artifacts. original BTC

BTC Block Truncation Coding Quality original BTC

S3TC Used on PCs (Windows, Mac)

S3TC S3 Texture Compression also called DXT1 S3TC can be seen as an extension of BTC. Instead of two gray scales, two colors are stored per block in RGB565. col 0 col 3

S3TC S3 Texture Compression also called DXT1 S3TC can be seen as an extension of BTC. Instead of two gray scales, two colors are stored per block in RGB565. Two more colors are interpolated between the stored ones. col 0 col 1 col 2 col 3

S3TC S3 Texture Compression also called DXT1 S3TC can be seen as an extension of BTC. Instead of two gray scales, two colors are stored per block in RGB565. Two more colors are interpolated between the stored ones. col 0 col 1 col 2 col 3 = 2/3 * ( col 0 ) + 1/3 * ( col 3 ) = 1/3 * ( col 0 ) + 2/3 * ( col 3 )

S3TC S3 Texture Compression also called DXT1 S3TC can be seen as an extension of BTC. Instead of two gray scales, two colors are stored per block in RGB565. Two more colors are interpolated between the stored ones. Bit mask must now be 2 bits per pixel. col 0 col 1 col 2 col 3

S3TC S3 Texture Compression also called DXT1 S3TC can be seen as an extension of BTC. Instead of two gray scales, two colors are stored per block in RGB565. Two more colors are interpolated between the stored ones. Bit mask must now be 2 bits per pixel. col 0 col 1 col 2 col 3 00 10 11 11 01 11 11 11 10 11 11 11 11 11 11 11

S3TC S3 Texture Compression also called DXT1 S3TC can be seen as an extension of BTC. Instead of two gray scales, two colors are stored per block in RGB565. Two more colors are interpolated between the stored ones. Bit mask must now be 2 bits per pixel. col 0 col 1 col 2 col 3 00 10 11 11 01 11 11 11 10 11 11 11 11 11 11 11 0 2 3 3 1 3 3 3 2 3 3 3 3 3 3 3

S3TC S3 Texture Compression also called DXT1 S3TC can be seen as an extension of BTC. Instead of two gray scales, two colors are stored per block in RGB565. Two more colors are interpolated between the stored ones. Bit mask must now be 2 bits per pixel. col 0 col 1 col 2 col 3 00 10 11 11 01 11 11 11 10 11 11 11 11 11 11 11 0 2 3 3 1 3 3 3 2 3 3 3 3 3 3 3

S3TC S3 Texture Compression quality In this way, four colors per 4x4 block can be used instead of two gray scales quality increases tremendously.

S3TC S3 Texture Compression quality In this way, four colors per 4x4 block can be used instead of two gray scales quality increases tremendously. original S3TC

S3TC S3 Texture Compression quality In this way, four colors per 4x4 block can be used instead of two gray scales quality increases tremendously. S3TC was adopted by Direct 3D under the name DXT1 and is now the industry standard in the desktop space. original S3TC

S3TC S3 Texture Compression quality In this way, four colors per 4x4 block can be used instead of two gray scales very decent quality! S3TC was adopted by Direct 3D under the name DXT1 and is now the industry standard in the desktop space.

S3TC S3 Texture Compression The two base colors are stored in RGB565 (16 bits). Together with the 32 bits of pixel bits we get 64 bits per block, or 4 bpp. Compression ratio is thus 6:1.

S3TC S3 Texture Compression The two base colors are stored in RGB565 (16 bits). Together with the 32 bits of pixel bits we get 64 bits per block, or 4 bpp. Compression ratio is thus 6:1. Decompression includes multiplication of 1/3 and 2/3. col 0 col1 1 pixel bits 2 bits blend blend multiplexor 2 bits 4 bits which pixel multiplexor

S3TC S3 Texture Compression Due to the way the intermediate colors are interpolated, the four colors of the block will lie on a straight line in RGB space.

S3TC S3 Texture Compression Due to the way the intermediate colors are interpolated, the four colors of the block will lie on a straight line in RGB space. G R

S3TC S3 Texture Compression Due to the way the intermediate colors are interpolated, the four colors of the block will lie on a straight line in RGB space. For many natural images, this is a rather good approximation. G R

RGBA TEXTURES The S3TC/DXT1 method only encodes RGB textures using 64 bits per 4x4 block. For RGBA textures, the alpha channel is encoded separately using another 64 bits in a similar manner.

RGBA TEXTURES The S3TC/DXT1 method only encodes RGB textures using 64 bits per 4x4 block. For RGBA textures, the alpha channel is encoded separately using another 64 bits in a similar manner. Two gray colors are stored using 8 bit per gray level. Six more are interpolated in between. col 0 col 7

RGBA TEXTURES The S3TC/DXT1 method only encodes RGB textures using 64 bits per 4x4 block. For RGBA textures, the alpha channel is encoded separately using another 64 bits in a similar manner. Two gray color are stored using 8 bit per gray level. Six more are interpolated in between. col 0 col 7 000 000 001 011 010 011 011 100 011 100 101 110 100 101 110 111 0 0 1 3 2 3 3 4 3 4 5 6 4 5 6 7

RGBA TEXTURES In DirectX, RGBA textures are stored by interleaving 64 bits of RGB data with 64 bits of alpha-data. This format is called DXT5. 64 bits 64 bits 64 bits 64 bits 64 bits 64 bits

BC7 and BC6h High bit rate texture compression for PCs In OpenGL 4.2 they are called BPTC

BC7 In DXT5, 128 bits are spent per 4x4 pixels: 8 bits per pixel. This is unevenly distributed per channel: 4 bpp for RGB (compression rate 6:1) and 4 bpp for alpha (compression rate only 2:1) In BC7, 8 modes makes it possible to change this balance: Mode 4: 50% of bits RGB, 50% alpha (similar to DXT5) Mode 5: 60% of bits RGB, 40% alpha (better color quality) Sometimes alpha and color are correlated Mode 6: 16 interpolated RGBA colors to choose from

BC7 Some blocks in the texture have no alpha, then 100% of the bits can be used for RGB! Instead of having just 1 interpolated color sequence, up to 3 are possible in BC7: col 0 col 4 col 8 col 3 col 7 col 11

BC7 Some blocks in the texture have no alpha, then 100% of the bits can be used for RGB! Instead of having just 1 interpolated color sequence, up to 3 are possible in BC7: col 0 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 10 col 11

BC7 Some blocks in the texture have no alpha, then 100% of the bits can be used for RGB! Instead of having just 1 interpolated color sequence, up to 3 are possible in BC7: col 0 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 10 col 11

BC7 We need some way of telling from which color subset the pixel should fetch its color. col 0 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 10 col 11

BC7 We need some way of telling from which color subset the pixel should fetch its color. There are 3^16 = 43 046 721 possible block partitionings, which would require 25 bits to describe (2^25 > 3^16) BC7 chooses the 64 most common and selects from those using 6 bits. col 0 col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 10 col 11

64 most common patterns

Patterns The different modes have different number of color subsets: Mode 0: 3 color subsets, 16 patterns Mode 1: 2 color subsets, 64 patterns Mode 2: 3 color subsets, 64 patterns Mode 3: 2 color subsets, 64 patterns Mode 4-7 color + alpha Mode can be selected per block

BC6H BC7 is a RGBA8888 format, but with 128 bits per pixel it is possible to also compress high dynamic range data (HDR) BC6H decompresses to 16-bit floats (halfs) using the same principles as BC7: One or two color sequences 32 patterns to tell which color sequence to be used Only RGB (no alpha). col 0 col 1 col 2 col 3 col 4 col 5 col 6 col 7

PACKMAN Predecessor to Ericsson texture compression (ETC), which is used in android 2.2

Basic Idea PACKMAN The model that colors are along a line in RGB space has worked well for S3TC. Maybe we can pre-specify a specific direction in RGB space and thus save one color? The most common direction should be (1,1,1), that is, going from dark to bright.

Basic Idea PACKMAN The model that colors are along a line in RGB space has worked well for S3TC. Maybe we can pre-specify a specific direction in RGB space and thus save one color? The most common direction should be (1,1,1), that is, going from dark to bright. G direction (1,1,1) R

Basic Idea PACKMAN In addition, the Human Visual System is more sensitive to luminance (grey scale) than to chrominance (color) In video and still image coding, chrominance information is most often subsampled in the x- and y- direction (MPEG, JPEG, H263, H264 etc). Loosely speaking, chrominance is defined per 2x2 block. PACKMAN has basically only one color per 2x4 block. The rest is luminance information Code each 2x4 block using 32 bits

Basic Idea PACKMAN Use only 12 bits to specify a base color for a 2x4 block 12-bit base color

Basic Idea PACKMAN Use only 12 bits to specify a base color for a 2x4 block Modify the luminance for each pixel in the block + 12-bit base color per-pixel luminance

Basic Idea PACKMAN Use only 12 bits to specify a base color for a 2x4 block Modify the luminance for each pixel in the block + = 12-bit base color per-pixel luminance resulting image

ETC Ericsson Texture Compression (Used in Android 2.2)

PACKMAN Flaws PACKMAN was of very low complexity, but 2 db worse than S3TC/DXT1 in terms of Peak Signal to Noise Ratio (PSNR) Suffered from chrominance banding / block artifacts due to low color resolution (RGB444) original PACKMAN

PACKMAN Flaws PACKMAN was of very low complexity, but 2 db worse than S3TC/DXT1 in terms of Peak Signal to Noise Ratio (PSNR) Suffered from chrominance banding / block artifacts due to low color resolution (RGB444) original PACKMAN

Enhancing the Chrominance would increasing the block size help? By coding 4x4 blocks instead of 2x4 blocks, spatial redundancy could be better exploited.

Neighboring Base Colors Quite Similar max( R1-R2, G1-G2, B1-B2 ) (in RGB555) 88% within interval [-4, 3]

Differential Encoding Instead of coding the left block with RGB444 left block left block R G B table

Differential Encoding Instead of coding the left block with RGB444 and the right with RGB444 left block right block left block right block R G B table R G B table

Differential Encoding Instead of coding the left block with RGB444 and the right with RGB444 We code the left with RGB555 left block right block left block right block R G B table R G B table R G B table bits

Differential Encoding Instead of coding the left block with RGB444 and the right with RGB444 We code the left with RGB555 and the right with dr dg db 333. left block right block left block right block R G B table R G B table R dr G dg B db table bits

Differential Encoding However, in 10% of the cases, the left and right blocks will differ too much in color for differential coding. left block right block R dr G dg B db table bits

Differential Encoding However, in 10% of the cases, the left and right blocks will differ too much in color for differential coding. left block right block R dr G dg B db table bits

Differential Encoding However, in 10% of the cases, the left and right blocks will differ too much in color for differential coding. For these blocks, we fall black to individual coding. left block right block R dr G dg B db table bits R R G G B B table bits

Differential Encoding However, in 10% of the cases, the left and right blocks will differ too much in color for differential coding. For these blocks, we fall black to individual coding. We thus need an extra bit to signal if we are in differential mode or not. left block right block 555differential or 444 R dr G dg B db table bits R R G G B B table bits

Differential Encoding However, in 10% of the cases, the left and right blocks will differ too much in color for differential coding. For these blocks, we fall black to individual coding. We thus need an extra bit to signal if we are in differential mode or not. We must take that bit from somewhere. left block right block 555differential or 444 R dr G dg B db table bits R R G G B B table bits

Differential Encoding By shrinking the codebook from 16 entries to 8, we can save one bit on each of the table code words. The Codebook contains the base color modifier values. One code is chosen for the block, then each pixel choses one of the 4 values -8-2 2 8-12 -4 4 12-16 -4 4 16-24 -8 8 24-31 -6 6 31-34 -12 12 34-47 -19 19 47-50 -8 8 50-62 -12 12 62-68 -24 24 68-80 -28 28 80-94 -38 38 94-100 -16 16 100-127 -42 42 127-160 -56 56 160-254 -84 84 254 R dr G dg B db table bits R R G G B B table bits

Differential Encoding By shrinking the codebook from 16 entries to 8, we can save one bit on each of the table code words. -8-2 2 8-17 -5 5 17-29 -9 9 29-42 -13 13 42-60 -18 18 60-80 -24 24 80-106 -33 33 106-183 -47 47 183 R dr G dg B db table bits R R G G B B table bits

Differential Encoding By shrinking the codebook from 16 entries to 8, we can save one bit on each of the table code words. -8-2 2 8-17 -5 5 17-29 -9 9 29-42 -13 13 42-60 -18 18 60-80 -24 24 80-106 -33 33 106-183 -47 47 183 R dr G dg B db table bits R R G G B B table bits

Differential Encoding By shrinking the codebook from 16 entries to 8, we can save one bit on each of the table code words. That creates room for an extra bit. -8-2 2 8-17 -5 5 17-29 -9 9 29-42 -13 13 42-60 -18 18 60-80 -24 24 80-106 -33 33 106-183 -47 47 183 flipped or non flipped R dr G dg B db table bits R R G G B B table bits

Differential Encoding By shrinking the codebook from 16 entries to 8, we can save one bit on each of the table code words. That creates room for an extra bit. The new bit determines if the 2x4 blocks are vertically or horizontally oriented. R dr G dg B db table bits flipped or non flipped R R G G B B table bits

Results improved PACKMAN or Ericsson Texture Compression (ETC) Much less chrominance banding Jumps 2.5 db in PSNR overall PACKMAN ETC

ETC2 An updated version of ETC was presented: J. Ström and M. Pettersson ETC2: Texture Compression Using Invalid Combinations, Graphics Hardware 2007 It is backwards compatible to ETC and brings a 1.0 db increase in quality compared to ETC. (0.8 db compared to S3TC/DXTC) It fixes mostly blocks that ETC has problems with

Results original S3TC/DXTC ETC1 ETC2 ETC1 T-mode H-mode Planar original S3TC/DXTC ETC 1 ETC2

Results cont. original S3TC/DXTC ETC1 ETC2 ETC1 T-mode H-mode Planar original S3TC/DXTC ETC1 ETC2

summary When creating a texture compression system, remember Random access is needed Low hardware decompression complexity Avoid indirect addressing Texture Compression benefits Lower memory bandwidth = higher performance Lower memory bandwidth = lower power consumption Smaller memory footprint = more hires textures possible Smaller memory footprint = more blocks fit in cache