#include "rmannotes.sl" /* SPACETILES_D.SL -- A displacement map for creating space tiles */ displacement spacetiles_d (float Km = .08, sfreq=1, tfreq=1, fuzz=.05, size=.8, border=.1, wedge_amplitude = 1, border_amplitude = 1) { float surface_mag, layer_mag; float ss, tt; float a, b; /* TILE COORDINATES */ ss = repeat(s, sfreq); tt = repeat(t, tfreq); /* BOUNDARIES */ a = (1 - size)/2; b = 1 - (1 - size)/2 + fuzz; /* BASE SURFACE MAGNITUDE */ surface_mag = 0; /* layer 1 - embossed square*/ layer_mag = (1 - pulse(a, b, fuzz, ss) * pulse(a, b, fuzz, tt)) + pulse(a+border, b-border, fuzz, ss) * pulse(a+border, b-border, fuzz, tt); layer_mag *= border_amplitude; surface_mag = max(surface_mag, layer_mag); /* layer 2 - interior detail */ if (ss > a+border+fuzz && ss < b-border-fuzz && tt > a+border+fuzz && tt < b-border-fuzz) { layer_mag = 1 - pow((1 - abs(1 - 2*tt)), 8) * 3 * wedge_amplitude * 1/max(sfreq, tfreq); surface_mag = surface_mag * layer_mag; } /* layer 3 - internal detail */ P = P + surface_mag * Km * normalize(N); N = calculatenormal(P); }