I'm working on a noise function for terrain. It solves for height for any Vector2 two by interpolated to ridges in 3D space that I've precomputed using distance. The ridges are Bezier curves, but because finding the distance to them is too expensive, I sample from the curve for a few points for each ridge.
I couldn't get over this last problem- so I straightened all the ridge curves which looks fine from the ground but awful from high up. The problem is my range_lerp() function causes fractures on the inside of ridge curves where in 2d space one ridge line transitions to be closer than the last for the interpolation. If I could iron them out my research results would actually be pretty decent, seeing as I'm doing this at 1/6th the speed of Simplex and getting non-uniform features.
These fractures, or bumps, even form when I fix all ridge heights to be equal as shown above. My code for final height calculation:
func lerpFromRidgeLine(pos : Vector2, peak : MountainPeak): #pos being x,z position, peak holds ridge points & other info
var p = getClosestPointOnRidgeLine(pos) #p a Vector3
var dist = Vector2(p.x,p.z).distance_to(pos)
return range_lerp(dist, 0, peak.baseRadius, p.y, 0)
After telling myself for half a year I could figure this out if I tried long enough, it's time to ask for help.