36 lines
1.1 KiB
C#
36 lines
1.1 KiB
C#
using UnityEngine;
|
|
|
|
namespace Assets.Common
|
|
{
|
|
public class PerlinNoiseGenerator
|
|
{
|
|
public float Scale { get; set; } = 0.001f;
|
|
public Point Offset { get; set; } = new Point(0, 0);
|
|
public int Iterations { get; set; } = 8;
|
|
public float Decay { get; set; } = .7f;
|
|
public float Lacunarity { get; set; } = 1.71f;
|
|
|
|
public double GetValue(Point position)
|
|
{
|
|
var amplitude = 1.0;
|
|
var scale = Scale;
|
|
var result = 0.0;
|
|
|
|
for (int i = 0; i < Iterations; i++) {
|
|
result += amplitude * Calculate(position, scale);
|
|
|
|
amplitude *= Decay;
|
|
scale *= Lacunarity;
|
|
}
|
|
|
|
return Mathf.InverseLerp(0.38f, 0.48f, (float)(result / ((1 - System.Math.Pow(Decay, Iterations)) / (1 - Decay))));
|
|
}
|
|
|
|
private double Calculate(Point position, float scale)
|
|
{
|
|
var final = (position + Offset) * scale;
|
|
|
|
return Mathf.PerlinNoise((float)final.x, (float)final.y);
|
|
}
|
|
}
|
|
} |