Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public static class Noise {
- //lacunarity - describe the construction of fractal
- public static float [,] GenerateNoiseMap(int mapWidth, int mapHeight, int seed, float scale, int octaves, float persistance, float lacunarity, Vector2 offset)
- {
- float[,] noiseMap = new float[mapWidth, mapHeight];
- System.Random prng = new System.Random(seed);
- Vector2[] octaveOffsets = new Vector2[octaves];
- for (int i = 0; i < octaves; i++)
- {
- float offsetX = prng.Next(-100000, 100000) + offset.x;
- float offsetY = prng.Next(-100000, 100000) + offset.y;
- octaveOffsets[i] = new Vector2(offsetX, offsetY);
- }
- if(scale<=0)
- {
- scale = 0.001f;
- }
- float maxNoiseHeight = float.MinValue;
- float minNoiseHeight = float.MaxValue;
- for (int y = 0; y < mapHeight; y++)
- {
- for (int x = 0; x< mapWidth; x++)
- {
- float amplitude = 1;
- float frequency = 1;
- float noiseHeight = 0;
- for (int i = 0; i < octaves; i++)
- {
- float sampleX = x / scale * frequency + octaveOffsets[i].x;
- float sampleY = y / scale * frequency + octaveOffsets[i].y;
- float perlinNoise = Mathf.PerlinNoise(sampleX, sampleY) * 2 - 1; //Returns value between 0.0 and 1.0
- // noiseMap[x, y] = perlinNoise;
- noiseHeight += perlinNoise * amplitude;
- amplitude *= persistance;
- frequency *= lacunarity;
- }
- if(noiseHeight > maxNoiseHeight)
- {
- maxNoiseHeight = noiseHeight;
- }
- else if (noiseHeight < minNoiseHeight)
- {
- minNoiseHeight = noiseHeight;
- }
- noiseMap[x, y] = noiseHeight;
- }
- }
- for (int y = 0; y < mapHeight; y++)
- {
- for (int x = 0; x < mapWidth; x++)
- {
- noiseMap[x, y] = Mathf.InverseLerp(minNoiseHeight, maxNoiseHeight, noiseMap[x, y]);
- }
- }
- return noiseMap;
- }
- }
Advertisement