#include "rmannotes.sl" surface box2(color stripe_one = color(0,0,.9); color stripe_two = color(0,0,.9); color thick = color(1,0,.5); string rltexture = ""; string tbtexture = ""; float Ka = 0.2, Kd = 0.2; float Ks = 0.8, roughness = 0.12; color specularcolor = 1 ) { color surface_color, layer_color; color surface_opac, layer_opac; float ss, tt; float fuzz = 0.05; point Nf, V; color circletwo = color (.1,.2,0); color circle = color (.95,.95,.1); point center; float radius; float d; float circle1, circle2; /* background layer */ surface_color = color(.9,.9,.8); surface_opac = 1; surface_color = color (1 ,1, 1); fuzz = 0.01; radius = 0.2; /* moon radius */ /* layer 1 -stripe */ rotate2d(s, t, radians(45), 0.5, 0.5, ss, tt); ss = repeat (ss, 4); tt = repeat (tt, 4); layer_color = stripe_one; layer_opac = pulse(0.4, 0.6, fuzz, ss); surface_color = blend(surface_color, layer_color, layer_opac); /* layer 2 */ rotate2d(s, t, radians(45), 0.5, 0.5, ss, tt); ss = repeat (ss, 4); tt = repeat (tt, 4); layer_color = stripe_two; layer_opac = pulse(0.4, 0.6, fuzz, tt); surface_color = blend(surface_color, layer_color, layer_opac); /* first circle */ layer_color = color(0, 0, .9); /* moon color */ ss = repeat(ss,4); tt = repeat(tt,4); center = (.25, .55, 0); d = distance(center, (ss, tt, 0)); circle1 = 1 - smoothstep(radius - fuzz, radius, d); /* second circle */ ss = repeat(ss,4); tt = repeat(tt,4); center = (.3, .5, 0); d = distance(center, (ss, tt, 0)); circle2 = 1 - smoothstep(radius - fuzz, radius, d); /* use difference of two circles to create moon */ layer_opac = difference(circle1, circle2); surface_color = blend(surface_color, layer_color, layer_opac); /* shading */ 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 = surface_opac; Ci = surface_color * surface_opac; }