The GLSL pseudocode I've come up with:
Code: Select all
uniform bool nightvision_enabled;
uniform vec4 nightvision_color;
in vec4 color;
in float lightness;
out vec4 result;
void main(void) {
result = lightness * color;
if (nightvision_enabled) {
// Compute luminosity
float y = dot(color, vec4( 0.2126, 0.7152, 0.0722, 0 ));
// Enhance dark areas
result += (1-lightness) * y * nightvision_color;
}
}