/* Shader description goes here */
surface
wax(float    Ka = 1,            /* ambient brightness */
            Kdin = 0.5,        /* basic brightness */
            Kdout = 0.5,
            Kd = 1,
            blend = 0.5,
            colormix_start = 0.4,
            colormix_end = 0.6,
            Ks = 0.7,        /* [0 10] */
            roughness = 0.1;/* hilite spread */
    color     hilitecolor = 1,    /* hilite color */
            colorin_top = (0.953, 0.635, 0.314),
            colorin_bottom = (0.3, 0.11, 0.04),
            colorout = 1 )
{
color    ambientcolor, 
        diffusecolor,
        diffusecolorOut,
        diffusecolorIn, 
        speccolor,
        surfcolor = 1;
  
/* STEP 1 - make a copy of the surface normal one unit in length */
normal    n = normalize(N);
normal    nf = faceforward(n, I);
normal    front = n;
if(n != nf)
    front = nf;
    
/* STEP 2 - set the apparent surface opacity */
Oi = Os;
  
/* STEP 3 - calculate the lighting components */
ambientcolor = Ka * ambient();
  
color colorin = mix(colorin_top, colorin_bottom, smoothstep(colormix_start, colormix_end, (1-t)));
  
diffusecolorOut = Kdout * diffuse(front) * colorout;
diffusecolorIn = Kdin * diffuse(-front) * colorin;
diffusecolor = mix(diffusecolorOut, diffusecolorIn, t) * Kd;
  
vector    i = normalize(-I);
speccolor = Ks * specular(nf, i, roughness) * hilitecolor;
  
//speccolor = speccolor * (1 - smoothstep(0, 0.5, s));
/* STEP 4 - calculate the apparent surface color */
Ci = Oi * Cs * surfcolor * (ambientcolor + diffusecolor + speccolor);
}