/* vase_surface.sl * * Creates a earth-toned color wash with pattern * */ #include "rmannotes.sl" surface vase_ptn_surf(color specularcolor = 1; float Ka = .2, Kd = 0.7, Ks = 0.33, roughness = 0.3) { color surface_color, layer_color; color surface_opac, layer_opac; float ss, tt; float freq = 12; float noise_freq = 5; float noise, noi, sin, noiscale = 0.7; float left, right, top, bottom; float fuzz = 0.03; float stripe_fuzz = 0.2; float row; float rectangle, pattern1, square; float circle, radius, d; point center; point Nf, V; color amb, diff, spec; /* tan colors */ color tan_1 = color(.712, .712, .679); color tan_2 = color(.485, .451, .372); color tan_3 = color(.348, .409, .258); color test1 = color(1, 0, 0); color noise_color = color(.713, .591, .818); Nf = faceforward(normalize(N), I); V = -normalize(I); /* background color */ surface_color = color(1, 1, 1); surface_opac = 1; /* noi = noise(s * noise_freq, t * noise_freq); */ /* layer 1 */ layer_opac = 1; layer_color = mix(tan_2, tan_1, smoothstep(0.2, 0.8, t)); surface_color = blend(surface_color, layer_color, layer_opac); /* stripe layer */ /* ss = s + snoise(noi + 912) * noiscale; tt = t + snoise(noi + 656) * noiscale; ss = repeat(ss, 3); tt = repeat(tt, 1); */ layer_color = tan_3; layer_opac = pulse((.1 + snoise(s)), (.4 + snoise(s)), stripe_fuzz, t) * .7; surface_color = blend(surface_color, layer_color, layer_opac); /* layer 3 */ layer_color = color(.273, .255, .234); /* shift even rows 1/2 tile */ ss = repeat(s, freq); tt = repeat(t, freq); row = whichtile(t, freq); if (even(row)) ss = mod(ss + 0.5, 1); /* rectangle */ left = 0.15; right = 0.85; /* rectangle sides */ top = 0.45; bottom = 0.55; rectangle = pulse(left, right, fuzz, ss) * pulse(top, bottom, fuzz, tt); /* circle */ center = (0.5, 0.5, 0); radius = 0.2; d = distance(center, (ss, tt, 0)); circle = 1 - smoothstep(radius - fuzz, radius, d); /* square */ square = intersection(pulse(0.45, 0.55, fuzz, ss), pulse(0.45, 0.55, fuzz, tt)); /* use union and difference to create pattern */ pattern1 = union(rectangle, circle); layer_opac = difference(pattern1, square) * 0.8; surface_color = blend(surface_color, layer_color, layer_opac); /* noise layer */ layer_opac = .2; layer_color = noise_color * float noise(s * 70, t * 70); surface_color = blend(surface_color, layer_color, layer_opac); /* illum */ 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; }