3Dc
3Dc ( FourCC : ATI2), также известный как DXN , BC5 или Block Compression 5, — это алгоритм сжатия данных с потерями для карт нормалей , изобретенный и впервые реализованный ATI . Он основан на более раннем алгоритме DXT5 и является открытым стандартом . 3Dc теперь реализуется как ATI, так и Nvidia .
Целевое приложение
[ редактировать ]Целевое приложение, картографирование нормалей, является расширением картографирования рельефа , которое имитирует освещение на геометрических поверхностях путем считывания нормалей поверхности из прямолинейной сетки, аналогичной карте текстур , что придает простым моделям впечатление повышенной сложности. Однако этот дополнительный канал увеличивает нагрузку на пропускную способность памяти графической системы. Ранее существовавшим алгоритмам сжатия с потерями, реализованным на потребительском 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+
[ редактировать ]3Dc+ ( FourCC : ATI1) (также известный как BC4 или Block Compression 4 ) может сжимать текстуры, то есть карты освещения, карты теней, HDR-текстуры и свойства материалов. 3Dc+ обеспечивает степень сжатия 2:1 для однокомпонентных ( DXT5 альфа) 8-битных целочисленных текстур и степень сжатия 4:1 для карт нормалей и текстур, состоящих из двух 8-битных целочисленных компонентов.