透明和半透明背景上的混合模式

7 algorithm graphics blend

通常,"正常"混合模式方程式如下所示:

D = Sa * S + D * (1.0 - Sa)
Run Code Online (Sandbox Code Playgroud)

其中D是目标颜色,Sa是源alpha,S是源颜色.

现在,这完全不透明的目的地工作正常,但我想知道你如何处理半透明和完全透明的目的地.

当在完全透明的目的地上混合源时,源像素(像素是颜色和alpha)将保持不变并且不像之前的等式那样混合,并且如果目标背景是完全不透明的,则应该应用上面的等式,但是我找不到一个很好的方法来处理目标alpha在0和1之间的情况.

例如,如果在透明背景上混合白色像素和50%alpha,则颜色不应该倾向于透明颜色值(或多或少处于未定义状态),目标颜色应为全白,而不是50%(在alpha乘法之后),这是你在应用上面的等式后得到的(如果D与S的颜色相同,这是我想到的).

Mr.*_*rna 8

该等式是一般混合方程的简化.它假定目标颜色是不透明的,因此会删除目标颜色的alpha术语.

D = C1 * C1a + C2 * C2a * (1 - C1a)
Run Code Online (Sandbox Code Playgroud)

其中D是结果颜色,C1是第一个元素的颜色,C1a是第一个元素的alpha,C2是第二个元素颜色,C2a是第二个元素的alpha.目标alpha使用以下公式计算:

Da = C1a + C2a * (1 - C1a)
Run Code Online (Sandbox Code Playgroud)

得到的颜色与alpha预乘.要将颜色恢复为未经过相乘的值,只需除以Da即得到的alpha值.

  • 此外,所得到的颜色由alpha预乘.您可以通过将生成的颜色除以生成的alpha来恢复到未加工的颜色.正如我对此进一步考虑的那样,这就是我认为你想要的. (2认同)