有人可以解释一下,为什么使用预乘 alpha(和修正后的混合函数)渲染看起来与“正常”alpha 不同,而从数学上来说,它们是相同的?
我研究了这篇文章以了解预乘阿尔法:
http://blogs.msdn.com/b/shawnhar/archive/2009/11/06/premultiplied-alpha.aspx http://blogs.msdn.com/b/shawnhar/archive/2009/11/06/premultiplied-alpha.aspx
作者还说最终计算是一样的:
“查看传统与预乘 Alpha 的混合方程。如果将此颜色格式转换替换为预乘混合函数,您将得到传统混合函数,因此无论哪种方式都会产生相同的最终结果。不同之处在于预乘 Alpha 应用了(source.rgb * source.a) 计算作为预处理,而不是在混合硬件内部。”
我错过了什么吗?那为什么结果不同呢?
neshone
区别在于过滤。
想象一下,您有一个只有两个像素的纹理,并且您正好在两个像素之间的中间对其进行采样。还假设线性滤波。
Schematically:
R|G|B|A + R|G|B|A = R|G|B|A
non-premultiplied:
1|0|0|1 + 0|1|0|0 = 0.5|0.5|0|0.5
premultiplied:
1|0|0|1 + 0|0|0|0 = 0.5|0|0|0.5
注意绿色通道的差异。
过滤预乘 alpha 会产生正确的结果。
请注意,所有这些与混合无关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)