3Dc ( FourCC : ATI2), también conocido como DXN , BC5 o Block Compression 5 es un algoritmo de compresión de datos con pérdida para mapas normales inventado e implementado por primera vez por ATI . Se basa en el algoritmo DXT5 anterior y es un estándar abierto . 3Dc ahora está implementado tanto por ATI como por Nvidia .
Aplicación de destino
La aplicación de destino, el mapeo normal, es una extensión del mapeo de relieve que simula la iluminación en superficies geométricas leyendo las normales de la superficie de una cuadrícula rectilínea análoga a un mapa de textura , dando a los modelos simples la impresión de una mayor complejidad. Sin embargo, este canal adicional aumenta la carga en el ancho de banda de la memoria del sistema gráfico. Los algoritmos de compresión con pérdida preexistentes implementados en hardware 3D de consumo carecían de la precisión necesaria para reproducir mapas normales sin excesivos artefactos visibles, lo que justificaba el desarrollo de 3Dc.
Algoritmo
Las normales de superficie son vectores tridimensionales de longitud unitaria. Debido a la restricción de longitud, solo es necesario almacenar dos elementos de cualquier normal. Por tanto, la entrada es una matriz de valores bidimensionales.
La compresión se realiza en bloques de 4 × 4. En cada bloque, los dos componentes de cada valor se comprimen por separado. Para cada bloque, cada uno de los dos componentes tiene una paleta de 8 valores para elegir. Las paletas se generan a partir de dos valores que representan el inicio y el final de una línea y los otros seis valores se generan como combinaciones lineales de los valores inicial y final.
La compresión se logra de forma nativa al encontrar los valores más bajos y más altos de los 16 píxeles que se van a comprimir y almacenar cada uno de ellos como una cantidad de 8 bits. Los elementos individuales dentro del bloque 4 × 4 se almacenan con 3 bits cada uno, lo que representa su posición en una escala lineal de 8 pasos desde el valor más bajo hasta el más alto. El valor de 3 bits de cada píxel (el índice de la paleta) se elegiría eligiendo la entrada de la paleta con la distancia mínima de los valores originales.
El almacenamiento total es de 128 bits por bloque 4x4 una vez que se tienen en cuenta ambos componentes de origen. En un esquema sin comprimir con precisión de 8 bits similar, los datos de origen son 32 valores de 8 bits para la misma área, ocupando 256 bits. Por tanto, el algoritmo produce una relación de compresión de 2: 1 .
La relación de compresión a veces se indica como "hasta 4: 1", ya que es común utilizar precisión de 16 bits para los datos de entrada en lugar de 8 bits. Esto produce una salida comprimida que es literalmente 1/4 del tamaño de la entrada, pero no tiene una precisión comparable.
3Dc +
3Dc + ( FourCC : ATI1) (también conocido como BC4 o Block Compression 4 ) puede comprimir texturas, es decir, mapas de luz, mapas de sombras, texturas HDR y propiedades de los materiales. 3Dc + proporciona una relación de compresión 2: 1 con texturas enteras de 8 bits de un solo componente ( DXT5 alpha) y una relación de compresión 4: 1 con mapas y texturas normales que constan de dos componentes enteros de 8 bits