public Task ModifyVertices(SQT.Core.Context context, SQT.Core.Node node, CancellationTokenSource cancellation) { return(Task.Factory.StartNew(() => { for (int i = 0; i < node.positions.Length; i++) { Perlin.PerlinSample sample = GetSample(node.positions[i]); node.positions[i] += node.normals[i] * sample.value; node.normals[i] = (node.normals[i] - sample.derivative).normalized; } })); }
Perlin.PerlinSample GetSample(Vector3 position) { float strength = this.strength; float frequency = this.frequency; Perlin.PerlinSample sum = GetSample(position, frequency) * strength; for (int i = 1; i < octaves; i++) { strength *= persistence; frequency *= lacunarity; Perlin.PerlinSample sample = GetSample(position, frequency) * strength; sum += sample; } return(sum); }
public Perlin.PerlinSample GetSample(Vector3 position) { float strength = this.properties.strength; float frequency = this.properties.frequency; Perlin.PerlinSample sum = this.GetSample(position, frequency) * strength; for (int i = 1; i < this.properties.octaves; i++) { strength *= this.properties.persistence; frequency *= this.properties.lacunarity; Perlin.PerlinSample sample = this.GetSample(position, frequency) * strength; sum += sample; } return(sum + 1f); }
Perlin.PerlinSample GetSample(Vector3 position, float frequency) { Perlin.PerlinSample sample = perlin.Sample(position * frequency); sample.derivative *= frequency; return(sample); }