Vibe Engineering Graphics Pipelines
The Fish Eye Lens in Vulkan
Since this Homestar Runner short came out over ten years ago, you wouldn’t just say it’s lived in my mind rent free—it’s more like it has squatter’s rights.
Within this #1 Jam, Strong Bad asserts that you can make anything look cool with a Fish Eye Lens; but this is more than just memes, it’s established “Vibe Engineering” practice. Vibe Engineering (distinct from Vibe Coding) has one of its most important empirical demonstrations in Missy Elliot’s classic video for The Rain, where she utilized the very technique that Strong Bad emulates. Through this lens, she manages make a costume that is essentially an inflated garbage bag an iconic exploration of dynamic movement.
There’s one more thing in particular to note that Strong Bad and Coach Z mention: fish eyes used to be expensive, but now? Not so much. Indeed, many creative works have groundbreaking creative works have grown out of the technology to create them becoming cheaper and more accessible. In a categorical line of creative thinking, I’ve been exploring how to use the massive amount of modern graphics computing power for more creative game dynamics than just hyperrealism.
Thus, in the name of Vibe Engineering, I have sought out to create a fish eye lens using the Vulkan graphics library.
But before I even began to work on my new lens, I would need something to look at. Strong Bad and Coach Z provide a plethora of examples about how to make anything look cool, including the most innocuous items: tan pants, country dish towels…and tax papers. Since it’s Tax Season, I thought I’d use the latter example to add a little festivity.
As our starting point, here’s what a plain rendering of one such tax paper looks like:
I will diving deeper into the challenges of creating a fisheye lens in Vulkan over the next couple weeks. For an overview: it uses a similar technique to VR lens correction. We have two separate graphics pipelines: one to render the scene, and one to apply distortion over the full render finished previously. Using a cubemap prevents excessive quality loss over the parts of the model with enlarged detail. You can view the github repository here. But for now—behold!
What do you think? Is it cooler?



