Ejemplo n.º 1
0
        public static float Sum(NoiseMethod method, Vector3 point, PerlinNoiseSettings settings)
        {
            var   frequency = settings.frequency;
            float sum       = method(point, frequency);
            float amplitude = 1f;
            float range     = 1f;

            for (int o = 1; o < settings.octaves; o++)
            {
                frequency *= settings.lacunarity;
                amplitude *= settings.persistence;
                range     += amplitude;
                sum       += method(point, frequency) * amplitude;
            }

            return(sum / range);
        }
Ejemplo n.º 2
0
        public static Texture2D PerlinNoise(int resolution, PerlinNoiseSettings settings)
        {
            var texture = new Texture2D(resolution, resolution, TextureFormat.RFloat, false, true);

            texture.name       = "Perlin Noise Texture";
            texture.wrapMode   = TextureWrapMode.Clamp;
            texture.filterMode = FilterMode.Trilinear;
            texture.anisoLevel = 9;

            var method = NoiseHelper.noiseMethods[(int)NoiseMethodType.Perlin][2];

            var point00 = new Vector3(0, 0);
            var point10 = new Vector3(1f, 0);
            var point01 = new Vector3(0, 1f);
            var point11 = new Vector3(1f, 1f);

            var stepSize = 1f / resolution;

            for (var y = 0; y < resolution; y++)
            {
                var point0 = Vector3.Lerp(point00, point01, (y + 0.5f) * stepSize);
                var point1 = Vector3.Lerp(point10, point11, (y + 0.5f) * stepSize);
                for (var x = 0; x < resolution; x++)
                {
                    var point  = Vector3.Lerp(point0, point1, (x + 0.5f) * stepSize);
                    var sample = NoiseHelper.Sum(method, point, settings);
                    sample = sample * 0.5f + 0.5f;

                    texture.SetPixel(x, y, new Color(sample, sample, sample));
                }
            }

            texture.Apply();

            return(texture);
        }