输出RGB是否应按非预乘Alpha混合方程中的输出Alpha除以?

时间:2017-07-12 23:33:58

标签: opengl shader alpha alphablending blending

alpha compositing wiki中,我看到混合方程式是这样的(没有预乘):

equation0

但是在this slides中,等式是这样的:

equation1

在第一个等式中,outRGB除以outAlpha。 这是什么意思?哪一个是正确的等式?

1 个答案:

答案 0 :(得分:0)

分裂的第一个公式是正确的。第二个是错误的,或者是为了采用非预乘的颜色并产生预乘的颜色。

无论如何,从预乘的公式中导出非预乘的公式非常容易,这恰好非常简单直观:

blended = front + back * (1.0 - front.a);

直觉是:我们采用正面颜色并为其添加一些背面颜色,即我们可以通过正面颜色看到的颜色。

非预乘版本将是:

blended.a = front.a + back.a * (1.0 - front.a);
blended.rgb = (front.rgb * front.a + back.rgb * back.a * (1.0 - front.a)) / blended.a;

请注意,此公式以及您提供的公式假定alpha在[0,1]范围内,而不是[0,255]。