Graph Based Tree Rendering with Vulkan
~ 2 Minute Read.
When I talk about my many past projects I often entirely forget to mention the ones I did at the University of Konstanz. But in the six years I’ve been there up to now, there were some fun projects there, too, of course.
One of those was my bachelor’s project, which was one of the many attempts of trying to combine passion with University. To have an excuse to work on Vukan support in Magnum, I got the opportunity to work on some graph based tree rendering and investigate how Vulkan would impact the performance. “Graph based” meaning that I loaded a set of nodes and edges from an XML format using pugixml (to replace the QtXML based loader they already had), sent that graph data to the GPU where the mesh for the leaves and the branches was generated on the fly. Storing the graph data instead of the mesh can not only be more efficient in terms of storage, but is advantageous for simulation and dynamic LODs.
I basically reimplemented the existing algorithm in Vulkan, meanwhile wrapping parts I needed in a Magnum style API 1. As the final result was not amazing, I also played around with other optimization techniques like pre-Z passes.
Funnily enough, this project pretty much started shortly after the release of Vulkan and I did my final presentation of it on the day Vulkan turned 1. (Was a great anecdote to start off the presentation with ;-) )
Some great Vulkan Resources I can recommend: the spec, the “Vulkan Programming Guide” 2 and the Sascha Willems Vulkan repository on GitHub.
Written in 25 minutes, edited in 15 minutes.
- 1
- Together with an accompanying example
- 2
- “Vulkan Programming Guide” on Amazon