3Dc ( FourCC : ATI2 ), также известный как DXN , BC5 или Block Compression 5 — это алгоритм сжатия данных с потерями для карт нормалей , изобретенный и впервые реализованный ATI . Он основан на более раннем алгоритме DXT5 и является открытым стандартом . 3Dc в настоящее время реализован как ATI , так и Nvidia .
Целевое приложение, normal mapping, является расширением bump mapping , которое имитирует освещение на геометрических поверхностях путем считывания нормалей поверхности с прямоугольной сетки, аналогичной текстурной карте , что придает простым моделям впечатление повышенной сложности. Однако этот дополнительный канал увеличивает нагрузку на пропускную способность памяти графической системы. Существующие ранее алгоритмы сжатия с потерями, реализованные на потребительском 3D-оборудовании, не обладали точностью, необходимой для воспроизведения карт нормалей без чрезмерных видимых артефактов, что оправдывает разработку 3Dc.
Нормали поверхности — это трехмерные векторы единичной длины. Из-за ограничения длины необходимо хранить только два элемента любой нормали. Таким образом, входные данные представляют собой массив двумерных значений.
Сжатие выполняется блоками 4×4. В каждом блоке два компонента каждого значения сжимаются отдельно. Для каждого блока каждый из двух компонентов имеет палитру из 8 значений на выбор. Палитры генерируются из двух значений, представляющих начало и конец строки, а остальные шесть значений генерируются как линейные комбинации начальных и конечных значений.
Сжатие изначально достигается путем нахождения наименьшего и наибольшего значений 16 пикселей, которые должны быть сжаты, и сохранения каждого из них как 8-битной величины. Затем отдельные элементы в блоке 4×4 сохраняются с 3 битами каждый, представляя их положение на 8-шаговой линейной шкале от наименьшего значения до наибольшего. 3-битное значение каждого пикселя (индекс палитры) будет выбрано путем выбора записи палитры с минимальным расстоянием от исходных значений.
Общее хранилище составляет 128 бит на блок 4x4, если учитывать оба исходных компонента. В несжатой схеме с аналогичной 8-битной точностью исходные данные представляют собой 32 8-битных значения для той же области, занимая 256 бит. Таким образом, алгоритм обеспечивает коэффициент сжатия 2:1 .
Коэффициент сжатия иногда указывается как "до 4:1", поскольку для входных данных обычно используется 16-битная точность, а не 8-битная. Это дает сжатый вывод, который составляет буквально 1/4 размера входных данных, но он не имеет сопоставимой точности.
3Dc+ ( FourCC : ATI1) (также известный как BC4 или Block Compression 4 ) может сжимать текстуры, т. е. карты освещения, карты теней, текстуры HDR и свойства материалов. 3Dc+ обеспечивает степень сжатия 2:1 с однокомпонентными ( DXT5 alpha) 8-битными целочисленными текстурами и степень сжатия 4:1 с картами нормалей и текстурами, состоящими из двух 8-битных целочисленных компонентов.