复制iOS的kCGBlendModeSoftLight混合



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

问题是,虽然有很多(不同的)ps图象处理软件的柔光混合的描述,我感兴趣的是CoreGraphics的版本。

有人知道CG中确定混合结果的确切公式吗?

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

用于创建此过滤器的公式在PDF规范中有描述,该规范可从Adobe Developer Center在线获得。

你可以从这个页面得到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)

本节的介绍指出,定义使用特定符号的混合模式是"可分离的",这意味着公式分别应用于组件。柔光混合模式是这些混合模式之一,所以你不需要计算亮度值或类似的东西。

相关内容

  • 没有找到相关文章

最新更新