Алгоритмы сжатия игровых текстур. Часть 4.

ASTC

ASTC (Adaptive Scalable Texture Compression) – метод сжатия от компаний ARM и AMD. Поддерживает сжатие от 1 до 4 каналов, имеет фиксированный размер блока в 128 бит, вошёл в OpenGl в виде официального расширения в 2012 году.
Алгоритм очень гибкий и прогрессивный: его возможности и универсальность превышают S3TC, отличие от последнего или повышение качества сжатия не будет означать смену формата текстуры и возможную переделку шейдера потому, что алгоритм един и имеет огромное количество настроек. Имеет аппаратную поддержку со стороны мобильных устройств и используется на проекте TANKS BLITZ.

Вариативность размера блока:

Можно выбрать размер от 4х4 до 12х12 и таким образом контролировать размер файла и компрессию. По мере увеличения площади блока качество будет падать:

37[1].jpg
Рисунок 33. Влияние различных размеров блока на артефакты. Подпись каждого тайла сверху вниз: размер блока, его площадь, бит на пиксель.

Такая свобода выбора заставляет лавировать между размерами текстуры и количеством артефактов. На проекте есть определённый «коридор» из верхней и нижней планки 5х5 до 10х8 (значение колеблется в зависимости от типа текстуры). Когда сжатие выбрано некорректно, то артефакты могут перевесить
выигрыш в весе текстуры (см. рис. 34).

38[1].jpg

Рисунок 34. Багрепорт от QA с просьбой снизить компрессию, уменьшив блок.

Вариативность работы с цветовыми каналами:
Алгоритм позволяет использовать различные варианты цветовых каналов в файле:
· Одноканальный (L);
· Два канала, коррелированные (LA);
· Два канала, некоррелированные (L+A);
· Три канала, все коррелированные (RGB);
· Три канала, третий из которых не коррелирован с первыми двумя (RG+B);
· Четыре канала, все коррелированы (R+G+B+A);
· Четыре канала, четвертый из которых не коррелирован с первыми тремя (RGB+A).
Причем количество каналов в каждом блокезадаётся на месте. Если у блока 2 канала пустые, а в третьем есть информация,то кодироваться он будет как одноканальный:

39[1].jpg

Рисунок 35. Пример двухканальной текстуры Char Mle 75 из игры TANKS BLITZ.Поскольку у исходника канал В был пустой, игровая текстура имеет только 2 канала.

Опциональная корреляция каналов:
У алгоритмов S3TC корреляция цветовых каналов была прописана жёстко и служила оптимизации сжатия. На практике это означало влияние одного канала на другой при сжатии. У ASTC эта опция отключаема, но служит не прямым указанием к действию, а скорее разрешением на использование: решение будет за конвертером.

Динамическая поддержка HDR

Поблочная. Т.е. если в блоке значения цветов не используют HDR, то сжатие будет без него.
В основе метода кодирования лежит представление базовых цветов и коэффициентов интерполяции (восстановления промежуточных цветов) в виде чисел с троичным (трит) или пятеричным (квинт) основанием с последующим кодированием в двоичной системе. Данный подход позволяет значительно сократить пустоту в блоках пожатой текстуры и более эффективно использовать место в памяти.

Разбивка блока

Также как и алгоритмы BC6H/BC7, ASTC использует разбиение сжимаемых блоков на регионы. Однако, в отличие от алгоритмов, где была жёстко заданная таблица разбиений на 32 по 2 и 3 региона каждый, количество вариантов разбиения у ASTC существенно больше. Фактически, мы говорим о генерации разбиения блока: для определения номера блока разбиения используется не только номер разделения, но и размеры блока с координатами текселя.

40[1].jpg

Рисунок 36. Варианты разбиения на 2, 3 и 4 зоны. Здесь показана лишь малая часть всех возможных вариантов.

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

Заключение

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

804 0 850 12
4
2025-07-23
Очень интересно. Спасибо!
2025-07-26
Если мы говорим про ПК, то DDS не является лучшим вариантом? Интересно стало, спасибо за статью
2025-07-27
Серёжа, у GODOT ещё, какой-то алгоритм был, кстати
2025-08-22
Большое спасибо за статьи!
RENDER.RU