The idea is to make a pleasing "swooping" curve. It creates some number of random points simplex noise [0], sorts them using Hilbert sorting [1], then connects them with a hobby curve [2] [3].
Simplex noise is akin to Perlin noise, and is often used (imo) in these contexts to create spatially correlated random points.
Hilbert sorting is the one I hadn't heard of but the idea is simple enough: overlay a Hilbert curve, see where the points maps to, order them by their order on the curve. You can choose a resolution for the Hilbert curve recursion and use a fast spatial to index lookup to find the index order. Hilbert curves have the property of "locality", so that points near in embedded space map to nearby points in index space, and vice versa, so nearer points in 2d/3d tend to be nearer points in the 1d index traversal, giving you a better sort order than just choosing them at random.
Hobby curves are like Bezier curves but provide more "human-pleasing" curves by making trying to enforce a curvature connectivity constraint instead of just a differentiable constraint.
Nice article!
The idea is to make a pleasing "swooping" curve. It creates some number of random points simplex noise [0], sorts them using Hilbert sorting [1], then connects them with a hobby curve [2] [3].
Simplex noise is akin to Perlin noise, and is often used (imo) in these contexts to create spatially correlated random points.
Hilbert sorting is the one I hadn't heard of but the idea is simple enough: overlay a Hilbert curve, see where the points maps to, order them by their order on the curve. You can choose a resolution for the Hilbert curve recursion and use a fast spatial to index lookup to find the index order. Hilbert curves have the property of "locality", so that points near in embedded space map to nearby points in index space, and vice versa, so nearer points in 2d/3d tend to be nearer points in the 1d index traversal, giving you a better sort order than just choosing them at random.
Hobby curves are like Bezier curves but provide more "human-pleasing" curves by making trying to enforce a curvature connectivity constraint instead of just a differentiable constraint.
[0] https://en.wikipedia.org/wiki/Simplex_noise
[1] https://en.wikipedia.org/wiki/Simplex_noise
[2] https://www.jakelow.com/blog/hobby-curves
[3] https://github.com/vlad-x/hobby-curves