,其中光晕图层的混合模式使用的是滤色(screen)。
那么,什么事滤色呢?有这么一种说法,滤色的作用类似于投影。将两台投影仪投影到同一块银幕上,我们看到的是两束光的叠加。
该光束比其中任何一束光都要亮!!
先来看一下滤色的公式:
resultColor=1-(1-baseColor)(1-blendColor)
看到此处,我是有些疑惑的,如果是两束光的叠加,那么不应该是相加么?
resultColor=baseColor+blendColor
为了解决这个疑惑,我们换个角度来看 滤色的公式:
resultColor=1-(1-baseColor)(1-blendColor) ......(1) =baseColor+blendColor*(1-baseColor) ......(2) =blendColor+baseColor*(1-blendColor) ......(3)
由以上公式我们可以了解到
- base color 和 blend color 是对称的
- 由(2)可以看出result color 可以分为两部分:一部分是base color;另一部分则是用blend color来调制 1-baseColor (这样既保证了两台投影仪叠加的光亮于其中任意一台的光,也保证了result color不会大于1!)如果允许溢出,,在RGB三通道的时候,只有其中一个通道溢出的话,颜色失真会比较严重
- result color 的取值范围为 [baseColor 1], ,也就是不会溢出!这一点儿,直接相加就不行了!
- blend color为0(黑色)时,result color = base color
- blend color为1(白色)时,result color = 1
对滤色有了以上的了解,我们来重新回顾一下 添加镜头光晕的过程:
- 1、新建一个黑色的图层:新建图层,编辑->填充(黑色)
- 2、添加光晕: 滤镜->渲染->镜头光晕
- 3、调整该光晕图层的 混合模式为 滤色
因为图层最初为黑色的,,光晕先以 滤色(估计PS内时这么实现的)和黑色的图层 以 滤色模式混合,得到光晕图层。(根据公式(2),和黑色以滤色混合,得到的颜色为原来的颜色)
该镜头光晕图层在和背景图层以 滤色 混合,,和直接用 光晕的图和背景图层混合,效果完全一样!!
这样还有一个附加的好处->可以调整镜头光晕的透明度!!
最后,来看一下 blend color 和 base color 相同时,滤色模式的响应曲线,
结果相当于调整曲线,使得结果色亮于原来的颜色(中间色调被提亮最多!)
代码如下:
%% 基色和混合色相同时 滤色模式(screen) 响应曲线 modeFunc=@(baseColor,blendColor) 1-(1-baseColor).*(1-blendColor); modeName='滤色模式(screen)'; x=linspace(0,1,256); y=modeFunc(x,x); figure1 = figure; axes1 = axes('Parent',figure1,'YTick',0:.1:1,'XTick',0:.1:1,... 'PlotBoxAspectRatio',[1 1 1],... 'DataAspectRatio',[1 1 1]); % xlim(axes1,[0 1]); % ylim(axes1,[0 1]); grid on box(axes1,'on'); hold(axes1,'all'); plot(x,y,'Parent',axes1,'LineWidth',3,'Color',[1 0 0], 'DisplayName',modeName); plot(x,x,'Parent',axes1,'LineWidth',2,'LineStyle','--', 'DisplayName','正常模式'); xlabel('基色及混合色灰度值','FontSize',16); ylabel('结果色','FontSize',16); title(['基色和混合色相同时 ' modeName ' 响应曲线'],'FontSize',16); legend1 = legend(axes1,'show'); set(legend1,'Location','SouthEast'); clear all