LBG Stippling

An example of a photograph rendered with stipples

This project has gone through several iterations, which I intend to benchmark against each other one day. The aim of this project was to replicate the results of this paper and play around with extensions. My original implementation used Processing, which proved too slow to properly handle large images. I moved to C++ using a naive Voronoi calculation, then used this as an excuse to start learning Vulkan and switched to a compute shader. While the compute shader is far and away the fastest of these approaches, I likely could have rendered every image I wanted and then some on CPU in the time it took to set up headless Vulkan rendering. I’m sure I’ll use Vulkan again, though I’m equally sure I’ll be turning to existing bindings and libraries to accomplish this in the future. The raw speed of calculation can’t be overstated, however. Even on integrated graphics, computation time decreased by roughly an order of magnitude.