/* vase_surface.sl * * Creates a earth-toned color wash with four color palettes * to choose from: grey, rust, and mauve. * */ #include "rmannotes.sl" surface vase_surface(string location = "grey"; color specularcolor = 1; float Ka = .2, Kd = 0.8, Ks = 0.4, roughness = 0.25) { color surface_color, layer_color; color surface_opac, layer_opac; float ss, tt; float freq = 12; float left, right, top, bottom; float fuzz = 0.03; float row; float rectangle, pattern1, square; float circle, radius, d; point center; point Nf, V; color amb, diff, spec; /* grey colors */ color grey_1 = color(.634, .703, .773); color grey_2 = color (.337, .497, .529); color grey_3 = color(.374, .416, .455); color grey_4 = color(.202, .3, .317); /* rust colors */ color rust_1 = color(.758, .456, .241); color rust_2 = color(.575, .346, .183); color rust_3 = color(.575, .275, .061); color rust_4 = color(.446, .176, 0); /* mauve colors */ color mauve_1 = color(.226, .169, .213); color mauve_2 = color(.387, .290, .409); color mauve_3 = color(.455, .344, .427); color mauve_4 = color(.591, .519, .561); /* background color */ surface_color = color(1, 1, 1); surface_opac = 1; if (location == "grey") { /* layer 1 */ layer_opac = 1; layer_color = spline(t, grey_1, grey_1, grey_2, grey_3, grey_4, grey_4) * float noise(s, t); surface_color = blend(surface_color, layer_color, layer_opac); /* layer 2 */ layer_opac = .2; layer_color = grey_1 * float noise(s * 2, t * 2); surface_color = blend(surface_color, layer_color, layer_opac); } else if (location == "rust") { /* layer 1 */ layer_opac = 1; layer_color = spline(t, rust_1, rust_1, rust_2, rust_3, rust_4, rust_4) * float noise(s, t); surface_color = blend(surface_color, layer_color, layer_opac); /* layer 2 */ layer_opac = .2; layer_color = rust_1 * float noise(s * 80, t * 80); surface_color = blend(surface_color, layer_color, layer_opac); } else if (location == "mauve") { /* layer 1 */ layer_opac = 1; layer_color = spline(t, mauve_1, mauve_1, mauve_2, mauve_3, mauve_4, mauve_4) * float noise(s, t); surface_color = blend(surface_color, layer_color, layer_opac); /* layer 2 */ layer_opac = .2; layer_color = mauve_1 * float noise(s * 80, t * 80); surface_color = blend(surface_color, layer_color, layer_opac); } else { surface_color = color (.5, .5, .5); } /* illum */ Nf = faceforward(normalize(N), I); V = -normalize(I); /* amb = surface_color * Ka * ambient(); diff = surface_color * Kd * diffuse(Nf); spec = specularcolor * Ks * specular(Nf, V, roughness); surface_color = (amb + diff + spec); */ /* output */ Oi = surface_opac; Ci = surface_opac * surface_color; }