kernel AdjustableThreshold { parameter float blackThreshold < minValue:float(0); maxValue:float(1); defaultValue:float(0.4); >; parameter float whiteThreshold < minValue:float(0); maxValue:float(1); defaultValue:float(0.5); >; void evaluatePixel(in image4 src, out pixel4 dst) { float4 inputColor = sampleNearest(src, outCoord()); float brightness = (inputColor.r + inputColor.g + inputColor.b) / 3.0; dst = inputColor; float grayscale = (brightness - blackThreshold) / (whiteThreshold - blackThreshold); float ifAboveBlack = brightness > whiteThreshold ? 1.0 : grayscale; dst.r = dst.g = dst.b = brightness < blackThreshold ? 0.0 : ifAboveBlack; } }