Сжатие текстур S3


Сжатие текстур S3 ( S3TC ) (иногда также называемое DXTn , DXTC или BCn ) представляет собой группу связанных алгоритмов сжатия текстур с потерями, первоначально разработанных Iourcha et al. компании S3 Graphics, Ltd. [1] [2] для использования в их ускорителе компьютерной графики Savage 3D . Метод сжатия поразительно похож на ранее опубликованный Color Cell Compression [3] , который, в свою очередь, является адаптацией Block Truncation Coding , опубликованного в конце 1970-х годов. В отличие от некоторых алгоритмов сжатия изображений (например, JPEG ), сжатие данных S3TC с фиксированной скоростью в сочетании с единым доступом к памяти (см. Color Cell Compression и некоторые схемы на основе VQ ) сделали его хорошо подходящим для использования при сжатии текстур в трехмерной компьютерной графике с аппаратным ускорением . Его последующее включение в 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] По крайней мере один продолжающийся патент, US 6 775 417 , однако имел продление на 165 дней. Срок действия этого продленного патента истек 16 марта 2018 г.

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

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

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