#include "rmannotes.sl" displacement window_displ (float wind_width = .65, wind_hight = .65, hor_bars = 1, vert_bars = 1, frame_h_width = .02, raws = 1, col = 1, offset_freq = 1, offset_amp = 0, pair_offset = .15, store_front_floors = 2, rot_amp = 0, Km = .1; float vert_tiles = 5, hor_tiles = 5, tile_Km = .3) { color surface_color, layer_color; float layer_opac1, layer_opac2, layer_opac; float ss, tt, sss, ttt, sfreq, tfreq, d1, d2, d; float nfreq = 8, amp = .05, amp2 = .6, nfreq2 = 1.2; float tile_ss, tile_tt; float bottom, top, left, right, offset; float i, j, fuzz = .01; float hor_division = hor_bars+1, v_division = vert_bars +1; float h_size, v_size, in_left, in_top; float glass_area = 0, frame_area = 0, inside_fr_area; float rot; /***********displacement variables *******************************/ point PP; float surface_mag = 0; /******************************************************************/ /**************displacment calc*************************************/ PP = transform("shader", P); /********************************************************************/ sfreq = raws; tfreq = col; tile_ss = repeat(s, vert_tiles); tile_tt = repeat(t, hor_tiles); if(even(whichtile(t, hor_tiles))) tile_ss = mod(tile_ss +.5, 1); offset = snoise2((whichtile(s,sfreq)+.23)*offset_freq+50, (whichtile(t,tfreq)+.23)*offset_freq)*offset_amp; ss = mod(repeat(s, sfreq) + offset/4,1); tt = mod(repeat(t, tfreq) + offset,1); if(odd(whichtile(t,tfreq))) tt = mod(tt + pair_offset, 1); /* ss = mod(repeat(s, sfreq) + snoise((whichtile(s,sfreq)+.23)*offset_freq+50)*offset_amp, 1); tt = mod(repeat(t, tfreq) + snoise((whichtile(t,sfreq)+.23)*offset_freq)*offset_amp, 1); */ rot = snoise2(whichtile(s, sfreq)+.21, whichtile(t, tfreq)+.12)*rot_amp; rotate2d(ss, tt, rot_amp, .5, .5, sss, ttt); if(whichtile(t,tfreq) >= raws - store_front_floors) { surface_mag = -.3; bottom = 1; right = 1; left = 0; top = 0; } else{ bottom = 1 - (1 - wind_hight)/2; right = 1 - (1 - wind_width)/2; left = (1 - wind_width)/2; top = (1 - wind_hight)/2; } h_size = (right - left - (v_division+1)*frame_h_width)/v_division; v_size = (bottom - top - (hor_division+1)*frame_h_width)/hor_division; /*********** window area **********************************************/ /*inside_frame_area = pulse(left+.1, right-.1, fuzz, sss) * pulse(top+.1, bottom-.1, fuzz, ttt);*/ frame_area = pulse(left, right, fuzz, sss) * pulse(top, bottom, fuzz, ttt); /************ glass area **********************************************/ for(i = 0; i < hor_division; i = i+1) /* raws */ { in_top = top +(i+1)*frame_h_width + i*v_size; layer_opac1 = pulse(in_top, in_top + v_size, fuzz, ttt); for(j = 0; j < v_division; j = j+1) /* columns */ { in_left = left + (j+1)*frame_h_width + j*h_size; layer_opac2 = pulse(in_left, in_left + h_size, fuzz, sss); layer_opac2 = intersection(layer_opac1, layer_opac2); glass_area = union(glass_area, layer_opac2); } } /****************** displacement calculations *****************/ /*surface_mag = max(surface_mag, layer_mag);*/ if(frame_area < .001) surface_mag = tile_ss * tile_tt * tile_Km; else surface_mag = - frame_area - glass_area; /*if(snoise2( whichtile(s, col)+.23, whichtile(t,raws) + 23) > .1) surface_mag = 3.; */ /* surface_mag = surface_mag + snoise(s)*15;*/ P -= Km * surface_mag * normalize(N); N = calculatenormal(P); }