public void Erode()
 {
     map     = FindObjectOfType <HeightMapGenerator> ().Generate(mapSize);
     erosion = FindObjectOfType <Erosion> ();
     erosion.Erode(map, mapSize, numErosionIterations, true);
     GenerateMesh();
 }
    public void Erode()
    {
        //map = FindObjectOfType<Noise>().Generate(mapSize); // генерация шума на основе параметра mapSize
        float[] noiseMap  = Noise.GenerateNoiseMap(mapSize, seed, noiseScale, octaves, persistance, lacunarity, offset);
        Color[] colourMap = new Color[mapSize * mapSize];

        for (int y = 0; y < mapSize; y++)
        {
            for (int x = 0; x < mapSize; x++)
            {
                float currentHeight = noiseMap[y * mapSize + x];
                for (int i = 0; i < regions.Length; i++)
                {
                    if (currentHeight <= regions[i].height)
                    {
                        colourMap[y * mapSize + x] = regions[i].colour;
                        break;
                    }
                }
            }
        }

        erosion = FindObjectOfType <Erosion>();                       // инициализация объекта класса erosion
        erosion.Erode(noiseMap, mapSize, numErosionIterations, true); // реализация функции эрозии
        //GenerateMesh(); // генерация меша
        MapDisplay display = FindObjectOfType <MapDisplay>();

        display.DrawMeshLand(MeshGenerator.GenerateTerrainMesh(noiseMap, meshHightMultiplier, meshHeightCurve), TextureGenerator.TextureFromColourMap(colourMap, mapSize));
    }
        public void ModifyNoise()
        {
            float[,] elevations = this._noise.GetNoiseValues();
            Erosion erosion = new Erosion();

            erosion.ErosionShader = erosionShader;

            if (_erosionConfig.applyErosion)
            {
                erosion.Erode(elevations, erosionIterations);
            }

            switch (preset)
            {
            case 0:
                ApplyNormalizedHalfSphere(elevations);
                break;

            case 1:
                ApplyLogisticsFunctionToElevations(elevations);
                break;

            case 2:
                AmplifyElevations(elevations, 2);
                break;

            case 3:
                break;

            default:
                Debug.Log("Default noise map.");

                CreateCraters(elevations);

                AmplifyElevations(elevations, amplification);
                LogarithmicClamp(elevations, logClampThreshold, logClampIntensity);
                DampenElevations(elevations, flattenDampenStrength);
                FlattenLows(elevations);
                FlattenLinearToAverage(elevations);

                break;
            }

            Tools.Normalize(elevations);


            // computeErosion (elevations);

            //Tools.normalize(elevations, maxOnly: false, rescaleSmallMax: false);

            //normalizeToNElevationLevels(elevations, heightSteps);

            this._noise.SetNoiseValues(elevations);
        }
Example #4
0
    private void SetNoiseFilters(Dictionary <Vector2, float[, ]> noiseMapDictionary, int noiseIndex, List <Vector2> coordList)
    {
        if (sharedHeightMap == null)
        {
            sharedHeightMap = CombineNoiseMaps(noiseMapDictionary, coordList);
        }

        if (erode)
        {
            sharedHeightMap    = erosion.Erode(seed, sharedHeightMap, noiseIndex);
            noiseMapDictionary = SeparateNoiseMap(sharedHeightMap, noiseMapDictionary, coordList);
        }

        foreach (Vector2 v in coordList)
        {
            if (cascadeNoiseFilter)
            {
                noiseMapDictionary[v] = NoiseGenerator.CascadeNoiseFilter(noiseMapDictionary[v], cascadeCount, heightMultiplier, CNFintensity);
            }
        }
    }
 void Update()
 {
     if (animateErosion)
     {
         for (int i = 0; i < iterationsPerFrame; i++)
         {
             erosion.Erode(map, mapSize);
         }
         numAnimatedErosionIterations += iterationsPerFrame;
         GenerateMesh();
     }
 }
Example #6
0
    public static HightMap GenHightMap(MeshSettings meshSettings, HightMapSettings settings, Vector2 center)
    {
        AnimationCurve animationCurve_t = new AnimationCurve(settings.animationCurve.keys);

        float minV = float.MaxValue;
        float maxV = float.MinValue;

        float[,] falloffMap = null;

        if (settings.useFalloff)
        {
            if (falloffMap == null)
            {
                falloffMap = fallofGenerator.GenerateFalloff(meshSettings.numberVerticisPerLine + 2, settings.FalloffBlur, settings.FalloffSize);
            }
        }

        float[,] valuse = PerlinNoise.GeneratorNoise(meshSettings.numberVerticisPerLine + 2, meshSettings.numberVerticisPerLine + 2, settings.noiseSettings, center);

        //Erode
        valuse = HightMap.ConwertTabBack(Erosion.Erode(HightMap.ConwertTab(valuse, meshSettings.numberVerticisPerLine + 2), settings, meshSettings, settings.erosionShader, 1), meshSettings.numberVerticisPerLine + 2);



        for (int i = 0; i < meshSettings.numberVerticisPerLine + 2; i++)
        {
            for (int j = 0; j < meshSettings.numberVerticisPerLine + 2; j++)
            {
                if (settings.useFalloff)
                {
                    valuse[i, j] = Mathf.Clamp(valuse[i, j] - falloffMap[i, j], 0, 1) * animationCurve_t.Evaluate(valuse[i, j]) * settings.heightMultiplayer;
                }
                else
                {
                    valuse[i, j] *= animationCurve_t.Evaluate(valuse[i, j]) * settings.heightMultiplayer;
                }
                if (valuse[i, j] > maxV)
                {
                    maxV = valuse[i, j];
                }
                if (valuse[i, j] < minV)
                {
                    minV = valuse[i, j];
                }
            }
        }



        return(new HightMap(valuse, minV, maxV));
    }
Example #7
0
    public void OnHeightMapReceived(object heightMapObject)
    {
        heightMap = (HeightMap)heightMapObject;
        var       input = MatrixToList(heightMap.values);
        Stopwatch st    = new Stopwatch();

        st.Start();
        var output = erosion.Erode(input, heightMap.values.GetLength(0), 70000);

        st.Stop();
        using (System.IO.StreamWriter file =
                   new System.IO.StreamWriter(@"C:\Users\patyu\Desktop\test.txt", true)) {
            file.WriteLine(st.Elapsed);
        }
        heightMap.values = ListToMatrix(output);
        mapReceived      = true;
        UpdateTerrainChunk();
    }
    void Update()
    {
        //Debug.Log("DropCount: " + Counter);

        if (Counter <= 128 * 512)
        {
            for (int i = 0; i < 128; i++)
            {
                ED.Erode(ref HData, HeightMapSize, 100);
                Counter++;
            }
            Timer += Time.deltaTime;
        }
        else if (!Finished)
        {
            Debug.Log("Finished Time: " + Timer);
            UpdateMeshHeight();
            Finished = true;
        }
    }