/* * PacificOcean.sl * * Description: * Shader that generates waterwave-like pattern using turb technique. * * Parameters: turbfreq : using for increasing or decreasing the size and * the number of ripple. * freq: using for changing the white ripple in order to * make an animation. * watercolor: color of water. * * Author: Akanee Mahasith */ #include "rmannotes.sl" surface PacificOcean(float Kd = .8, Ka = .5; float freq = 1; float turbfreq = 16; color watercolor = color (0.051, 0.530, 1); ) { point PP; point Nf; float turb; color surface_color, layer_color; color surface_opac, layer_opac; /* layer 1 */ surface_color = watercolor; surface_opac = 0.5; Nf = faceforward(normalize(N), I); PP = transform("shader", P) * turbfreq; turb = 0; turb += abs(snoise(PP + freq * PI)); turb = pow((1 - turb), 8); /* layer 2 */ layer_color = color (1,1,1); layer_opac = turb; surface_color = blend(surface_color, layer_color, layer_opac); /* output */ surface_color = surface_color * (Ka * ambient() + Kd * diffuse(Nf)); Oi = surface_opac; Ci = surface_color * surface_opac; }