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

Should the Output RGB be Divided by Output Alpha in the Non-premultiplied Alpha Blending Equation?

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

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

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

第一个带除法的公式是正确的。第二个要么是错误的,要么是设计为采用非预乘颜色并产生预乘颜色。

反正从预乘公式推导出非预乘公式还是蛮容易的,恰好很简单直观:

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] 范围内。