WebP с альфа-потерей данных цветовых каналов
В настоящее время мы переключаемся на WebP для текстур в видеоиграх. Мы столкнулись с проблемой, когда области на изображении с нулевым альфа-каналом теряют все детали. Вы можете увидеть этот эффект в следующем примере:
Исходное изображение (слева - цветные каналы, справа - альфа-канал)
Как вы можете видеть, области с нулевым альфа-каналом утратили свою детализацию.
Эта оптимизация имеет смысл, когда альфа-канал используется в качестве прозрачности. Однако в нашей игре мы используем альфа-канал для чего-то другого и должны поддерживать целостность цветового канала независимо от альфа-канала. Как отключить этот эффект в кодере, чтобы цветовой канал кодировался нормально?
Я должен упомянуть, что я использую libwebp в C++, вызывая функцию WebPEncodeRGBA.
Спасибо!
2 ответа
https://developers.google.com/speed/webp/docs/cwebp
В этой документации задан параметр -exact.
-exact Сохранять значения RGB в прозрачной области. По умолчанию отключено, чтобы помочь сжимаемости.
Нашел решение. После отслеживания кода libwebp я обнаружил недокументированную опцию в WebPConfig под названием "точный". Установка этого значения в 1 не позволит библиотеке оптимизировать области с нулевым альфа-каналом при кодировании.