预乘Alpha和Alpha测试

时间:2013-03-05 16:11:23

标签: opengl directx shader alpha

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

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

例如,如果我的着色器的最终结果为RGBA(1,0,0,0.75)直alpha并因此RGBA(0.75,0,0,0.75)预乘alpha,则在进行alpha测试时结果应保持RGBA(1,0,0,0.75)

如果我们进行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 混合时,我使用一个+ invsrcalpha混合并获得RGBA(0.25,1,0.25,1)的最终颜色。所以我的绿色通道保持在100%,因为背部缓冲区的绿色为100%,原来的绿色也是如此,因此无法在绿色通道上获得低于100%的效果。

当Alpha 测试时,没有进行混合。相反,我的绿色将直接渲染到后台缓冲区RGBA(0,0.75,0,1)。但我想要的颜色是RGBA(0,1,0,1)

0 个答案:

没有答案