Сжатие текстур S3
Сжатие текстур S3 ( S3TC ) (иногда также называемое DXTn , DXTC или BCn ) — это группа связанных с потерями, сжатия текстур алгоритмов первоначально разработанных Iourcha et al. ООО «С3 Графика» [1] [2] для использования в их Savage 3D ускорителе компьютерной графики . Метод сжатия поразительно похож на ранее опубликованный Color Cell Compression , [3] который, в свою очередь, является адаптацией блочного кодирования усечения , опубликованной в конце 1970-х годов. В отличие от некоторых алгоритмов сжатия изображений (например, JPEG ), сжатие данных S3TC с фиксированной скоростью в сочетании с единым доступом к памяти (см. Color Cell Compression и некоторые схемы на основе VQ ) сделало его хорошо подходящим для использования при сжатии текстур с аппаратным ускорением в 3D . компьютерная графика . Ее последующее включение в Microsoft DirectX . 6.0 и OpenGL GL_EXT_texture_compression_s3tc 1.3 (через расширение ) привело к широкому распространению этой технологии среди производителей аппаратного и программного обеспечения Хотя S3 Graphics больше не является конкурентом на рынке графических ускорителей, до октября 2017 года взимались лицензионные сборы за использование технологии S3TC, например, в игровых консолях и видеокартах. Широкое использование S3TC привело к фактическому требованию, чтобы драйверы OpenGL поддерживали его, но обремененный патентами статус S3TC стал серьезным препятствием для с открытым исходным кодом . реализации [4] в то время как существовали подходы к реализации, которые пытались избежать запатентованных частей. [5]
Патент
[ редактировать ]Срок действия некоторых (например, US 5956431 A) патентов USPTO на сжатие текстур S3 истек 2 октября 2017 г. [6] Однако по крайней мере один продленный патент, US6,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 Software решила проблемы сжатия карт нормалей в Doom 3, переместив красный компонент в альфа-канал перед сжатием и переместив его обратно во время рендеринга в пиксельном шейдере. . [7]
Как и многие современные алгоритмы сжатия изображений, S3TC определяет только метод, используемый для распаковки изображений, что позволяет разработчикам разрабатывать алгоритм сжатия в соответствии со своими конкретными потребностями, хотя патент по-прежнему охватывает алгоритмы сжатия. GeForce Карты от nVidia 256 до GeForce 4 также использовали 16-битную интерполяцию для рендеринга текстур DXT1, что приводило к полосам при распаковке текстур с цветовыми градиентами. Опять же, это создавало неблагоприятное впечатление от сжатия текстур , не связанное с принципами работы самого кодека.
ДХТ1
[ редактировать ]DXT1 (также известный как Block Compression 1 или BC1) — это наименьшая разновидность S3TC, хранящая 16 входных пикселей в 64 битах вывода, состоящих из двух 16-битных цветовых значений RGB 5:6:5. и и двухбитовую справочную таблицу 4×4.
Если (сравните эти цвета, интерпретируя их как два 16-битных беззнаковых числа), затем вычисляются два других цвета, так что для каждого компонента и .Этот режим работает аналогично режиму 0xC0 оригинального кодека Apple Video . [8]
В противном случае, если , затем и прозрачный черный цвет, соответствующий предварительно умноженному альфа-формату . Этот цвет иногда вызывает черную рамку вокруг прозрачной области при использовании линейной фильтрации текстур и альфа-теста из-за интерполяции цветов между цветом непрозрачного текселя и соседнего черного прозрачного текселя.
Затем обращается к справочной таблице для определения значения цвета для каждого пикселя, причем значение 0 соответствует и значение 3, соответствующее .
ДХТ2 и ДХТ3
[ редактировать ]DXT2 и DXT3 (вместе также известные как Block Compression 2 или BC2) преобразуют 16 входных пикселей (соответствующих блоку пикселей 4x4) в 128 бит выходных данных, состоящих из 64 бит данных альфа-канала (4 бита для каждого пикселя), за которыми следуют 64 бита данных альфа-канала (4 бита для каждого пикселя). биты цветовых данных, закодированные так же, как DXT1 (за исключением того, что всегда используется 4-цветная версия алгоритма DXT1 вместо того, чтобы решать, какую версию использовать, на основе относительных значений и ).
В DXT2 данные цвета интерпретируются как предварительно умноженные на альфа , в DXT3 они интерпретируются как не умноженные на альфа. Обычно DXT2/3 хорошо подходят для изображений с резкими альфа-переходами между полупрозрачными и непрозрачными областями.
DXT4 и DXT5
[ редактировать ]DXT4 и DXT5 (вместе также известные как Block Compression 3 или BC3) преобразуют 16 входных пикселей в 128 бит выходных данных, состоящих из 64 бит данных альфа-канала (два 8-битных альфа-значения и 3-битная справочная таблица 4 × 4). за которым следуют 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 битах вывода, закодированных почти в [10] так же, как и альфа-версии BC3. Расширенная палитра обеспечивает более высокое качество.
- BC5 сохраняет 16 входных двухканальных пикселей (например, карты нормалей касательного пространства) в 128 бит выходных данных, состоящих из двух половин, каждая из которых закодирована аналогично BC4.
BC6H и BC7
[ редактировать ]BC6H (иногда BC6) и BC7 (сжатие блоков 6H и 7) добавлены в Direct3D 11. [9]
- BC6H кодирует 16 входных пикселей RGB HDR (float16) в 128 бит выходного сигнала. По сути, он рассматривает float16 как целое число со знаком 16 и интерполирует такие целые числа линейно. Это хорошо работает для блоков без смены знаков. Всего определено 14 режимов, хотя большинство из них отличаются минимально: реально используются только два режима прогнозирования. [10]
- BC7 кодирует 16 входных пикселей RGB8/RGBA8 в 128 бит выходного сигнала. Его можно понимать как сильно улучшенный BC3. [10]
BC6H и BC7 имеют гораздо более сложный алгоритм с выбором режимов кодирования. В результате качество намного лучше. [9] Эти два режима также определены гораздо точнее, с указанием диапазонов допустимых отклонений. Более ранние режимы BCn у разных производителей графических процессоров декодируются немного по-разному. [10]
Сравнение форматов S3TC
[ редактировать ]ФУРСС | Имя DX 10/11 | Описание | Альфа предварительно умножила? | Степень сжатия | Тип текстуры |
---|---|---|---|---|---|
ДХТ1 | BC1 | 1-битный альфа/непрозрачный | Да | 6:1 (для 24-битного исходного изображения) | Простой не альфа |
ДХТ2 | BC2 | Явная альфа | Да | 4:1 | Резкая альфа |
ДХТ3 | BC2 | Явная альфа | Нет | 4:1 | Резкая альфа |
DXT4 | BC3 | Интерполированная альфа | Да | 4:1 | Градиент альфа |
ДХТ5 | BC3 | Интерполированная альфа | Нет | 4:1 | Градиент альфа |
— | BC4 | Интерполированные оттенки серого | — | 2:1 | Градиент |
— | BC5 | Интерполированный двухканальный | — | 2:1 | Градиент |
— | BC6H | Интерполированный HDR (без альфа) | — | 6:1 | Градиент |
— | BC7 | Интерполированная альфа | ? | 4:1 | Градиент |
Предварительная подготовка данных
[ редактировать ]Текстуры BCn можно дополнительно сжимать для хранения и распространения на диске ( суперсжатие текстур ). Приложение распакует этот дополнительный слой и отправит данные BCn в графический процессор, как обычно.
BCn можно комбинировать с Oodle Textur, препроцессором с потерями, который изменяет входную текстуру, чтобы выходные данные BCn было легче сжимать компрессором LZ77 ( оптимизация искажения скорости ). BC7, в частности, может также использовать «bc7prep», проход без потерь для перекодирования текстуры в более сжимаемую форму (требующую ее инверсии при распаковке). [11]
crunch — еще один инструмент, выполняющий RDO и, при необходимости, дальнейшее перекодирование. [12]
В 2021 году Microsoft разработала алгоритм сжатия BCPack специально для текстур, сжатых с помощью BCn. Xbox серий X и S имеют аппаратную поддержку распаковки потоков BCPack. [13]
См. также
[ редактировать ]- S2TC , непатентованный обходной путь
- ФХТ1
- Поверхность DirectDraw
- ПВРТС
- Адаптивное масштабируемое сжатие текстур (ASTC)
- Сжатие текстур Ericsson (ETC1 и ETC2)
- Сжатие цветовых ячеек
Ссылки
[ редактировать ]- ^ US 5956431 «Блочное сжатие изображений с фиксированной скоростью и выведенными значениями пикселей»
- ^ US 5956431 , Юрча, Константин И.; Наяк, Кришна С. и Хонг, Чжоу, «Система и метод блочного сжатия изображений с фиксированной скоростью и выведенными значениями пикселей», опубликовано 21 сентября 1999 г.
- ^ «Бумага для сжатия цветных ячеек IEEE 1990 года». ИИЭЭ . дои : 10.1109/TENCON.1990.152671 . S2CID 62015990 .
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ «Ситуация S3TC на официальной информационной странице DRI» . Dri.freedesktop.org. Архивировано из оригинала 19 января 2012 г. Проверено 25 января 2012 г.
- ^ S2TC: возможный обходной путь для ситуации с патентом S3TC. Архивировано 13 мая 2016 г. на Wayback Machine на phoronix.
- ^ Йейтс, Том (15 февраля 2017 г.). «Вот почему я пью: обсуждение правового состояния Fedora» . LWN.net . Архивировано из оригинала 01 марта 2017 г. Проверено 16 февраля 2017 г.
... Срок действия патента на сжатие текстур S3 истекает 2 октября 2017 года, поэтому игры Steam могут работать лучше в Fedora после этой даты. ...
- ^ Даффи, Роберт (27 июля 2004 г.). «Требования к видео DOOM 3» . Gamershell.com. Архивировано из оригинала 3 января 2008 года . Проверено 25 января 2012 г.
- ^ Тони, Роберто и др. « Apple RPZA. Архивировано 4 июля 2017 г. в Wayback Machine ». МультимедиаВики.
- ^ Jump up to: а б с Рид, Натан. «Понимание форматов сжатия текстур BCn» . Блог по программированию Натана Рида . Архивировано из оригинала 09.11.2020 . Проверено 1 сентября 2020 г.
- ^ Jump up to: а б с д Гизен, Фабиан «ryg» (4 октября 2021 г.). «Декодирование GPU BCn» . Блог ryg . Архивировано из оригинала 24 июля 2023 года . Проверено 24 июля 2023 г.
- ^ «Сжатие текстур Oodle» . www.radgametools.com . Архивировано из оригинала 18 марта 2023 г. Проверено 03 апреля 2023 г. Упоминается часть с открытым исходным кодом: bc7enc_rdo. Архивировано 2 февраля 2021 г. на Wayback Machine.
- ^ «Crunch библиотека сжатия текстур с открытым исходным кодом» . Гитхаб . Архивировано из оригинала 9 сентября 2016 г. Проверено 13 сентября 2016 г.
- ^ «Обзор DirectStorage — комплект разработки игр Microsoft» . 16 марта 2023 года. Архивировано из оригинала 3 августа 2023 года . Проверено 3 августа 2023 г.