public double GetValue(double x, double y, double z)
{
double value = 0.0;
double signal = 0.0;
double curPersistence = 1.0;
long seed;
x *= Frequency;
y *= Frequency;
z *= Frequency;
for (int currentOctave = 0; currentOctave < OctaveCount; currentOctave++)
{
seed = (Seed + currentOctave) & 0xffffffff;
signal = GradientCoherentNoise(x, y, z, (int)seed, NoiseQuality);
signal = 2.0 * System.Math.Abs(signal) - 1.0;
value += signal * curPersistence;
x *= Lacunarity;
y *= Lacunarity;
z *= Lacunarity;
curPersistence *= Persistence;
}
value += 0.5;
return value;
}