Сжатие текстур — это специализированная форма сжатия изображений, разработанная для хранения текстурных карт в системах трехмерного рендеринга компьютерной графики . В отличие от обычных алгоритмов сжатия изображений, алгоритмы сжатия текстур оптимизированы для случайного доступа .
Сжатие текстур может быть применено для уменьшения использования памяти во время выполнения. Данные текстур часто являются крупнейшим источником использования памяти в мобильном приложении.
В своей основополагающей статье о сжатии текстур [1] Бирс, Агравала и Чаддха перечисляют четыре особенности, которые отличают сжатие текстур от других методов сжатия изображений. Эти особенности:
Учитывая вышесказанное, большинство алгоритмов сжатия текстур включают в себя некоторую форму векторного квантования с фиксированной скоростью и потерями небольших блоков пикселей фиксированного размера в небольшие блоки кодирующих бит фиксированного размера, иногда с дополнительными шагами предварительной и последующей обработки. Кодирование с усечением блоков является очень простым примером этого семейства алгоритмов.
Поскольку их шаблоны доступа к данным четко определены, декомпрессия текстур может выполняться «на лету» во время рендеринга как часть общего графического конвейера , что снижает общую пропускную способность и потребности в хранении во всей графической системе. Помимо текстурных карт, сжатие текстур может также использоваться для кодирования других видов карт рендеринга, включая карты рельефа и карты нормалей поверхности . Сжатие текстур также может использоваться вместе с другими формами обработки карт, такими как карты MIP и анизотропная фильтрация .
Примерами практических систем сжатия текстур являются S3 Texture Compression (S3TC), PVRTC , Ericsson Texture Compression (ETC) и Adaptive Scalable Texture Compression (ASTC); они могут поддерживаться специальными функциональными блоками в современных графических процессорах .
OpenGL и OpenGL ES, реализованные на многих видеоускорителях и мобильных графических процессорах, могут поддерживать несколько распространенных видов сжатия текстур — как правило, за счет использования расширений поставщиков.
Сжатая текстура может быть дополнительно сжата в том, что называется «суперсжатием». Форматы сжатия текстур с фиксированной скоростью оптимизированы для произвольного доступа и гораздо менее эффективны по сравнению с форматами изображений, такими как PNG . Добавляя дополнительное сжатие, программист может сократить разрыв в эффективности. Дополнительный слой может быть распакован ЦП, так что ГП получит обычную сжатую текстуру, [3] или, в более новых методах, распакован самим ГП. Суперсжатие экономит тот же объем VRAM, что и обычное сжатие текстур, но экономит больше места на диске и размера загрузки. [4]
Нейронное сжатие текстур материалов с произвольным доступом (нейронное сжатие текстур) — это технология Nvidia , которая обеспечивает два дополнительных уровня детализации (в 16 раз больше текселей , то есть в четыре раза большее разрешение) при сохранении аналогичных требований к хранению, как и у традиционных методов сжатия текстур. [5]
Основная идея заключается в сжатии нескольких текстур материалов и их цепочек MIP-карт вместе и использовании небольшой нейронной сети , оптимизированной для каждого материала, для их распаковки. [6]