# 3Dc

3Dc (FourCC : ATI2), también conocido como DXN, es un algoritmo de compresión con pérdida para imágenes inventado e implementado por primera vez por ATI. Es un estándar abierto creado a partir del algoritmo DXT5. Actualmente, 3Dc está implementado tanto por ATI como por NVIDIA.

## Ámbito de aplicación

El ámbito de aplicación, normal mapping, es una extensión de bump mapping que simula iluminación en superficies geométricas leyendo la superficie desde una malla rectilinea análoga a una textura - dando a los modelos simples la impresión de un aumento de complejidad. Sin embargo, este canal adicional incrementa la carga en el ancho de banda y memoria del sistema de gráficos. Los algoritmos preexistentes de compresión de datos con pérdida implementados en hardware 3D de consumo carecían de la precisión necesaria para reproducir mapas normales sin excesivos artefactos visibles, justificando el desarrollo de 3Dc.
Aunque 3Dc fue formalmente introducido con las tarjetas de las series ATI x800, hay también una versión compatible con S3TC planeada para la antigua serie R3xx y tarjetas de otras compañías. La calidad y la compresión no será tan buena, pero los errores visuales serán aún significativamente menores que los que ofrece el estándar S3TC.

## Algoritmo

La superficie de los mapas son vectores de una longitud de tres dimensiones por unidad. Debido a la restricción de longitud, sólo se necesitan almacenar dos elementos de cualquier mapa. Por lo tanto, la entrada es un arreglo de valores bidimensionales.
La compresión se realiza en bloques de 4x4. En cada bloque, los dos componentes de cada valor se comprimen por separado. Para cada bloque, cada componente tiene una paleta de 8 valores desde el que elegir. Las paletas se generan desde dos valores que representan el inicio y el final de una línea y los otros seis valores, siendo generados como combinaciones lineales de los valores de inicio y fin.
La compresión se realiza buscando los valores mínimo y máximo de 16 píxeles para ser comprimidos y almacenándolos como una cantidad de 8 bits. Los elementos individuales en el bloque de 4x4 se almacenan después con 3 bits cada uno, representando su posición en una escala linear de 8 pasos desde el valor mínimo hasta el máximo. Cada valor de 3 bits del píxel (el índice de la paleta) se elegiría seleccionando la paleta con la menor distancia desde los valores originales.
El tamaño de almacenamiento es de 128 bits por bloque de 4x4 una vez que ambos componentes fuente son factorizados. En un esquema descomprimido con igual precisión de 8 bits, los datos de entrada están formados por 32 valores de 8 bits para la misma área, ocupando 256 bits. Por lo tanto, el algoritmo produce un ratio de compresión de datos de 2:1.
El ratio de compresión a veces alcanza hasta 4:1 cuando se usa una precisión de 16 bits para los datos de entrada en vez de 8 bits. Esto produce una salida comprimida que es literalmente 1/4 del tamaño de la entrada pero no es una precisión comparable.

## 3Dc+

3Dc+ (FourCC: ATI1) puede comprimir texturas, p.e. mapas de luz, mapas de sombras, texturas HDR y propiedades de material. 3Dc+ proporciona un ratio de compresión de 2:1 con un único componente (DXT5 alfa) entero de 8 bits y un ratio de compresión 4:1 con mapas y texturas consistentes en dos componentes enteros de 8 bits.