/* * Again, similar structure of grass.sl * * by Lawrence D. Chin, cs184-bo */ #include "rmannotes.sl" surface grassC ( float height = 1.0, Ka=0.5, Kd=0.1, Ks= 1, roughness = 0.25, fac = 1.0, size = 1.0, size2 = 0.75; ) { color color1 = color(0,1,0), color2 = color(0.5,0.5,0); point Nf = faceforward(normalize(N),I); float noifreq = 5; float noiscale = 0.4; float ss, tt; float noi = noise(s * noifreq, t * noifreq); ss = s + snoise(noi + 912) * noiscale; tt = t + snoise(noi + 333) * noiscale; float smod = mod(ss*fac,1), tmod = mod(tt*fac,1); if (smod > tmod) { if (smod < 0.5) { float d, fuzz = 0.025; point center = (0.5, 0.5, 0); /* location of center of disk */ float radius = 0.35; /* radius of disk */ d = distance(center,(s,t,0)); color layer_opac = 1 - smoothstep(radius - fuzz, radius, d); Ci = blend(color1, color2, layer_opac); } else Ci = color1; } else Ci = color1; Oi = 1; Ci = Ci * (Ka *ambient() + Kd * diffuse(Nf) + Ks* specular(Nf,-I,roughness)); }