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

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

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

После сохранения как WebP

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

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

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

Спасибо!

2 ответа

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

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

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

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

Другие вопросы по тегам