-
-
Save jshaw/91055bdf8b10d5abf9a8f5167377c6ec to your computer and use it in GitHub Desktop.
A simple glsl color -> greyscale shader, using luminosity method
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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