 vec4 Pow(vec4 x, vec4 y) { POW }
 
 ///////////////////////////////////////////////////////////////////////////////
+// Constrast adjustment.
+///////////////////////////////////////////////////////////////////////////////
+
+vec3 AdjustContrast(vec3 Color, vec2 ScaleBias)
+{
+    return (Color - ScaleBias.y) * ScaleBias.x + ScaleBias.y;
+}
+
+///////////////////////////////////////////////////////////////////////////////
 // The brushed-metal normal computation.
 ///////////////////////////////////////////////////////////////////////////////
 

uniform sampler2D DiffuseMap;
uniform sampler2D NormalMap;
uniform sampler3D NoiseMap;

// Data from vertex shader
varying vec3 Position;

}

///////////////////////////////////////////////////////////////////////////////
// The Fresnel reflection term.
//   CookTorrance passes dot(Normal, View) to the Cosine parameter, whereas
//   SchlickFresnel uses dot(View, Half).
///////////////////////////////////////////////////////////////////////////////

float Fresnel(float Cosine, float Reflectance)
{
    return Reflectance + (1.0 - Reflectance) * pow(1.0 - Cosine, 5.0);
}

///////////////////////////////////////////////////////////////////////////////
// The Cook-Torrance specular lighting model with Lambert's diffuse lighting.
