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 . Actualmente, 3Dc está implementado tanto por ATI como por Nvidia .
Aplicación objetivo
La aplicación objetivo, el mapeo de normales, es una extensión del mapeo de relieve que simula la iluminación en superficies geométricas mediante la lectura de las normales de la superficie a partir de una cuadrícula rectilínea análoga a un mapa de texturas , lo que da 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 el hardware 3D de consumo carecían de la precisión necesaria para reproducir mapas de normales sin artefactos visibles excesivos, lo que justifica 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 cada normal. Por lo tanto, la entrada es una matriz 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 uno de los dos componentes tiene una paleta de 8 valores entre los que 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ínimo y máximo 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 de 4×4 se almacenan con 3 bits cada uno, que representan su posición en una escala lineal de 8 pasos desde el valor mínimo hasta el máximo. El valor de 3 bits de cada píxel (el índice de la paleta) se elige seleccionando la entrada de la paleta con la distancia mínima a los valores originales.
El almacenamiento total es de 128 bits por bloque de 4x4 una vez que se consideran ambos componentes de origen. En un esquema sin comprimir con una precisión similar de 8 bits, los datos de origen constan de 32 valores de 8 bits para la misma área, ocupando 256 bits. Por lo 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 usar una 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 materiales. 3Dc+ proporciona una relación de compresión de 2:1 con texturas enteras de 8 bits de un solo componente ( DXT5 alpha) y una relación de compresión de 4:1 con mapas normales y texturas que constan de dos componentes enteros de 8 bits.
Referencias
- Artículo de Microsoft Developer Network sobre compresión de bloques en Direct3D 10
- ¿Qué es un mapa normal?
- CREACIÓN Y USO DE MAPAS NORMALES
- Creación de mapas normales
- 3Dc: texturas de mayor calidad con mejor compresión.
- Compresión de texturas
- Formatos de archivo abiertos
- Algoritmos de compresión con pérdida
- Software de gráficos 3D