3

我正在尝试使用着色器复制 CoreGraphics kCBBlendModeSoftLight 混合。(我已经实现了一些其他的 CG 混合模式)

问题是,虽然 Photoshop 的柔光混合有很多(不同的)描述,但我对 CoreGraphics 的版本很感兴趣。

有谁知道 CG 中用于确定混合结果的确切公式?

4

1 回答 1

3

对于 CG,它没有明确记录,但Core Image 的 CISoftLightBlendMode 过滤器的文档说:

PDF 规范中描述了用于创建此过滤器的公式,该规范可从 Adob​​e 开发人员中心在线获取。

这是您可以从中获取 PDF 参考的页面。给出的公式是(在伪代码中,由我从 PDF 中的数学语法转录,同时希望我没有弄乱它的任何部分):

D(float x) =
    x ≤ 0.25
    ? ((16.0 × x - 12.0) × x + 4.0) × x
    : sqrt(x)

softlight(__color backdrop, __color source) =
    source ≤ 0.5
    ? backdrop - (1.0 - 2.0 × source) × backdrop × (1.0 - backdrop)
    : backdrop + (2.0 × source - 1.0) × (D(backdrop) - backdrop)

(对于 GLSL,您将使用vec4而不是 CIKL 的__color。)

该部分的介绍指出,其定义使用特定符号的混合模式是“可分离的”,这意味着该公式将分别应用于组件。柔光混合模式是这些混合模式之一,因此您不需要计算亮度值或类似的东西。

于 2013-04-02T07:28:32.160 回答