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