#include "rmannotes.sl" surface messy(float blowout = 4, turblayers = 1, freq = 30, turbfreq =2, bombshift = 0, turbfirst = 0;) { float fuzz = 0.05; float col = whichtile(s, freq); float row = whichtile(t, freq); float r, theta, g, i, j, true_col=col, true_row=row; color layer_opac = 1, surface_color =1, layer_color = 0; point PP; float turb, f; float maxfreq = 6; if (turbfirst == 1) { for(g = 0; g < turblayers; g+=1) { PP = transform("shader", P) * (turbfreq); turb = 0; for (f = 1; f < maxfreq+5; f *= 2) turb += abs(snoise(PP * f +295*g)) / f; if(even(g)) { layer_color = 1-turb*blowout; layer_opac = 1-turb*blowout; surface_color = blend(surface_color, layer_color, layer_opac); } else { layer_color = turb; layer_opac = 1-turb; surface_color = blend(surface_color, layer_color, layer_opac); } } } for (i=-2; i<=2; i+=1) { for(j=-2; j<=2; j+=1) { float ss = repeat(s, freq) - i; float tt = repeat(t, freq) - j; col = mod((true_col + i), freq); row = mod((true_row + j), freq); float bomberman = noise(col * 10 +bombshift + 0.5, row * 10 + bombshift + 0.5); if (udn(bomberman*283,0,1) > 0.2) { //moveshift ss += 4 * snoise(bomberman * 8 + 1183); tt += 4 * snoise(bomberman * 8 + 999); //rotates float tmps = ss, tmpt = tt; float Rot = udn(bomberman * 777, -60, 60); rotate2d(tmps, tmpt, radians(Rot), 0.5, 0.5, ss, tt); //random scale (not yet understood) float rancor = udn(bomberman * 3824, .33, 2); ss = (ss-0.5)*rancor + 0.5; tt = (tt-0.5)*rancor + 0.5; //feature sample noise (not yet understood) ss += .2 * snoise(ss*4 + row*4 + 437); tt += .2 * snoise(tt*4 + col*4 + 298); color layer_color = color "hsv" (.1*udn2(ss*6 + col*4, tt*6 + row*4, 0,1), .1, .2*udn2(ss*6 + col*4, tt*6 + row*4, 0,1)); float d = distance(point(.5,.5,0), point(ss,tt,0)); topolar2d(d, ss, r, theta); layer_opac = 1-smoothstep(0.3-fuzz, 0.3, d); surface_color = blend(surface_color, layer_color, layer_opac); } } } if (turbfirst == 0) { for(g = 0; g < turblayers; g+=1) { PP = transform("shader", P) * (turbfreq); turb = 0; for (f = 1; f < maxfreq+5; f *= 2) turb += abs(snoise(PP * f +295*g)) / f; if(even(g)) { layer_color = 1-turb*blowout; layer_opac = 1-turb*blowout; surface_color = blend(surface_color, layer_color, layer_opac); } else { layer_color = turb; layer_opac = 1-turb; surface_color = blend(surface_color, layer_color, layer_opac); } } } Ci = surface_color; }