#include "rmannotes.sl" displacement dmultirings(float frequency = 3) { float tile_s, tile_t; float low, hi, fuzz, d, dd, max_d; point center, p; float magnitude, layer_mag; float Km = 0.2; float ring; fuzz = 0.05; magnitude = 0; rotate2d(s,t, 45, 0.6, 0.6, tile_s, tile_t); tile_s = repeat(tile_s, frequency ); tile_t = repeat(tile_t, frequency ); low = 0.35; hi = 0.65; p = (0, 0, 0); center = (0.5, 0.5, 0); max_d = distance (center, p); p = (s, t, 0); d = distance (center, p); dd = (low/2)*d/max_d; tile_s = repeat(s, frequency ); tile_t = repeat(t, frequency ); layer_mag = pulse (distance ((tile_s, tile_t, 0), (d, d, 0)), 0.3, 0.4, fuzz); layer_mag *= d/max_d; magnitude = max(magnitude, layer_mag); rotate2d(tile_s,tile_t, 180, 0.5, 0.5, tile_s, tile_t); layer_mag = pulse (distance ((tile_s, tile_t, 0), (d, d, 0)), 0.3, 0.4, fuzz); layer_mag *= d/max_d; magnitude += layer_mag; ring= 1- smoothstep(.28, .47, distance((0.5, 0.5, 0), (s, t, 0))); if(ring!=0) magnitude *= 2*(1-d/max_d)*ring; else { magnitude = 0; } layer_mag = smoothstep(0.3, 0.5, distance((.5,.5,0), (s,t,0))/max_d); layer_mag *= 2*ring; layer_mag *= sin(2*PI*max_d/d); layer_mag *= .5; magnitude += layer_mag; rotate2d(tile_s, tile_t, 45, 0.5, 0.5, tile_s, tile_t); /* to define a varying width of the pulse */ low = d/(max_d *2); hi = d/max_d; /* a layer having varying width of line patterns */ layer_mag = pulse (tile_s, low, hi, fuzz); layer_mag *= hi/frequency; magnitude += layer_mag; /* a layer having varying width of line patterns */ layer_mag = pulse (tile_t, low, hi, fuzz); layer_mag *= hi/frequency; magnitude += layer_mag; P += -Km * magnitude * normalize(N); N = calculatenormal(P); }