Here's how I understand it:
a, b, c are values that effect the colour of the texture.
the formula f(x) = a * g(x)² + b * g(x) + c is calculated for each r,g,b to calculate the r,g,b values that are used in the render.
I will explain the process for the r-component. The two other components are treated the same:
For clarity I define r_texture to be the r-value of the original texture (g(x) in the original formula).
r_final is the final value of that texture pixel that is used in the render (f(x) in the original formula).
Written with these variables the f(x)-formula looks like this:
r_final = a * r_texture * r_texture + b * r_texture + c
READ FROM HERE IF YOU JUST WANT THE RESULTS:
c is just a constant offset.
It makes all pixels of the texture brighter by the same amount. So the brightness of an image is increased. Notice that clipping might occur if you use a too large value for c.
b makes all pixels brighter/darker linear to their colour value.
So for values of b<1 the contrast of an image is decreased. For b>1 the contrast is increased. Notice that you will get clipping of you choose b-values of greater than 1!
a makes all pixels brighter to the square of their value. It mainly does the same as the b value just with an even stronger effect. The a-parameter makes the darker values much more dark than the b-parameter, whereas the brighter pixels are affected almost the same by the a- and b-paramter. However, you will not get any clipping, regardless of the values of a you choose.
How about an example:
So if you have a pixel of value (r_texture,g_texture,b_texture) = (0.1, 0.4, 0.9)
The impact of the a,b,c values will be following:
a=0.1, b=0, c=0;
(r_final, g_final, b_final) = (0.001, 0.016, 0.081)
a=0, b=0.1, c=0;
(r_final, g_final, b_final) = (0.01, 0.04, 0.09)
a=0, b=0, c=0.1;
(r_final, g_final, b_final) = (0.0, 0.3, 0.8 )
Hope this helps. Actually thinking it through helped even my understanding a,b,c more.
