3

我正在重新创建一些 Photoshop 混合,并尝试使用线性光模式。在 Photoshop 中,您将有一个 100% 不透明度的背景层,然后将一个 50% 不透明度的顶层设置为线性光作为混合模式。

我确实找到了有关如何进行线性光混合的信息,但它仅在两个图层都为 100% 不透明度时才有效。

这是执行线性光模式的着色器代码,当图层都处于 100% 不透明度时,它给出的结果与 Photoshop 相同:

#define BlendLinearDodgef           BlendAddf
#define BlendLinearBurnf            BlendSubstractf

#define BlendAddf(base, blend)      min(base + blend, 1.0)
#define BlendSubstractf(base, blend)    max(base + blend - 1.0, 0.0)


#define BlendLinearLightf(base, blend)  (blend < 0.5 ? BlendLinearBurnf(base, (2.0 * blend)) : BlendLinearDodgef(base, (2.0 * (blend - 0.5))))

我查看了http://en.wikipedia.org/wiki/Alpha_compositing但仍有问题。

如何让混合模式适用于半透明图层?

4

1 回答 1

5

您应该阅读PDF 规范以了解当您的 alpha 不是 100% 时如何使用混合模式。特别是,请参阅第 7.2 节“基本合成计算”。第 414 页上的公式应该解释您需要什么:

Cr= (1-as/ar) * Cb + (as/ar) * [(1-ab) * Cs + ab * B(Cb,Cs)]
于 2012-05-23T04:17:52.013 回答