public SplineSegment ProcessSpline(SplineSegment spline) { spline.Recalculate(true); var config = Configuration.GetConfig <Config>(); if (config == null) { return(spline); } var rand = new Random(NodeConnection.ThisNode.Seed); float accum = (float)rand.NextDouble() * (rand.Flip() ? -1 : 1); for (var i = 0; i < spline.Points.Count; ++i) { var p = spline.Points[i]; var tangent = spline.GetTangent(p.NaturalTime).normalized; var offset = tangent * accum * config.AmplitudeCoefficient; p.Position = Vector3.Lerp(p.Position, p.Position + offset, config.Amplitude.Evaluate(p.UniformTime)); spline.Points[i] = p; var flip = rand.NextDouble() > 0.5 ? 1 : -1; accum += config.Frequency * (float)rand.NextDouble() * flip; } return(spline); }