Алгоритмы сжатия игровых текстур. Часть 4.
ASTC
ASTC (Adaptive Scalable Texture Compression) – метод сжатия от компаний ARM и AMD. Поддерживает сжатие от 1 до 4 каналов, имеет фиксированный размер блока в 128 бит, вошёл в OpenGl в виде официального расширения в 2012 году.
Алгоритм очень гибкий и прогрессивный: его возможности и универсальность превышают S3TC, отличие от последнего или повышение качества сжатия не будет означать смену формата текстуры и возможную переделку шейдера потому, что алгоритм един и имеет огромное количество настроек. Имеет аппаратную поддержку со стороны мобильных устройств и используется на проекте TANKS BLITZ.
Вариативность размера блока:
Можно выбрать размер от 4х4 до 12х12 и таким образом контролировать размер файла и компрессию. По мере увеличения площади блока качество будет падать:
Рисунок 33. Влияние различных размеров блока на артефакты. Подпись каждого тайла сверху вниз: размер блока, его площадь, бит на пиксель.
Такая свобода выбора заставляет лавировать между размерами текстуры и количеством артефактов. На проекте есть определённый «коридор» из верхней и нижней планки 5х5 до 10х8 (значение колеблется в зависимости от типа текстуры). Когда сжатие выбрано некорректно, то артефакты могут перевесить
выигрыш в весе текстуры (см. рис. 34).
Рисунок 34. Багрепорт от QA с просьбой снизить компрессию, уменьшив блок.
Вариативность работы с цветовыми каналами:
Алгоритм позволяет использовать различные варианты цветовых каналов в файле:
· Одноканальный (L);
· Два канала, коррелированные (LA);
· Два канала, некоррелированные (L+A);
· Три канала, все коррелированные (RGB);
· Три канала, третий из которых не коррелирован с первыми двумя (RG+B);
· Четыре канала, все коррелированы (R+G+B+A);
· Четыре канала, четвертый из которых не коррелирован с первыми тремя (RGB+A).
Причем количество каналов в каждом блокезадаётся на месте. Если у блока 2 канала пустые, а в третьем есть информация,то кодироваться он будет как одноканальный:
Рисунок 35. Пример двухканальной текстуры Char Mle 75 из игры TANKS BLITZ.Поскольку у исходника канал В был пустой, игровая текстура имеет только 2 канала.
Опциональная корреляция каналов:
У алгоритмов S3TC корреляция цветовых каналов была прописана жёстко и служила оптимизации сжатия. На практике это означало влияние одного канала на другой при сжатии. У ASTC эта опция отключаема, но служит не прямым указанием к действию, а скорее разрешением на использование: решение будет за конвертером.
Динамическая поддержка HDR
Поблочная. Т.е. если в блоке значения цветов не используют HDR, то сжатие будет без него.
В основе метода кодирования лежит представление базовых цветов и коэффициентов интерполяции (восстановления промежуточных цветов) в виде чисел с троичным (трит) или пятеричным (квинт) основанием с последующим кодированием в двоичной системе. Данный подход позволяет значительно сократить пустоту в блоках пожатой текстуры и более эффективно использовать место в памяти.
Разбивка блока
Также как и алгоритмы BC6H/BC7, ASTC использует разбиение сжимаемых блоков на регионы. Однако, в отличие от алгоритмов, где была жёстко заданная таблица разбиений на 32 по 2 и 3 региона каждый, количество вариантов разбиения у ASTC существенно больше. Фактически, мы говорим о генерации разбиения блока: для определения номера блока разбиения используется не только номер разделения, но и размеры блока с координатами текселя.
Рисунок 36. Варианты разбиения на 2, 3 и 4 зоны. Здесь показана лишь малая часть всех возможных вариантов.
Однако, при всех своих преимуществах, у алгоритма до сих пор нет поддержки на ПК со стороны железа, написание декодера будет сложным и затратным. Кроме того, программный декодер никогда не станет таким же быстрым и удобным, как его железная реализация. Таким образом, все преимущества алгоритма купируются затратами на его поддержку на ПК. Фактически, сейчас, если мы говорим о сжатии текстур на пк, то имеем ввиду S3TC, а на мобильных устройствах ASTC.
Заключение
Мир сжатия текстур не ограничивается только двумя рассмотренными алгоритмами — их намного больше. У каждого алгоритма сжатия есть
свои преимущества и недостатки. Поэтому чтобы грамотно выбрать оптимальный,нужно знать все плюсы и минусы каждого. И, даже если семейство было уже выбрано, необходимо знать особенности форматов внутри семейства, чтобы грамотно с ними работать.