/*Wooksang's body shading for spin-body object*/ #include "rmannotes.sl" surface spin_body( float Ks = 0.3, Kd=1, Ka = 0.1,Km=0.4,roughness=0.1; color first = color (1,1,1); color second = color (0,0,0); color specularcolor = color (1,1,1);) { /*basic setting*/ color surface_color, layer_color; float surface_opac, layer_opac; float r,freq=5; vector V; normal Nf; point PP,newP; Nf=faceforward(normalize(N),I); V=-normalize(I); /* background layer (layer 0) */ surface_color = first; surface_opac = 1; /* become solid */ PP = transform("shader", P); /*calculate distance through x axis*/ /* r = distance (point (xcomp(PP),0,0),point(0,0,0));*/ r=xcomp(PP)+ycomp(PP); layer_color = second; r=repeat(r,1); layer_opac = step(0.25,r)-step(0.75,r); surface_color = blend(surface_color, layer_color, layer_opac); /* bump map */ newP = calculatenormal(P+Km*layer_opac+normalize(N)); Nf = faceforward(normalize(newP),I); /* output */ Ci=surface_color*(Ka*ambient()+Kd*diffuse(Nf))+specularcolor*Ks*specular(Nf,V,roughness); }