# include "rmannotes.sl" surface body(float tfreq = 1, Km = 0.2, Ka = 0.1, Kd = 0.3, Ks = 0.4, roughness = .1; color specularcolor = 1) { color surface_color,layer_color; color surface_opac, layer_opac; point Nf, PP, V; float turbulence, f; float maxfreq = 4; float cutoff, width, fade; PP = transform("shader", P) * tfreq; Nf = faceforward(normalize(N),I); V = normalize(-I); surface_color = noise(PP); surface_opac = Os; /* layer1 */ layer_color = color (0.3); width = filterwidth_point(P); cutoff = clamp(0.5 / width, 0, maxfreq); turbulence = 0; for (f = 1; f < 0.5 * cutoff; f *= 2) turbulence += abs(snoise(P * f)) / f; fade = clamp(2 * (cutoff - f) / cutoff, 0, 1); turbulence += fade * abs(snoise(P * f)) / f; layer_opac = turbulence; surface_color = blend(surface_color, layer_color, layer_opac); surface_opac = union(surface_opac, layer_opac); Oi = surface_opac; Ci = surface_color * (surface_color *(Ka * ambient() + Kd * diffuse(Nf))+ specularcolor * Ks * specular(Nf, V, roughness)); Oi = surface_opac; Ci = surface_opac * surface_color; }