Update coefficients to use REC.709

While still not colour managed, and grossly assuming REC.709
display referred buffers, the effect as it currently stands can be
improved to use the proper coefficients for REC.709, as opposed
to legacy REC.601. Ideally there'd be a flag somewhere to flip between
the two coefficient sets.
This commit is contained in:
Troy James Sobotka
2019-05-01 21:31:54 -07:00
committed by GitHub
parent c5f63ec2c5
commit f1ff4a9047
+18 -14
View File
@@ -12,22 +12,26 @@ uniform float tola;
uniform float tolb;
uniform bool opt;
uniform int mode;
float rgb2y (vec3 c) {
/*a utility function to convert colors in RGB into YCbCr*/
return (0.299*c.r + 0.587*c.g + 0.114*c.b);
}
// This isnt colour managed and is a huge mess, but in the
// short term, using correct weights will give significantly
// more ideal results. The correct weights for REC.709 are
// 0.2126 R, 0.7152 G, and 0.722 B. Easy change.
// The coefficients for YCbCr are calculated off of the
// REC.709 values.
return (0.2126*c.r + 0.7152*c.g + 0.0722*c.b);
}
float rgb2cb (vec3 c) {
/*a utility function to convert colors in RGB into YCbCr*/
return (0.5 + -0.168736*c.r - 0.331264*c.g + 0.5*c.b);
}
return (0.5 + -0.1145721061*c.r - 0.3854278939*c.g + 0.5*c.b);
}
float rgb2cr (vec3 c) {
/*a utility function to convert colors in RGB into YCbCr*/
return (0.5 + 0.5*c.r - 0.418688*c.g - 0.081312*c.b);
}
return (0.5 + 0.5*c.r - 0.4541529083*c.g - 0.0458470917*c.b);
}
float colorclose(float Cb_p,float Cr_p,float Cb_key,float Cr_key,float tola,float tolb) {
/*decides if a color is close to the specified hue*/
float temp = sqrt(((Cb_key-Cb_p)*(Cb_key-Cb_p))+((Cr_key-Cr_p)*(Cr_key-Cr_p)));
@@ -35,7 +39,7 @@ float colorclose(float Cb_p,float Cr_p,float Cb_key,float Cr_key,float tola,floa
if (temp < tolb) {return ((temp-tola)/(tolb-tola));}
return (1.0);
}
void main(void) {
float cb_key = rgb2cb(key_color);
float cr_key = rgb2cr(key_color);
@@ -62,4 +66,4 @@ void main(void) {
}
gl_FragColor = texture_color;
}
}