/*Wooksang's irregular wood shader for Digital lighting*/ #include "rmannotes.sl" surface irregular_metal( float Ks = 0.2, Kd=1, Ka = 0.1,roughness=0.1; color first = color(0.194,0.163,0.125); color second = color(0.980,0.921,0.943); color third = color(1,1,1); color specularcolor = 1; float number = 7) { /*basic setting*/ color surface_color, layer_color; float surface_opac, layer_opac; float d,col,row,ss,tt,noi; float freq,i; vector V; normal Nf; Nf=faceforward(normalize(N),I); V=-normalize(I); surface_color = first; /* basic options */ for(i=2;i<=number;i +=1) { freq = i; col = whichtile(s,freq); row = whichtile(t,freq); noi = noise(col+0.7,row+0.7)*noise(i*10+0.5); ss = repeat(s,freq)+udn(noi*1300,-0.41,0.41); tt = repeat(t,freq)+udn(noi*236,-0.41,0.41); d = distance(point(0.5,0.5,0),point(ss,tt,0)); /* layer #1 */ layer_color = second; layer_opac = (1-smoothstep(0.075*noise(ss*120,tt*170),0.12*noise(ss*60,tt*70),d))/number/freq*5; surface_color = blend(surface_color, layer_color, layer_opac); } /* layer #2 */ layer_color = third; layer_opac =clamp(1- noise(s*60,t*60),0.3,0.7); surface_color = blend(surface_color, layer_color, layer_opac); /* output */ Oi=Os; Ci=surface_color*(Ka*ambient()+ (1-layer_opac)*Kd*diffuse(Nf))+specularcolor*layer_opac*Ks*specular(Nf,-V,roughness); }