预乘alpha,是还是不是?


10

我应该使用预乘Alpha吗?阅读汤姆·福赛斯的文章,似乎没什么意思。预乘alpha(AKA添加剂混合)在每种意义上都是优越的。
但是,预乘alpha似乎有一个主要缺点,它没有得到工具的很好支持。

您/您是否使用过预乘alpha?

工具如何支持?

特别是,我认为gimp无法很好地编辑预乘的alpha图像。是否有任何gimp插件可导出预乘alpha?外部工具呢?


我的位置与您完全相同-我想在任何地方使用它,但是如果需要为它开发一些额外的工具,我不确定我可以多么轻松地编辑资产。
Kylotan

Answers:


4

我现在使用预乘Alpha的XNA 3.1(在4.0中添加了本机预乘Alpha支持)。

通常,这可以节省我的时间,并确保图像的透明区域具有正确的颜色。我还移植到Silverlight,默认情况下会进行预乘法。

XNA的内容管道使添加预分散的alpha预处理变得非常容易。

该链接包含执行转换的代码。对于每个像素:

c.R = (byte)(c.R * c.A / 255);
c.G = (byte)(c.G * c.A / 255);
c.B = (byte)(c.B * c.A / 255);

建立内容管道有很多要说的。如果您不是使用XNA,而是使用Visual Studio,则可以自己拼凑一个。任何其他IDE /构建过程也应具有能力。

最后,如果您的构建中没有内容处理步骤(因此很可能您没有太多内容),则在加载纹理时可以在运行时轻松地执行预乘法。它将为您的纹理加载时间增加一些常数。

(如果含义不明确:您可能应该编辑预乘的Alpha图像。如果可以,请导出预乘的图像,或者最好对其进行预处理。)


谢谢。就像预乘Alpha在XNA中已经足够受支持(或者很快就会被支持)一样。我仍在寻找非XNA工具来创建我的管道。
deft_code 2010年

3

如果您碰巧正在使用XNA,则对预乘alpha有很多支持。通常,转换是在内容管道中完成的,但是没有什么可以阻止您自己进行转换。


1

我在引擎中默认使用预乘alpha(如果需要某种特殊效果,艺术家可以在材质定义文件中强制进行非预乘)

正如您所注意到的,工具不能很好地处理预乘的alpha-艺术家可以完全独立地设置颜色和alpha通道。我已经进行了设置,以便我的艺术家可以使用非Premul Alpha来创建纹理图像(这在艺术家的脑海中似乎更容易),并且默认情况下,转换为引擎纹理格式的工具会将Alpha乘以。有一个开关,因此如果绝对需要,可以生成未预乘的开关。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.