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);
  
}