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