3

我有一个应该用于 alpha 混合或 alpha 测试的着色器,但传入的颜色值是预乘的 alpha 值。

在使用预乘 alpha 时,是否有一种简单/标准的方法可以让它为 alpha 混合和 alpha 测试产生“正确”的结果?

例如,如果我的着色器的最终结果是RGBA(1,0,0,0.75)直接 alpha 并且因此是RGBA(0.75,0,0,0.75)预乘 alpha,则结果应该RGBA(1,0,0,0.75)在 alpha 测试时保留。

如果我们进行 alpha 测试,也许一种选择是“划分”alpha 通道,即除以R上面的值A,以便我们得到0.75/0.75 = 1.0原始红色值。但是当 alpha 变为 0 时,这变得不确定。

假设后台缓冲区是RGBA(1,1,1,1),并且我正在使用部分透明的绿色RGBA(0,1,0,0.75)(直接 alpha)进行渲染。颜色作为预乘 alpha 传入RGBA(0,0.75,0,0.75)。当 alpha混合时,我使用 one + invsrcalpha 混合并获得最终颜色RGBA(0.25,1,0.25,1)。所以我的绿色通道保持在 100%,因为后台缓冲区有 100% 的绿色,我原来的绿色也是如此,所以在绿色通道上没有办法低于 100%。

在进行Alpha测试时,不会进行混合。相反,我的绿色将作为RGBA(0,0.75,0,1). 但我想要的颜色是RGBA(0,1,0,1)

4

0 回答 0