0 true #version 150 //OVE shader_name: despill //OVE shader_description: made by Thomas Wilshaw //OVE main_input_name: Input uniform sampler2D tex_in; //OVE name: color_in //OVE type: SELECTION //OVE values: "GREEN", "BLUE" //OVE default: 0 //OVE description: uniform int color_in; //OVE name: color_in //OVE type: SELECTION //OVE values: "AVERAGE", "DOUBLE RED AV." //OVE values: "DOUBLE AV.", "BLUE LIMIT" //OVE default: 0 //OVE description: uniform int method_in; //OVE name: preserve_luminance_input //OVE type: BOOLEAN //OVE flag: NOT_CONNECTABLE, NOT_KEYFRAMABLE //OVE default: false //OVE description: uniform bool preserve_luminance_input; //OVE name: luma_coeff1 //OVE type: FLOAT //OVE flag: NOT_CONNECTABLE //OVE default: 1.0 //OVE description: uniform float luma_coeff1; //OVE name: luma_coeff2 //OVE type: FLOAT //OVE flag: NOT_CONNECTABLE //OVE default: 1.0 //OVE description: uniform float luma_coeff2; //OVE name: luma_coeff3 //OVE type: FLOAT //OVE flag: NOT_CONNECTABLE //OVE default: 1.0 //OVE description: uniform float luma_coeff3; //OVE end // pixel coordinates in range [0..1]x[0..1] in vec2 ove_texcoord; // output color out vec4 frag_color; void main(void) { vec4 tex_col = texture(tex_in, ove_texcoord); float color_average = 0.0; if(color_in == 0) { // Green screen if(method_in == 0) { // Average color_average = dot(tex_col.rb, vec2(0.5)); // (tex_col.r + tex_col.b) / 2.0 tex_col.g = tex_col.g > color_average ? color_average: tex_col.g; } else if (method_in == 1) { // Double red average color_average = dot(tex_col.rb, vec2(2.0, 1.0) / 3.0); // (2.0 * tex_col.r + tex_col.b) / 3.0 tex_col.g = tex_col.g > color_average ? color_average : tex_col.g; } else if (method_in == 2) { // Double average color_average = dot(tex_col.br, vec2(2.0, 1.0) / 3.0); // (2.0 * tex_col.b + tex_col.r) / 3.0 tex_col.g = tex_col.g > color_average ? color_average : tex_col.g; } else if (method_in == 3) { // Blue Limit tex_col.g = tex_col.g > tex_col.b ? tex_col.b : tex_col.g; } } else { // Blue screen if(method_in == 0) { // Average color_average = dot(tex_col.rg, vec2(0.5)); // (tex_col.r + tex_col.g) / 2.0 tex_col.b = tex_col.b > color_average ? color_average : tex_col.b; } else if (method_in == 1) { // Double red average color_average = dot(tex_col.rg, vec2(2.0, 1.0) / 3.0); // (2.0 * tex_col.r + tex_col.g) / 3.0 tex_col.b = tex_col.b > color_average ? color_average : tex_col.b; } else if (method_in == 2) { // Double average color_average = dot(tex_col.gr, vec2(2.0, 1.0) / 3.0); // (2.0 * tex_col.g+ tex_col.r) / 3.0 tex_col.b = tex_col.b > color_average ? color_average : tex_col.b; } else if (method_in == 3) { // Blue Limit tex_col.b = tex_col.b > tex_col.g ? tex_col.g : tex_col.b; } } if (preserve_luminance_input) { vec4 original_col = texture(tex_in, ove_texcoord); vec4 diff = original_col - tex_col; float luma = dot(abs(diff.rgb), vec3(luma_coeff1, luma_coeff2, luma_coeff3)); tex_col.rgb += vec3(luma); } frag_color = tex_col; } None 0 0 0 0 false 0 1 0 1 0 1 139955067831680 -1 -1 -1 -1 {df7415c1-39ac-4353-a00e-bc03a309c8da} {0509e6a5-5e1a-4cdc-bda1-958f81787433} 0 -1.90818 -0.106667