150 lines
5.3 KiB
GLSL
150 lines
5.3 KiB
GLSL
#version 330 core
|
|
|
|
out vec4 FragColor;
|
|
|
|
in vec3 ourColor;
|
|
in vec2 TexCoord;
|
|
|
|
uniform float time;
|
|
uniform bool fusion;
|
|
uniform float alpha;
|
|
uniform sampler2D bgMap;
|
|
uniform sampler2D maskMap;
|
|
uniform sampler2D sourceMap;
|
|
uniform sampler2D textMap;
|
|
uniform sampler2D movieTextMap;
|
|
uniform sampler2D bgMapMask;
|
|
uniform sampler2D sourceAlphaMap;
|
|
|
|
vec3 rgb2hsl(vec3 color) {
|
|
float h, s, l;
|
|
float r = color.r;
|
|
float g = color.g;
|
|
float b = color.b;
|
|
float Cmax = max(max(r, g), b);
|
|
float Cmin = min(min(r, g), b);
|
|
|
|
l = (Cmax + Cmin) / 2.0;
|
|
if (Cmax == Cmin) {
|
|
h = 0.0;
|
|
s = 0.0;
|
|
} else {
|
|
float delta = Cmax - Cmin;
|
|
s = (l > 0.5) ? delta / (2.0 - l * 2.0) : delta / (l * 2.0);
|
|
|
|
if (r > g && r > b) {
|
|
h = (g - b) / delta + ((g < b) ? 6.0 : 0.0);
|
|
} else if (g > b) {
|
|
h = (b - r) / delta + 2.0;
|
|
} else {
|
|
h = (r - g) / delta + 4.0;
|
|
}
|
|
h = h / 6.0;
|
|
}
|
|
return vec3(h, s, l);
|
|
}
|
|
|
|
float hue2rgb(float M1, float M2, float hue) {
|
|
float c;
|
|
if (hue < 0.0) {
|
|
hue += 1.0;
|
|
} else if (hue > 1.0) {
|
|
hue -= 1.0;
|
|
}
|
|
|
|
if ((6.0 * hue) < 1.0) {
|
|
c = (M1 + (M2 - M1) * hue * 6.0);
|
|
} else if ((2.0 * hue) < 1.0) {
|
|
c = M2;
|
|
} else if ((3.0 * hue) < 2.0) {
|
|
c = (M1 + (M2 - M1) * ((2.0/3.0) - hue) * 6.0);
|
|
} else {
|
|
c = M1;
|
|
}
|
|
return c;
|
|
}
|
|
|
|
vec3 hsl2rgb(vec3 hsl) {
|
|
float M1, M2;
|
|
float hue = hsl.x;
|
|
float saturation = hsl.y;
|
|
float lightness = hsl.z;
|
|
vec3 color;
|
|
if (saturation == 0.0) {
|
|
color.r = lightness;
|
|
color.g = lightness;
|
|
color.b = lightness;
|
|
} else {
|
|
if (lightness < 0.5) {
|
|
M2 = lightness * (1.0 + saturation);
|
|
} else {
|
|
M2 = lightness + saturation - lightness * saturation;
|
|
}
|
|
M1 = (2.0 * lightness - M2);
|
|
color.r = hue2rgb(M1, M2, hue + (1.0/3.0));
|
|
color.g = hue2rgb(M1, M2, hue);
|
|
color.b = hue2rgb(M1, M2, hue - (1.0/3.0));
|
|
}
|
|
return color;
|
|
}
|
|
|
|
void main() {
|
|
vec4 bgColor = texture2D( bgMap, TexCoord );
|
|
vec4 bgMaskColor = texture2D( bgMapMask, TexCoord );
|
|
vec4 movieColor = texture2D( movieTextMap, TexCoord );
|
|
// vec3 hsl = rgb2hsl(bgColor);
|
|
// hsl.y *= 0.4;
|
|
// bgColor = hsl2rgb(hsl);
|
|
vec4 frgColor = vec4(1.0);
|
|
if (fusion) {
|
|
vec4 sourceColor = texture2D(sourceMap, TexCoord);
|
|
vec4 sourceColorAlpha = texture2D(sourceAlphaMap, TexCoord);
|
|
vec4 maskColor = texture2D(maskMap, TexCoord);
|
|
vec4 textColor = texture2D(textMap, TexCoord);
|
|
// sourceColor = sourceColor * (1 - maskColor);
|
|
vec4 sourceBgMask = mix(bgMaskColor, sourceColor, sourceColorAlpha.a );
|
|
float a = clamp(bgMaskColor.a * 10, 0.0, 1.0);
|
|
sourceBgMask = sourceBgMask * maskColor * a;
|
|
// vec4 maskLevel = level1 * maskColor;
|
|
// // bgMaskColor.rgb = bgMaskColor.rgb * maskColor.rgb;
|
|
// vec4 bgFrame = bgColor * (1 - clamp(ceil(bgMaskColor.a * 1.5), 0, 1));
|
|
// float x = abs((TexCoord.x - 0.5) * 2);
|
|
// x = (1 - x * 2.3 + 0.5);
|
|
// int s = int(sourceColor1.a) ^ int(sourceColor2.a);// + mix(maskLevel, bgMaskColor, bgMaskColor.a * alpha);
|
|
// float a = s * x;
|
|
// vec4 sourceAplha = sourceColor * a + sourceColor * (1 -s) ;
|
|
// vec4 sourceMix = mix(bgColor, bgMaskColor, bgMaskColor.a * alpha);
|
|
vec4 destAlpha = (1 - sourceColor.a) * maskColor;
|
|
frgColor = mix(bgColor, sourceBgMask, maskColor * alpha);
|
|
frgColor = mix(frgColor, sourceBgMask, bgMaskColor * maskColor * alpha) * (1 - textColor * alpha);
|
|
|
|
// float a = clamp(bgMaskColor.a * 10, 0.0, 1.0);
|
|
// float x = abs((TexCoord.x - 0.5) * 2);
|
|
// float ssa = sa * (1 - clamp(x * 2.5, 0, 1));
|
|
// sourceColor = sourceColor * a;// mix(bgMaskColor.rgb, sourceColor, a);
|
|
// maskColor = maskColor * a;
|
|
// vec3 sourceMix = mix(bgMaskColor.rgb, sourceColor, ssa);//, sourceColor * (1 - x ) * maskColor ; // mix(sourceColor, maskColor, maskColor);
|
|
// sourceMix = sourceMix * (1 - clamp(x * 0.6, 0, 1)) ;
|
|
|
|
// // bgColor = mix(bgColor, bgMaskColor.rgb, bgMaskColor.a * 0.9 * alpha);
|
|
// // sourceMix = mix(bgColor, sourceMix, (1.5 - x) * maskColor * alpha + 0.3);//bgMaskColor.a * alpha);
|
|
// float bsa = sa * (1 - x);
|
|
// sourceMix = mix(bgColor, sourceMix, maskColor * alpha);//);
|
|
|
|
// frgColor = vec4(sourceMix, 1.0) * ((1 - textColor * alpha) );//mix(textColor.rgb, , textColor.a);// (sourceMix * maskColor ) * alpha;
|
|
// clamp(mix(bgColor, sourceMix, sourceColor.a * alpha) + textColor * alpha + networkTextColor, 0, 1);
|
|
// if (TexCoord.x <= 0.2 || TexCoord.s >= 0.8) {
|
|
// frgColor = bgColor;
|
|
// } else {
|
|
// frgColor = clamp(mix(bgColor, sourceMix, maskColor * alpha) + textColor * alpha + networkTextColor, 0, 1);
|
|
// // clamp(mix(bgMix, sourceMix, maskColor * alpha) + textColor * alpha + networkTextColor, 0, 1);
|
|
// //mix (color, mix(sourceColor, maskColor, invBaseColor), 1);
|
|
// }
|
|
} else {
|
|
vec4 movieColor = texture2D(movieTextMap, TexCoord);
|
|
frgColor = mix(bgColor, movieColor, movieColor.a);
|
|
}
|
|
|
|
FragColor = frgColor;
|
|
}
|