【叠加模式】Photoshop图层混合模式的计算公式

转自:https://www.cgspread.com/3551.html
原作者:weijer
原标题:【叠加模式】Photoshop图层混合模式的计算公式
本文经过重新排版,仅供学习参考,严谨商用

  PS和Nuke的叠加模式计算算法相差甚远,最近想在Nuke中模拟ps叠加模式。老外已经有个gizmo了么免费的功能少,得付费购买,先百度找了下PS的图层混合模式的计算公式收藏慢慢想想怎么在Nuke中实现最好。

psnuke1

原图

注释:

  1. 混合模式的数学计算公式,另外还介绍了不透明度。
  2. 这些公式仅适用于RGB图像,对于Lab颜色图像而言,这些公式将不再适用。
  3. 在公式中
    A 代表下面图层的颜色值;
    B 代表上面图层的颜色值;
    C 代表混合图层的颜色值;
    d 表示该层的透明度。

C_{RGBi} = Max(A_{RGBi}, B_{RGBi}) 2指X颜色的RGB任意分量 \bar {X} 指X的反色 \bar {X} = 255 - X

1. Opacity 不透明度

C_{RGBi}=dA_{RGBi}+(1-d)B_{RGBi}

相对于不透明度而言,其反义就是透明度。
这两个术语之间的关系就类似于正负之间的关系:100%的不透明度就是0%的透明度。
该混合模式相对来说比较简单,在该混合模式下,
如果两个图层的叠放顺序不一样,其结果也是不一样的(当然50%透明除外)。
该公式也应用于层蒙板,在这种情况下,d代表了蒙板图层中给定位置图层的亮度(d=颜色值/255),
下同,不再叙述。

2. Darken 变暗

C_{RGBi} = Min(A_{RGBi}, B_{RGBi})

该模式通过比较上下层像素后取相对较暗的像素作为输出,
注意,每个不同的颜色通道的像素都是独立的进行比较,色彩值相对较小的作为输出结果。
下层表示叠放次序位于下面的那个图层,
上层表示叠放次序位于上面的那个图层,下同,不再叙述。

3. Lighten 变亮

MATHJAX-SSR-2

该模式和前面的模式是相似,不同的是取色彩值较大的(也就是较亮的)作为输出结果。

4. Multiply 正片叠底

C_{RGBi} = \frac {A_{RGBi} \times B_{RGBi}}{255}
该效果将两层像素的标准色彩值(基于0..1之间)相乘后输出
其效果可以形容成:两个幻灯片叠加在一起然后放映,
透射光需要分别通过这两个幻灯片,从而被削弱了两次。

5. Screen 滤色

C_{RGBi} = 255 - \frac {\bar A_{RGBi}\times \bar B_{RGBi}}{255}

该模式和上一个模式刚好相反,
上下层像素的标准色彩值反相后相乘后输出,
输出结果比两者的像素值都将要亮
(就好像两台投影机分别对其中一个图层进行投影后,然后投射到同一个屏幕上)。
从右边公式中我们可以看出,如果两个图层反相后,采用Multiply模式混合,
则将和对这两个图层采用 Screen模式混合后反相的结果完全一样。

6. Color Burn 颜色加深

C_{RGBi} = A_{RGBi} - \frac {\bar A_{RGBi}\times \bar B_{RGBi}} {B_{RGBi}}

该模式和上一个模式刚好相反。
如果上层越暗,则下层获取的光越少,
如果上层为全黑色,则下层越黑,
如果上层为全白色,则根本不会影响下层。
结果最亮的地方不会高于下层的像素值。

7. Color Dodge 颜色减淡

C_{RGBi} = A_{RGBi} + \frac {A_{RGBi} \times B_{RGBi}}{\bar B_{RGBi}}

该模式下,上层的亮度决定了下层的暴露程度。
如果上层越亮,下层获取的光越多,也就是越亮。
如果上层是纯黑色,也就是没有亮度,则根本不会影响下层。
如果上层是纯白色,则下层除了像素为255的地方暴露外,
其他地方全部为白色(也就是255,不暴露)。
结果最黑的地方不会低于下层的像素值。

8. Linear Burn 线形加深

C_{RGBi} = A_{RGBi} + B_{RGBi} - 255

如果上下层的像素值之和小于255,输出结果将会是纯黑色。
如果将上层反相,结果将是纯粹的数学减。

9. Linear Dodge 线形减淡

C_{RGBi} = A_{RGBi} + B_{RGBi}

将上下层的色彩值相加。结果将更亮。

10. Overlay叠加

C_{RGBi} = \left\{\begin{matrix} \frac{A_{RBGi} B_{RGBi} }{128} &A_V\leq 128\\255- \frac{\bar A_{RGB} \times \bar B_{RGB}} {128}&A_V>128\end{matrix}\right.

依据下层色彩值的不同,该模式可能是Multiply (正片叠底),也可能是Screen (滤色)模式。
上层决定了下层中间色调偏移的强度。
如果上层为50%灰,则结果将完全为下层像素的值。
如果上层比50%灰暗,则下层的中间色调的将向暗地方偏移,
如果上层比50%灰亮,则下层的中间色调的将向亮地方偏移。
对于上层比50%灰暗,下层中间色调以下的色带变窄(原来为02×0.4×0.5,现在为02×0.3×0.5),
中间色调以上的色带变宽(原来为2×0.4×0.51,现在为2×0.3×0.51)。
反之亦然。

11. Hard Light 强光

C_{RGBi} = \left\{\begin{matrix} \frac {A_{RBGi} \dot\times B_{RGBi}}{128} &B_V\leq 128\\ 255 - \frac {\bar A_{RBGi} \dot\times \bar B_{RGBi}}{128} &B_V>128\end{matrix}\right.

该模式完全相对应于Overlay (叠加)模式下,两个图层进行次序交换的情况。
如过上层的颜色高于50%灰,则下层越亮,反之越暗

12. Soft Light柔光

C_{RGBi} = \left\{\begin{matrix} \frac {A_{RBGi} \dot\times B_{RGBi}}{128} +(\frac{A_{RGBi}}{255})^2\times(255-2B_{RGBi}) &B_V\leq 128\\ \frac{A_{RGBi}\times \bar B_{RGBi}}{128} +\sqrt{\frac {A_{RGBi}}{255}} \times(2B_{RGBi}-255) &B_V>128\end{matrix}\right.

该模式类似上层以Gamma值范围为2.0到0.5的方式来调制下层的色彩值。
结果将是一个非常柔和的组合。

13. Vivid Light 亮光

C_{RGBi} = \left\{\begin{matrix} A_{RGBi} - \frac{\bar A_{RGBi}\times (255-2B_{RGBi})}{2B_{RGBi}} &B_V\leq 128 \\ A_{RGBi}+\frac{A_{RGBi}\times (255-2B_{RGBi})}{2\bar B_{RGBi}} &B_V>128\end{matrix}\right.

该模式非常强烈的增加了对比度,特别是在高亮和阴暗处。
可以认为是阴暗处应用Color Burn和高亮处应用Color Dodge。

14. Linear Light 线形光

C_{RGBi}=A_{RGBi}+2B_{RGBi}-255

其类似于Linear Burn,只不过是加深了上层的影响力。

15. Pin Light 点光

C_{RGBi} = \left\{\begin{matrix} Min(A_{RGBi}, 2B_{RGBi}) &B_V\leq 128 \\ Min(A_{RGBi}, 2B_{RGBi}-255) &B_V>128\end{matrix}\right.

该模式结果就是导致中间调几乎是不变的下层,
但是两边是Darken(变暗)和Lighten(变亮)模式的组合。

16. Hard Mix 实色混合

C_{RGBi} = 255 \times step(A_{RGBi}+B_{RGBi},255)

该模式导致了最终结果仅包含6种基本颜色,每个通道要么就是0,要么就是255。

17. Difference 差值

C_{RGBi} = |A_{RGBi}-B_{RGBi}|

上下层色调的绝对值。
该模式主要用于比较两个不同版本的图片。
如果两者完全一样,则结果为全黑。

18. Exclusion 排除

C_{RGBi} = A_{RGBi} + B_{RGBi} - \frac{A_{RGBi} \times B_{RGBi}}{12}

亮的图片区域将导致另一层的反相,很暗的区域则将导致另一层完全没有改变。

19. Hue 色相

\left(\begin{matrix}C_H\\C_S\\C_V\end{matrix}\right) = \left(\begin{matrix}B_H\\A_S\\A_V\end{matrix}\right)

输出图像的色调为上层,饱和度和亮度保持为下层。
对于灰色上层,结果为去色的下层。

20. Saturation 饱和度

\left(\begin{matrix}C_H\\C_S\\C_V\end{matrix}\right) = \left(\begin{matrix}A_H\\B_S\\A_V\end{matrix}\right)

输出图像的饱和度为上层,色调和亮度保持为下层。

21. Color 颜色

\left(\begin{matrix}C_H\\C_S\\C_V\end{matrix}\right) = \left(\begin{matrix}B_H\\B_S\\A_V\end{matrix}\right)
输出图像的亮度为下层,色调和饱和度保持为上层。

22. Luminosity 亮度

\left(\begin{matrix}C_H\\C_S\\C_V\end{matrix}\right) = \left(\begin{matrix}A_H\\A_S\\B_V\end{matrix}\right)

输出图像的亮度为上层,色调和饱和度保持为下层。

23. Dissolve 溶解

该模式根本不是真正的溶解,因此并不是适合Dissolve(溶解)这个称谓,其表现仅仅和Normal(正常)类似。
其从上层中随机抽取一些像素作为透明,使其可以看到下层,
随着上层透明度越低,可看到的下层区域越多。
如果上层完全不透明,则效果和Normal(正常)不会有任何不同。