displacement dh_lava_displace(
float Km = 0.5,
freq = 7,
layers = 4,
maskRampIntensity = -10;
string space = "object",
filename = "", // brickmap location
displaychannels = "";)
{
float hump = 0;
normal n = normalize(N);
point p = transform(space, P);
float j, f = freq, amplitude = 1;
float a = area(P, "dicing");
normal Nn = normalize(N);
color rad_t = 0,
ssdiffusion = 0;
for(j = 0; j < layers; j += 1) {
hump += (noise(p * f) - 0.5) * amplitude;
f *= 2;
amplitude *= 0.5;
}
if ((filename != "") && (displaychannels != ""))
texture3d(filename, P, N, "_ssdiffusion", ssdiffusion);
color maskRamp = mix(color(1), color(maskRampIntensity), ssdiffusion),
mrHSV = ctransform("rgb", "hsv", maskRamp),
layeredColor = mix(0, hump, mrHSV[2]);
P = P - n * hump * Km;
N = calculatenormal(P);
}