public static float[] noise(Vector3[] vertices, Vector3 pos, ref NoiseVars nVars) { Random rnd = new Random(nVars.Seed); Vector2[] offsets = new Vector2[nVars.Octaves]; float[] values = new float[vertices.Length]; for (int i = 0; i < nVars.Octaves; i++) { offsets[i] = new Vector2(rnd.Next(-10000, 10000), rnd.Next(-10000, 10000)); } for (int i = 0; i < vertices.Length; i++) { Vector2 point = new Vector2(vertices[i].x + pos.x + offsets[0].x, vertices[i].z + pos.z + offsets[0].y); float frequency = nVars.Frequency; float sum = Mathf.PerlinNoise(point.x * frequency / 10000, point.y * frequency / 10000); float amplitude = 1f; float range = 1f; for (int j = 1; j < nVars.Octaves; j++) { frequency *= nVars.Lacunarity; amplitude *= nVars.Persistence; range += amplitude; point = new Vector2(vertices[i].x + pos.x + offsets[j].x, vertices[i].z + pos.z + offsets[j].y); sum += Mathf.PerlinNoise(point.x * frequency / 10000, point.y * frequency / 10000) * amplitude; } values[i] = sum / range; } return(values); }
private static void AddNoise(ref TerrainVars tVars, ref NoiseVars nVars, ref MeshData mesh, Vector3 pos) { Vector3[] vertices = mesh.vertices; float height = tVars.Height; float[] noise = NoiseGenerator.noise(vertices, pos, ref nVars); for (int i = 0; i < vertices.Length; i++) { Vector3 currentVertex = vertices[i]; vertices[i].y = (noise[i] * 2 - 1) * height; } mesh.vertices = vertices; }
private static void AddNoise(ref TerrainVars tVars, ref NoiseVars nVars, ref MeshData mesh, Vector3 pos) { Vector3[] vertices = mesh.vertices; Color[] colors = new Color[vertices.Length]; Gradient gradient = tVars.gradient; float height = tVars.Height; float[] noise = NoiseGenerator.noise(vertices, pos, ref nVars); for (int i = 0; i < vertices.Length; i++) { Vector3 currentVertex = vertices[i]; colors[i] = gradient.Evaluate(noise[i]); vertices[i].y = (noise[i] * 2 - 1) * height; } mesh.vertices = vertices; mesh.colors = colors; mesh.RecalculateNormals(); }
public void AddHeights(ref TerrainVars tVars, ref NoiseVars nVars, Vector3 pos) { float height = tVars.Height; Vector3[] vertices = this.vertices; AnimationCurve curve = new AnimationCurve(tVars.curve.keys); // Get noise float[] noise = NoiseGenerator.noise(vertices, pos, ref nVars); for (int i = 0; i < vertices.Length; i++) { noise[i] = Mathf.Clamp01(curve.Evaluate(noise[i])); vertices[i].y = (noise[i] * 2 - 1) * height; } // Save mesh values this.vertices = vertices; }
public void AddHeightsAndColors(ref TerrainVars tVars, ref NoiseVars nVars, Vector3 pos) { Vector3[] vertices = this.vertices; Color[] colors = new Color[vertices.Length]; Gradient gradient = tVars.gradient; // Color keys float[] keys = gradient.colorKeys .Select(k => k.time).ToArray(); i1 = new float[vertices.Length]; i2 = new float[vertices.Length]; AnimationCurve curve = new AnimationCurve(tVars.curve.keys); float height = tVars.Height; // Get noise float[] noise = NoiseGenerator.noise(vertices, pos, ref nVars); for (int i = 0; i < vertices.Length; i++) { float cNoise = Mathf.Clamp01(curve.Evaluate(noise[i])); colors[i] = gradient.Evaluate(cNoise); vertices[i].y = (cNoise * 2 - 1) * height; try { if (cNoise < keys[1]) { i1[i] = 0; } if (cNoise > keys[0] && cNoise < keys[3]) { i2[i] = 1; } if (cNoise > keys[2] && cNoise < keys[5]) { i1[i] = 2; } if (cNoise > keys[4] && cNoise < keys[7]) { i2[i] = 3; } if (cNoise > keys[6]) { i1[i] = 4; } } catch (IndexOutOfRangeException) { }; } // Save mesh values this.vertices = vertices; this.colors = colors; RecalculateNormals(); SaveIndexes(); }