Fresnel.sl

[index]

4th March 2009   11:49am 12sec
M:\vsfx419\shaders\Fresnel.sl


fresnel in surface



//bias function
float biasFunc(float t; float a;)
    {
        return pow(t, -log(a)/log(2));
    }
//fresnel funtion 
color FresnelFunc(    float bias ; 
                    float eta ; 
                    float kfr )
    {
  
    color C = 0;
    extern point P;
    extern normal N;
    extern vector I;
    
    normal Nn = normalize (N);
    vector Nf = faceforward (Nn, I);
    
    
    float Kr = 1, Kt = 1;
    fresnel (normalize(I), Nf, eta, Kr, Kt); //*****//
    Kr = kfr*biasFunc(Kr, bias);
    C = color ( Kr, Kr, Kr);
    
    return C;
  
    }
    
surface
pill_plastic(float    Ka = 1,            
                    Kd = 0.5,        
                    Ks = 0.7,        
                    opac = 0.2,  
                    roughness = 0.1,
                    blend = 0.5;
            float     bias = 1;
            float   eta = 1;
            float   kfr = 1; 
            color     hilitecolor = 1,    
                    C1 = (1,0,0),
                    C2 = (0,0,1) )
{
color    ambientcolor, diffusecolor, speccolor,
        surfcolor = 1;
color pillcolor = 1;
/* STEP 1 - make a copy of the surface normal one unit in length */
normal    n = normalize(N);
normal    nf = faceforward(n, I);
  
/* STEP 2 - set the apparent surface opacity */
Oi = Os * opac;
  
/* STEP 3 - calculate the lighting components */
ambientcolor = Ka * ambient();
diffusecolor = Kd * diffuse(nf);
pillcolor = mix (C1,C2,blend*t) ;
color fresnelResult = FresnelFunc (bias, eta, kfr);
  
  
  
vector    i = normalize(-I);
speccolor = Ks * specular(nf, i, roughness) * hilitecolor;
  
  
  
  
  
/* STEP 4 - calculate the apparent surface color */
Ci = Oi *  surfcolor * pillcolor * (ambientcolor + diffusecolor + speccolor + fresnelResult);
}