surface lab7 ( float w1 = 0.2; float w2 = 0.1; float w3 = 0.15; float w4 = 0.2; color bg1 = 0.3; color fg1 = 0.7; color bg2 = 0.4; color fg2 = 0.6; color bg3 = 0.5; color fg3 = 0.5; color bg4 = 0.6; color fg4 = 0.4 ) { float Kd = 0.5; float Ka = 0.2; point p; float width = w1+w2+w3+w4; point Nf = faceforward( normalize(N), I); if (mod(xcomp(p)-xcomp(P), width) > 0) { if (mod(xcomp(p)-xcomp(P), width) <= w1) { Ci = .33*fg1; } } else { Ci = .33*bg1; } if (mod(xcomp(p)-xcomp(P), width) > w1-.01) { if (mod(xcomp(p)-xcomp(P), width) <= w1+w2) { Ci = .33*fg2; } } else { Ci = .33*bg2; } if (mod(zcomp(p)-zcomp(P), width) > w2+w1) { if (mod(zcomp(p)-zcomp(P), width) <= w1+w2+w3) { Ci = Ci + .33*fg3; } } else { Ci = Ci + .33*bg3; } if (mod(zcomp(p)-zcomp(P), width) > w3+w2+w1-.01) { if (mod(zcomp(p)-zcomp(P), width) <= width) { Ci = Ci + .33*fg4; } } else { Ci = Ci + .33*bg4; } if (mod(ycomp(p)-ycomp(P), width) > w2+w1) { if (mod(ycomp(p)-ycomp(P), width) <= w1+w2+w3) { Ci = Ci + .33*fg1; } } else { Ci = Ci + .33*bg2; } if (mod(ycomp(p)-ycomp(P), width) > w3+w2+w1) { if (mod(ycomp(p)-ycomp(P), width) <= width) { Ci = Ci + .33*fg3; } } else { Ci = Ci + .33*bg4; } Ci = Ci * (Ka*ambient() + Kd*diffuse(Nf)); float d; point sN,PP; float freq = 500; float depth = 0.03; d = noise(freq*s) + noise(freq*t) - 1; /* from -1 to 1 */ PP = transform("shader",P); sN = normalize(transform("shader",N)-transform("shader",(0,0,0))); P = transform("shader","current",PP + sN*depth*d); N = calculatenormal(P); } /* surface test ( float Ka=1, Kd=1 ) { point Nf; Nf = faceforward(normalize(N),I); Oi = Os; Ci = Os * Os * Cs * ( Ka*ambient() + Kd*diffuse(Nf) ) ; } */