Вернуться в блог
Основы

Что такое сжатие текстур?

8 минута чтения

Сжатие текстур — это фундаментальный метод современного графического программирования, который позволяет разработчикам сократить использование памяти и повысить производительность рендеринга. В этой статье рассказывается, что такое сжатие текстур, почему оно важно и как оно работает.

Что такое сжатие текстур?

Сжатие текстур — это специализированная форма сжатия изображений, разработанная специально для использования с графическим оборудованием (GPU). В отличие от форматов изображений общего назначения, таких как JPEG или PNG, форматы сжатия текстур оптимизированы для произвольного доступа графического процессора в реальном времени во время рендеринга.

Традиционные форматы изображений должны быть полностью распакованы перед использованием, но форматы сжатия текстур могут быть распакованы графическим процессором «на лету» при выборке текселей. Это позволяет сжатым текстурам оставаться сжатыми в памяти графического процессора, что значительно снижает пропускную способность памяти и требования к объему памяти.

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

Зачем использовать сжатие текстур?

Сжатие текстур обеспечивает несколько важных преимуществ для графических приложений:

Уменьшенное использование памяти

Сжатые текстуры могут снизить потребление памяти в 4–8 раз по сравнению с несжатыми текстурами, обеспечивая более подробный и разнообразный контент.

Меньшая пропускная способность памяти

Меньше данных, передаваемых между памятью и графическим процессором, означает более высокую производительность и более низкое энергопотребление, что особенно важно для мобильных устройств.

Улучшенная производительность

Уменьшение трафика памяти может значительно повысить частоту кадров и уменьшить задержку рендеринга в сценариях с использованием графического процессора.

Лучшее визуальное качество

Экономия памяти позволяет разработчикам использовать текстуры более высокого разрешения или больше вариаций текстур в рамках того же бюджета памяти.

Распространенные форматы сжатия текстур

Различные платформы и графические процессоры поддерживают разные форматы сжатия. Вот наиболее широко используемые из них:

ETC1/ETC2 (сжатие текстур Ericsson)

Стандартный формат для устройств Android и OpenGL ES. ETC1 поддерживает только RGB, а ETC2 добавляет поддержку альфа-канала и улучшенное качество.

Платформа: Android, OpenGL ES 3.0+

ASTC (Адаптивное масштабируемое сжатие текстур)

Современный гибкий формат, поддерживающий различные размеры блоков (от 4x4 до 12x12) и уровни качества. Обеспечивает превосходное управление соотношением качества и сжатия.

Платформа: Современные мобильные графические процессоры, Vulkan, OpenGL ES 3.2+

PVRTC (сжатие текстур PowerVR)

Формат, используемый в основном на устройствах iOS с графическими процессорами PowerVR. Известен хорошим сжатием, но может показывать артефакты на определенном контенте.

Платформа: iOS, старые устройства Android с графическими процессорами PowerVR

DXT/BCn (сжатие текстур S3/сжатие блоков)

Стандарт рабочего стола, также известный как BCn (блочное сжатие). Наиболее распространены DXT1/BC1–DXT5/BC3, при этом BC6H и BC7 обеспечивают HDR и более высокое качество.

Платформа: Рабочий стол (Windows, DirectX, OpenGL)

База универсальная

Формат транскодирования, который можно преобразовать в любой собственный формат графического процессора во время выполнения. Позволяет одному сжатому файлу работать на всех платформах.

Платформа: Кроссплатформенность (транскодирует в ETC, ASTC, DXT и т. д.)

Как работает сжатие текстур

Большинство алгоритмов сжатия текстур работают путем разделения изображения на небольшие блоки (обычно 4x4 пикселя) и независимого кодирования каждого блока. Этот блочный подход обеспечивает произвольный доступ — графический процессор может распаковывать только те блоки, которые ему необходимы для конкретного образца текстуры.

Внутри каждого блока алгоритм обычно хранит небольшую палитру цветов (обычно 2–4 цвета) и значения индекса, указывающие, какой цвет палитры должен использовать каждый пиксель. Более продвинутые форматы, такие как ASTC, используют сложные схемы интерполяции для достижения лучшего качества.

Пример сжатия

Текстура RGBA 512x512 с разными уровнями сжатия:

В несжатом виде: 512 × 512 × 4 байта = 1 048 576 байт (1 МБ).
Сжатый (ASTC 6x6): 512 × 512 / (6 × 6) × 16 байт = 116 508 байт (~ 114 КБ).
Степень сжатия: 9:1 (уменьшение размера на 89%).

Лучшие практики

  • Выберите подходящий формат для вашей целевой платформы — используйте ETC2/ASTC для мобильных устройств, BCn для настольных компьютеров.
  • Рассмотрите возможность использования нескольких степеней сжатия: более высокое качество для важных текстур и более низкое для фона.
  • Протестируйте разные размеры блоков (для ASTC), чтобы найти лучший баланс между качеством и размером файла.
  • Используйте разные форматы для разных типов текстур — карты нормалей часто требуют других настроек, чем карты цветов.
  • Всегда предварительно просматривайте сжатые текстуры в целевом приложении, чтобы проверить визуальное качество.

Заключение

Сжатие текстур — важный инструмент для современной разработки графики, позволяющий повысить производительность, снизить использование памяти и повысить качество визуальных эффектов. Понимание доступных форматов и их компромиссов поможет вам принимать обоснованные решения для ваших проектов.

Независимо от того, разрабатываете ли вы для мобильных, настольных или веб-платформ, сжатие текстур может значительно повысить эффективность и визуальное качество вашего приложения. Наши онлайн-инструменты позволяют легко экспериментировать с различными форматами и настройками, чтобы найти идеальный баланс для ваших нужд.

Дальнейшее чтение и ссылки

Расширьте свои знания с помощью этих тщательно подобранных ресурсов:

Попробуйте наши инструменты