#include "rmannotes.sl" displacement woven_disp(float freq = 30, Km = 0.02) { float surface_mag, layer_mag; float ss, tt; float fuzz = 0.05; float row, col; point Ndiff; /* background layer */ surface_mag = 0; /* repeat layers */ ss = repeat(s, freq); tt = repeat(t, freq); col = whichtile(s, freq); row = whichtile(t, freq); if (even(row) && odd(col) || even(col) && odd(row)) { /* layer 1 */ layer_mag = spline(ss, 0.025, 0.025, 1, 0.25, 0.025); surface_mag = max(surface_mag, layer_mag) + layer_mag; /* layer 2 */ layer_mag = spline(tt, 0.025, 0.025, 1, 0.025, 0.025); surface_mag = max(surface_mag, layer_mag) + layer_mag; } else{ /* layer 2 */ layer_mag = spline(tt, 0.025, 0.025, 1, 0.025, 0.025); surface_mag = max(surface_mag, layer_mag) + layer_mag; /* layer 1 */ layer_mag = spline(ss, 0.025, 0.025, 1, 0.025, 0.025); surface_mag = max(surface_mag, layer_mag) + layer_mag; } /* displace and account for smooth shading */ Ndiff = normalize(N) - normalize(Ng); P += Km * surface_mag * normalize(N); N = normalize(calculatenormal(P)) + Ndiff; }