public static float Perlin3D(float x, float y, float z, float smooth, int octaves, float persistence)
    {
        float XY = Noise.BrownianMotion(x * smooth, y * smooth, octaves, persistence);
        float YZ = Noise.BrownianMotion(y * smooth, z * smooth, octaves, persistence);
        float XZ = Noise.BrownianMotion(x * smooth, z * smooth, octaves, persistence);

        float YX = Noise.BrownianMotion(y * smooth, x * smooth, octaves, persistence);
        float ZY = Noise.BrownianMotion(z * smooth, y * smooth, octaves, persistence);
        float ZX = Noise.BrownianMotion(z * smooth, x * smooth, octaves, persistence);

        return((XY + YZ + XZ + YX + ZY + ZX) / 6f);
    }