Another attempt at stippling with a more basic relaxation approach but using multiple dot sizes to add texture.
- Position starting points with rejection sampling, using the grayscale image as the density function.
- Use Lloyd's algorithm to get a relaxed Voronoi diagram from the starting points.
- Size the dots based on the darkness of the pixel at their position, then shrink them as much as necessary to avoid collisions - this could be done all at once but it seems to produce some splotchy artifacts, so instead they're shrunk a little bit at a time.
The heavy computation is done in a web worker to avoid locking up the page, and takes about 15-20 seconds to complete.