Сжатие текстур S3 - S3 Texture Compression

Сжатие текстур S3 (S3TC) (иногда также называют DXTn, DXTC, или же BCn) представляет собой группу связанных с потерями сжатие текстуры алгоритмы первоначально разработанный Iourcha et al. из S3 Graphics, Ltd.[1][2] для использования в их Дикарь 3D ускоритель компьютерной графики. Метод сжатия поразительно похож на опубликованный ранее. Сжатие цветных ячеек,[3] что, в свою очередь, является адаптацией Блочное усечение кодирования опубликовано в конце 1970-х гг. В отличие от некоторых алгоритмов сжатия изображений (например, JPEG ), Сжатие данных с фиксированной скоростью S3TC в сочетании с единственным доступом к памяти (см. Сжатие цветных ячеек и некоторые VQ -схемы) сделали его хорошо подходящим для использования при сжатии текстуры с аппаратным ускорением 3D компьютерная графика. Его последующее включение в Microsoft с DirectX 6.0 и OpenGL 1.3 (через GL_EXT_texture_compression_s3tc расширение ) привел к широкому распространению технологии среди производителей аппаратного и программного обеспечения. Хотя S3 Graphics больше не является конкурентом на рынке графических ускорителей, лицензионные сборы взимались и собирались за использование технологии S3TC до октября 2017 года, например, в Игровые приставки и видеокарты. Широкое использование S3TC привело к де-факто требование к драйверам OpenGL для его поддержки, но обремененный патентами статус S3TC представляет собой серьезное препятствие для Открытый исходный код реализации,[4] пока существовали подходы к реализации, которые пытались избежать запатентованных частей.[5]

Патент

Срок действия некоторых (например, US 5956431 A) из нескольких патентов USPTO на сжатие текстур S3 истек 2 октября 2017 г.[6] По крайней мере, один дополнительный патент, 6 775 417 долларов США, однако имел продление на 165 дней. Срок действия этого патента на продолжение истек 16 марта 2018 г.

Кодеки

Существует пять вариантов алгоритма S3TC (названных DXT1 через DXT5, ссылаясь на FourCC код, присвоенный Microsoft каждому формату), каждый из которых предназначен для определенных типов данных изображения. Все конвертируют блок 4 × 4 пиксели в 64-кусочек или 128-битное количество, что приводит к степени сжатия 6: 1 с 24-битным RGB входные данные или 4: 1 с 32-битным RGBA входные данные. S3TC - это с потерями алгоритм сжатия, приводящий к ухудшению качества изображения, эффект, который сводится к минимуму за счет возможности увеличения разрешения текстуры при сохранении тех же требований к памяти. Нарисованные от руки изображения, похожие на мультфильмы, плохо сжимаются и не сжимаются. карта нормалей данные, которые обычно генерируют артефакты. ATI с 3Dc алгоритм сжатия - это модификация DXT5, призванная преодолеть недостатки S3TC в отношении карт нормалей. id Программное обеспечение работал над проблемами сжатия карты нормалей в Судьба 3 перемещая красный компонент в альфа-канал перед сжатием и перемещая его назад во время рендеринга в пиксельный шейдер.[7]

Как и многие современные алгоритмы сжатия изображений, S3TC определяет только метод, используемый для распаковки изображений, что позволяет разработчикам разрабатывать алгоритм сжатия в соответствии с их конкретными потребностями, хотя патент по-прежнему распространяется на алгоритмы сжатия. В nVidia Карты от GeForce 256 до GeForce 4 также использовали 16-битную интерполяцию для рендеринга текстур DXT1, что приводило к появлению полос при распаковке текстур с цветовыми градиентами. Опять же, это произвело неблагоприятное впечатление сжатие текстуры, не относящиеся к основам самого кодека.

DXT1

DXT1 (также известный как блочное сжатие 1 или BC1) - это наименьший вариант S3TC, хранящий 16 входных пикселей в 64-битных выходных, состоящих из двух 16-битных значений цвета RGB 5: 6: 5. и и двухбитовая таблица поиска 4x4.

Если (сравните эти цвета, интерпретируя их как два 16-битных беззнаковых числа), затем вычисляются два других цвета, так что для каждого компонента и Этот режим работает аналогично режиму 0xC0 оригинальный кодек Apple Video.[8]

В противном случае, если , тогда и прозрачный черный, соответствующий предварительно умноженный альфа-формат.

Затем выполняется консультация со справочной таблицей для определения значения цвета для каждого пикселя со значением 0, соответствующим и значение 3 соответствует .

DXT2 и DXT3

DXT2 и DXT3 (вместе также известные как блочное сжатие 2 или BC2) преобразуют 16 входных пикселей (соответствующих блоку пикселей 4x4) в 128 бит выходных данных, состоящих из 64 бит альфа-канал данные (4 бита для каждого пикселя), за которыми следуют 64 бита данных цвета, закодированных так же, как DXT1 (за исключением того, что всегда используется 4-цветная версия алгоритма DXT1 вместо того, чтобы решать, какую версию использовать на основе относительной ценности и ).

В DXT2 данные цвета интерпретируются как предварительно умноженный на альфа, в DXT3 он интерпретируется как не умноженный на альфа. Обычно DXT2 / 3 хорошо подходят для изображений с резкими альфа-переходами между полупрозрачными и непрозрачными областями.

DXT4 и DXT5

DXT4 и DXT5 (вместе также известные как блочное сжатие 3 или BC3) преобразуют 16 входных пикселей в 128 бит выходных данных, состоящих из 64 бит данных альфа-канала (два 8-битных альфа-значения и 3-битная таблица поиска 4x4), за которыми следует 64 бита данных о цвете (закодированы так же, как DXT1).

Если , затем вычисляются шесть других значений альфа, так что , , , , , и .

В противном случае, если , четыре других альфа-значения вычисляются так, что , , , и с и .

Затем выполняется консультация с поисковой таблицей для определения альфа-значения для каждого пикселя со значением 0, соответствующим и значение 7, соответствующее . Цветовые данные DXT4 предварительно умножаются на альфа, тогда как DXT5 - нет. Поскольку в DXT4 / 5 используется интерполированная альфа-схема, они обычно дают лучшие результаты для альфа-градиентов (прозрачности), чем DXT2 / 3.

Дальнейшие варианты

BC4 и BC5

BC4 и BC5 (блочное сжатие 4 и 5) добавлены в Direct3D 10. Они повторно используют кодировку альфа-канала, найденную в DXT4 / 5 (BC3).[9]

  • BC4 сохраняет 16 входных одноканальных (например, в оттенках серого) пикселей в 64 бита выходных данных, кодированных так же, как BC3 alphas. Расширенная палитра обеспечивает более высокое качество.
  • BC5 хранит 16 входных двухканальных пикселей (например, карта нормалей касательного пространства) в 128 битах выходных данных, состоящих из двух половин, каждая из которых закодирована так же, как и альфа-каналы BC3.

BC6H и BC7

BC6H (иногда BC6) и BC7 (блочное сжатие 6H и 7) добавлены в Direct3D 11.[9]

  • BC6H кодирует 16 входных пикселей RGB HDR (float16) в 128 бит выходных данных.
  • BC7 кодирует 16 входных пикселей RGB8 / RGBA8 в 128 бит выходных данных.

BC6H и BC7 имеют гораздо более сложный алгоритм с выбором режимов кодирования. В результате качество намного лучше.[9]

Сравнение формата S3TC

FOURCCИмя DX 10/11ОписаниеПреумноженная альфа?Коэффициент сжатияТип текстуры
DXT1BC11-битный альфа / непрозрачныйда6: 1 (для 24-битного исходного изображения)Простой не-альфа
DXT2BC2Явная альфада4:1Резкая альфа
DXT3BC2Явная альфаНет4:1Резкая альфа
DXT4BC3Интерполированная альфада4:1Градиент альфа
DXT5BC3Интерполированная альфаНет4:1Градиент альфа
Нет данныхBC4Интерполированная шкала серогоНет данных2:1Градиент
Нет данныхBC5Интерполированный двухканальныйНет данных2:1Градиент

Смотрите также

Рекомендации

  1. ^ США 5956431  «Сжатие изображения на основе блоков с фиксированной скоростью и предполагаемыми значениями пикселей»
  2. ^ [1], Юрча, Константин I .; Кришна С. Наяк и Чжоу Хонг, «Система и метод для блочного сжатия изображения с фиксированной скоростью и предполагаемыми значениями пикселей» 
  3. ^ "Бумага для сжатия цветных ячеек IEEE 1990 г.". Ieeexplore.ieee.org. Дои:10.1109 / TENCON.1990.152671. S2CID  62015990. Цитировать журнал требует | журнал = (помощь)
  4. ^ «Ситуация с S3TC на официальной информационной странице DRI». Dri.freedesktop.org. Получено 2012-01-25.
  5. ^ S2TC: возможное решение патентной ситуации S3TC на фороникс
  6. ^ Йетс, Том (2017-02-15). «Вот почему я пью: обсуждение правового состояния Fedora». LWN.net. Получено 2017-02-16. ... Срок действия патента на сжатие текстур S3 истекает 2 октября 2017 года, поэтому игры Steam могут лучше работать в Fedora после этой даты. ...
  7. ^ Даффи, Роберт (27 июля 2004 г.). «Требования к видео для DOOM 3». Gamershell.com. Архивировано из оригинал 3 января 2008 г.. Получено 2012-01-25.
  8. ^ Тонни, Роберто и др. "Яблочный RPZA ". MultimediaWiki.
  9. ^ а б c Рид, Натан. «Понимание форматов сжатия текстур BCn». Блог о программировании Натана Рида.

внешняя ссылка

(Wayback Machine копия)