Skip to content

Instantly share code, notes, and snippets.

@jshaw
Forked from Volcanoscar/greyscale.frag
Created June 22, 2022 16:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jshaw/91055bdf8b10d5abf9a8f5167377c6ec to your computer and use it in GitHub Desktop.
Save jshaw/91055bdf8b10d5abf9a8f5167377c6ec to your computer and use it in GitHub Desktop.
A simple glsl color -> greyscale shader, using luminosity method
// fragment shader
//
// RGBA color to RGBA greyscale
//
// smooth transition based on u_colorFactor: 0.0 = original, 1.0 = greyscale
//
// http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/
// "The luminosity method is a more sophisticated version of the average method.
// It also averages the values, but it forms a weighted average to account for human perception.
// We’re more sensitive to green than other colors, so green is weighted most heavily. The formula
// for luminosity is 0.21 R + 0.72 G + 0.07 B."
varying vec2 v_texCoord;
uniform sampler2D CC_Texture0;
uniform float u_colorFactor;
void main()
{
vec4 sample = texture2D(CC_Texture0, v_texCoord);
float grey = 0.21 * sample.r + 0.71 * sample.g + 0.07 * sample.b;
gl_FragColor = vec4(sample.r * u_colorFactor + grey * (1.0 - u_colorFactor), sample.g * u_colorFactor + grey * (1.0 - u_colorFactor), sample.b * u_colorFactor + grey * (1.0 - u_colorFactor), 1.0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment