58 lines
2 KiB
Text
58 lines
2 KiB
Text
shader_type canvas_item;
|
|
render_mode blend_mix;
|
|
|
|
uniform float brightness : hint_range(-1, 1) = 0;
|
|
uniform float contrast : hint_range(0, 3) = 1.0;
|
|
uniform float saturation : hint_range(0, 3) = 1.0;
|
|
|
|
uniform float redVal : hint_range(0, 1) = 1.0;
|
|
uniform float greenVal : hint_range(0, 1) = 1.0;
|
|
uniform float blueVal : hint_range(0, 1) = 1.0;
|
|
|
|
uniform vec4 tint_color : source_color = vec4(1.0, 1.0, 1.0, 1.0);
|
|
uniform float tint_effect_factor : hint_range(0, 1) = 0.0;
|
|
//---------------------------------------------
|
|
//CONTRAST
|
|
//---------------------------------------------
|
|
mat4 contrastMatrix( float _contrast ){
|
|
float t = ( 1.0 - _contrast ) / 2.0;
|
|
return mat4(
|
|
vec4(_contrast, 0, 0, 0),
|
|
vec4(0, _contrast, 0, 0),
|
|
vec4(0, 0, _contrast, 0),
|
|
vec4(t, t, t, 1));
|
|
}
|
|
//---------------------------------------------
|
|
//BRIGHTNESS
|
|
//---------------------------------------------
|
|
mat4 brightnessMatrix( float _brightness ){
|
|
return mat4( vec4(1, 0, 0, 0),
|
|
vec4(0, 1, 0, 0),
|
|
vec4(0, 0, 1, 0),
|
|
vec4(_brightness, _brightness, _brightness, 1));
|
|
}
|
|
//---------------------------------------------
|
|
//SATURATION
|
|
//---------------------------------------------
|
|
mat4 saturationMatrix( float _saturation ){
|
|
vec3 luminance = vec3( 0.3086, 0.6094, 0.0820 );
|
|
float oneMinusSat = 1.0 - _saturation;
|
|
|
|
vec3 red = vec3( luminance.x * oneMinusSat );
|
|
red+= vec3(_saturation, 0, 0)*redVal;
|
|
vec3 green = vec3( luminance.y * oneMinusSat );
|
|
green += vec3( 0,_saturation, 0 )*greenVal;
|
|
vec3 blue = vec3( luminance.z * oneMinusSat );
|
|
blue += vec3( 0, 0,_saturation )*blueVal;
|
|
|
|
return mat4(vec4(red, 0),vec4(green,0),vec4(blue,0),vec4(0, 0, 0, 1));
|
|
}
|
|
|
|
//---------------------------------------------
|
|
//fragment
|
|
//---------------------------------------------
|
|
void fragment() {
|
|
vec4 c = texture(TEXTURE, UV);
|
|
vec4 c2 = c * tint_color;
|
|
COLOR = brightnessMatrix( brightness ) * contrastMatrix( contrast ) *saturationMatrix( saturation ) * mix(c, c2, tint_effect_factor);
|
|
}
|