#include "rmannotes.sl" displacement cavity_d (float freq=40, Km=1, texfreq=35) { point PP, center; float surface_mag, layer_mag, turb, turb1, turb2, f, d, radius, fuzz; float bump_layer_mag; float ss, tt; turb=0; fuzz=.05; /* PP = transform("shader", P); */ surface_mag = 0; layer_mag = 0; bump_layer_mag = 0; /* overall cloud undulation */ layer_mag = 1 - (.5 + .5 * pow(cos(t), 8) * cos(t * (freq * (1 - cos(t))))); surface_mag = surface_mag + layer_mag; /* cloud's turbulent undulations */ layer_mag = .2 * noise(s*3,t*3); surface_mag = surface_mag + layer_mag; /* CALCULATE TURBULENCE */ for (f = 1; f < freq; f *= 2) turb += abs(snoise(P * f + 4*PI)) / f; turb1 = pow(1-turb, 4); turb2 = pow(turb, 4); layer_mag = turb; surface_mag *= layer_mag; /* output */ /* P = PP * PP + surface_mag * Km * normalize(N); */ P += P * surface_mag * Km * normalize(N); N = calculatenormal(P); }