Yes, when it's done. I think I'm going to push the LumaSharpen changes back a release, so I can get this release out sooner. BTW the problem with sharpening and AA, is not so much a problem with either the SMAA or LumaSharpen shader but more a problem with having to run different shaders that sample the original image in the same pass, which I'm forced to do because InjectSMAA was hardcoded that way. It was after all only intended to run SMAA and nothing else. When LumaSharpen runs it needs to sample image and apply sharpening, but because the pixel have not been out after SMAA ran, it can only see the image before SMAA and so it sharpens based on that. My workaround is the find the difference between the original and the sharpened pixel and then apply that to the output of SMAA, which makes it possible to use both shaders, but unfortunately some of the aliasing returns. But it was this or nothing. Hopefully a better injector will allow me to do as many extra passes as I want so this won't be a problem. Improvement to Curves are done, but while I was doing them, I got to doing optimizations too and now some of the formulas run faster and I got new ideas, started researching, did some more coding and implemented splines! // -- Curve 10 -- #if Curves_formula == 10 //Cubic catmull (say that 10 times fast) float a = 1.00; //control point 1 float b = 0.00; //start point float c = 1.00; //endpoint float d = 0.20; //control point 2 x = 0.5 * ((-a + 3*b -3*c + d)*x*x*x + (2*a -5*b + 4*c - d)*x*x + (-a+c)*x + 2*b); //A customizable cubic catmull-rom spline #endif // -- Curve 11 -- #if Curves_formula == 11 //Cubic Bezier spline float a = 0.00; //start point float b = 0.00; //control point 1 float c = 1.00; //control point 2 float d = 1.00; //endpoint float r = (1-x); float r2 = r*r; float r3 = r2 * r; float x2 = x*x; float x3 = x2*x; //x = dot(float4(a,b,c,d),float4(r3,3*r2*x,3*r*x2,x3)); //x = a * r*r*r + r * (3 * b * r * x + 3 * c * x*x) + d * x*x*x; //x = a*(1-x)*(1-x)*(1-x) +(1-x) * (3*b * (1-x) * x + 3 * c * x*x) + d * x*x*x; x = a*(1-x)*(1-x)*(1-x) + 3*b*(1-x)*(1-x)*x + 3*c*(1-x)*x*x + d*x*x*x; #endif Note the above examples are working but not yet optimized fully. They also need to take vectors as input for the control points instead of just scalars and they need to be able to control RGB and Luma separately and I'm not that far yet. It's a big step towards being able to do color grading using Gimp curves with splines Gimp uses Bezier splines, and I'm getting there with my Bezier spline code, but I also implemented Catmull-rom splines while I was at it. Hmm seeing that page just now makes me think I can code a shader for the black and white part .. in less than 30 minutes. Be right back .. Oh btw .. to sum up. It's quite done yet, but I'm back on the case .. ideas are sparking , fingers are racing over the keyboard and the math is fun. I'm in a good mood. EDIT: There .. new monochrome shader added. It allows you to set custom conversion values to convert from RGB to greyscale. I put it before LiftGammaGain so you can combine the two to do mono- duo and tri-toning. Should make for some interesting artistic screenshots.