|
//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);
}
|