I'm getting consistent “Fatal error: Array index is out of range” crashes in GradientNoise2D's evaluate(_ x:Double, _ y:Double) at gradient.swift on line 540.
The issue seems to be that the staticGradientNoise2D.points is initialized to have 32 members on line 354 , then when evaluate(…) is called, base_vertex_index:Int ends up with value of 32 (Int((2*sample_uv_rel.y - sample_uv_rel.x - Double(a))*0.5 + 1) << 4 with sample_uv_rel = (1, 0) & a = 0 → Int((2*1 - 0 - Double(0))*0.5 + 1) << 4 → Int(2*0.5 + 1) << 4 → Int(2) << 4 → 32, on line 457).
Finally on line 540, the code attempts to iterate in a for loop over GradientNoise2D.points[base_vertex_index ..< base_vertex_index + 4]… so GradientNoise2D.points[32..<36] when GradientNoise2D.points is only 32 elements long.
I don't really know how this noise math is meant to work, so I can't speculate as to what a fix should be other than… missing modulus? IDK.