/* CLF.sl */ /* Author: Jeremy S. De Bonet jsd@ai.mit.edu */ /* * CLFShade() : Shades a surface to look like a chain link fence * CLFDisp() : Displaces a surface to match the CLFShade shading */ float SemiSinWave(float x,m,d) { float ret; if (abs(x-m)>d) ret= 0; else ret= sin((x-m)/d); return ret; } surface CLFShade(float rDensity = 1) { float tt,ss; float rAccum; float SpFq=6.28*rDensity; float rPeriod = 1/rDensity; tt=mod(t, rPeriod); ss=mod(s, rPeriod); rAccum =Gaussian(tt,.35*(abs(cos(ss*SpFq)+.7)),.05); rAccum+=Gaussian(tt,1-.35*(abs(cos(ss*SpFq)+.7)),.05); Ci=mix( color(0,0,0), Cs, rAccum); Oi = 1; } displacement CLFDisp(float rDensity = 1) { float tt,ss; float rAccum; float SpFq=6.28*rDensity; float rPeriod = 1/rDensity; tt=mod(t, rPeriod); ss=mod(s, rPeriod); rAccum =SemiSinWave(tt,.35*(abs(cos(ss*SpFq)+.7)),.05) * cos(mod(ss,.5)*SpFq); rAccum-=SemiSinWave(tt,1-.35*(abs(cos(ss*SpFq)+.7)),.05) *(1- cos(mod(ss,.5)*SpFq)); P+=normalize(N)*rAccum*.05; N=calculatenormal(P); }