surface placematsurf ( float Ka = 1, Kd = 1) { float uthreads = 25; float vthreads = 25; vector Nf = faceforward(N,I); float kd = Kd; point P2; P2 = transform("shader", P); /* Black specs on cloth */ float specfreq = 40; float spec = noise(P2*specfreq); /* sharpen peaks */ spec = pow(spec, 25); float cutin = 0.003; kd *= 1-0.7*smoothstep(cutin, cutin + 0.00005, spec); /* float kd = float spline(min(mod(t*vthreads,1.0),mod(s*uthreads,1.0)), Kd*0.1, Kd*0.3, Kd, Kd, Kd, Kd, Kd*0.3, Kd*0.1); */ /* fringe */ float fringefreq = 30; float Omod = 0.5 *(sin((t+1.5*noise(t*fringefreq)/(fringefreq))*2*PI*fringefreq)+1); Omod *= Omod; Omod = 1-(smoothstep(0.984, 0.986, abs(s))*Omod); Oi = Os*Omod; Ci = Oi * Cs * (Ka*ambient() + kd*diffuse(normalize(Nf))); }