WebP с альфа-каналом теряет данные цветовых каналов

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

Исходное изображение (слева — цветовые каналы, справа — альфа-канал)

После сохранения в формате WebP

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

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

Я должен упомянуть, что я использую libwebp в C++, вызывая функцию WebPEncodeRGBA.

Спасибо!


person Johnathan    schedule 13.09.2016    source источник


Ответы (2)


https://developers.google.com/speed/webp/docs/cwebp

В этой документации задокументирован параметр -exact.

-exact Сохранить значения RGB в прозрачной области. По умолчанию отключено, чтобы улучшить сжимаемость.

person Namstel    schedule 10.07.2018

Решение найдено. Проанализировав код libwebp, я обнаружил в WebPConfig недокументированный вариант под названием "exact". Если установить для этого параметра значение 1, библиотека не сможет оптимизировать области с нулевым альфа-каналом при кодировании.

person Johnathan    schedule 13.09.2016
comment
Было бы лучше, если бы вы могли добавить ссылку и код для него. Это сделает ваш ответ намного лучше. Спасибо - person saurabheights; 13.09.2016