/* * Displacement Shader * M. Geroch, Spring 1996 * * leaf veins makes ridges for veins in the leaf and also * spores */ #include "/usr/local/accad/shaders/rmannotes.sl" displacement leafveins( float Km = 0.02; float vein_freq = 8;) { float magnitude = 0.0, layer_mag; float ss, tt; float fuzz = 0.02, d; float dampzone = 0.1, mag_fac; /* main stem layer */ layer_mag = pulse(0.49, 0.52, fuzz, s); magnitude += layer_mag; /* vein layer */ /* squeeze the veins together near the top of the leaf */ tt = pow(t, 0.25); tt = repeat(tt, vein_freq * 2); ss = repeat(s, 2); if (s < 0.5) { d = ptlined((0, 0, 0), (1, 1, 0), (ss, tt, 0)) * pow(1.0-ss, 0.2); mag_fac = ss; } else { d = ptlined((1, 0, 0), (0, 1, 0), (ss, tt, 0)) * pow(ss, 0.2); mag_fac = 1.0-ss; } layer_mag = (1.0 - smoothstep(0.06-fuzz, 0.06, d))* mag_fac; magnitude = max(magnitude, layer_mag); /* spores layer */ layer_mag = smoothstep(0.75, 0.75+fuzz, noise(s*30, t*30)); magnitude = max(magnitude, layer_mag); /* Km determines the height of the vein pattern */ P += -Km * magnitude * normalize(N); N = calculatenormal(P); }