#define repeat(x,freq) (mod((x) * (freq), 1.0)) #define pulse(a,b,fuzz,x) (smoothstep((a)-(fuzz),(a),(x)) - smoothstep((b)-(fuzz),(b),(x))) surface lab7(float Ka = 0.7, Kd = 0.7, Ks = 0.3, roughness = 0.1, freq = 5; color specularcolor = 1, color1 = color (1, 1, 1), color2= color(0.2,0.2,0.2), color3= color(0.6,0.6,0.6)) { color surface_color; float ss, tt; point Nf, V; surface_color = Cs; ss = repeat(s, freq); ss =pulse(0.35,0.65,0.02,ss); tt = repeat(t, freq); tt =pulse(0.35,0.65,0.01,tt); if (ss==0) { surface_color=surface_color*(1-tt)+color2*tt; } else if (tt==0) { surface_color=surface_color*(1-ss)+color1*ss; } else surface_color=(color1*(1-tt)+color2*(1-ss)+color3*(ss+tt))/2; /* illum */ Nf = faceforward(normalize(N), I); V = -normalize(I); surface_color = surface_color * (Ka * ambient() + Kd * diffuse(Nf)) + specularcolor * Ks * specular(Nf, V, roughness); /* output */ Oi=Os; Ci = surface_color *Os; }