Альфа предварительного умножения для DXT5

Я загружаю изображения DDS (DXT5) с прозрачной альфа-версией в OpenGL. Поскольку альфа предварительно не умножается и не может быть предварительно умножена на основе спецификаций DXT5, я получаю тонкий черный ореол вокруг видимой части текстуры, потому что я делаю некоторые операции смешивания на GPU. Мой вопрос: какой может быть лучший обходной путь Мой рендерер OpenGL обновляет текстуры сцены в каждом кадре, загружая их из IO, так что если я распаковываю DDS, затем предварительно умножаюсь, а затем сжимаю обратно, я получаю огромные накладные расходы. Другой вариант, который я думал, это добавить еще один проход рендеринга и сделать предварительно -множить во фрагментном шейдере и визуализировать в текстуру, затем использовать его для основного прохода. Это добавляет накладные расходы ко всему конвейеру, потому что у меня уже есть количество проходов спуска. Какие здесь дополнительные опции?

2 ответа

Решение

Проблема решена. У меня была поврежденная текстура DDS. Ручное предварительное умножение, которое я делал по умолчанию в фрагментном шейдере, прекрасно работает с действительным DXT5.

Почему бы просто не сделать так, чтобы ваш шейдер делал предварительное умножение альфа на месте, а затем делать то, что вы собирались делать в обычном режиме?

Нет необходимости рендерить это в текстуру. Просто всегда предварительно умножайте в своем шейдере, для всех текстур, где вам нужно предварительное умножение.

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