#opengl #blending #multisampling #premultiplied-alpha
Вопрос:
Я визуализирую некоторые треугольники в многоплановую текстуру. Затем превратите эту текстуру в обычную текстуру и нарисуйте текстурированный квадрат на экране.
Мне нужна окончательная текстура, чтобы предварительно умножить альфа. Есть ли способ сообщить OpenGL об автоматическом предварительном умножении полупрозрачных пикселей в текстуре с несколькими выборками (или при размытии)?
Или единственный способ-использовать дополнительный проход шейдера для выполнения умножения вручную?
Комментарии:
1. В идеале вы уже хотите, чтобы входные текстуры имели предварительно умноженную альфа, иначе вы получите артефакты, когда текстурный фильтр интерполирует соседние тексели с разными значениями альфа.
2. Конечно, это то, к чему я стремлюсь, но разрешение текстуры с множественной дискретизацией не будет предварительно умножено на альфа при сглаживании пикселей, созданных с помощью множественной дискретизации.
Ответ №1:
Многопараметрическое решение blit не может выполнить предварительное умножение. Вам придется предварительно умножить пиксели текстуры в процессе считывания из текстуры.
Комментарии:
1. Вот что я подозревал. Дополнительная проблема, однако, заключается в том, что мне нужно нарисовать два типа объектов в текстуре с несколькими выборками: 1) смешанные прозрачные спрайты, у которых уже есть предварительно умноженная альфа, и 2) полностью непрозрачные треугольники, единственная альфа которых создается путем сглаживания (и она не умножается). Таким образом, я получаю умноженные и прямые значения в текстуре с несколькими выборками. Не уверен, что было бы лучшим способом организовать все это так, чтобы конечным результатом были все умноженные значения.