Esempio n. 1
0
    //fractal brownian motion to create more realistic terrain
    public float FBM(Vector3 vec)
    {
        float Frequency = NoiseScale / 100f;
        float Amplitude = 1;
        float weight    = 1f;
        float noise     = 0;

        // float offsetRange = 1000;

        for (int i = 0; i < Octaves; i++)
        {
            //Passing in a seeded offset at octave level causes mesh issues not seen on the GPU - removed from both functions to match terrains up
            ///Vector3 OctaveOffset = new Vector3((float)rnd.NextDouble() * 2 - 1, (float)rnd.NextDouble() * 2 - 1, (float)rnd.NextDouble() * 2 - 1) * 1000;

            float f = PerlinNoise.CNoise(vec * Frequency + Offset);
            float v = 1 - Mathf.Abs(f);
            v         *= v;
            v         *= weight;
            weight     = Mathf.Max(Mathf.Min(v * WeightMultiplier, 1), 0);
            noise     += v * Amplitude;
            Amplitude *= Persistence;
            Frequency *= Lacunarity;
        }

        float c = -(vec.y + FloorOffset) + (noise * NoiseWeight);

        if (vec.y < HardFloor)
        {
            c += HardFloorWeight;
        }

        return(c);
    }