ISF - Color - Trio Tone
/*{
"CREDIT": "VIDVOX",
"ISFVSN": "2",
"CATEGORIES": [
"Color Effect"
],
"INPUTS": [
{
"NAME": "inputImage",
"TYPE": "image"
},
{
"NAME": "darkColor",
"TYPE": "color",
"DEFAULT": [
0,
0.164,
1,
1
]
},
{
"NAME": "midColor",
"TYPE": "color",
"DEFAULT": [
0,
1,
0,
1
]
},
{
"NAME": "brightColor",
"TYPE": "color",
"DEFAULT": [
1,
0,
0,
1
]
}
]
}*/
// partly adapted from http://coding-experiments.blogspot.com/2010/10/thermal-vision-pixel-shader.html
void main () {
vec4 pixcol = IMG_THIS_PIXEL(inputImage);
/*
// this method doesn't work nicely on certain gpu / os releases due to arrays?
vec4 colors[4];
colors[0] = vec4(0.0,0.0,0.0,1.0);
colors[1] = darkColor;
colors[2] = midColor;
colors[3] = brightColor;
const vec4 lumacoeff = vec4(0.2126, 0.7152, 0.0722, 0.0);
float lum = dot(pixcol, lumacoeff);
//float lum = (pixcol.r+pixcol.g+pixcol.b)/3.;
int ix = 0;
if (lum > 0.66) {
ix = 2;
}
else if (lum > 0.33) {
ix = 1;
}
vec4 thermal = mix(colors[ix],colors[ix+1],(lum-float(ix)*0.33)/0.33);
*/
vec4 color1 = vec4(0.0,0.0,0.0,1.0);
vec4 color2 = darkColor;
int ix = 0;
const vec4 lumacoeff = vec4(0.2126, 0.7152, 0.0722, 0.0);
float lum = dot(pixcol, lumacoeff);
if (lum > 0.66) {
color1 = midColor;
color2 = brightColor;
ix = 2;
}
else if (lum > 0.33) {
color1 = darkColor;
color2 = midColor;
ix = 1;
}
vec4 thermal = mix(color1,color2,(lum-float(ix)*0.33)/0.33);
gl_FragColor = vec4(thermal.rgb, pixcol.a);
}