A 3D Vulkan renderer developed as a side project
Solo project
Primarily focused on programming Vulkan as well as slight engine features.
~200 hours of work over the course of 4 months
Vulkan framework and shaders for Blinn-Phong rendering pipeline
Normal mapping and lighting via point lights
Omnidirectional shadow mapping for a single point light in the scene
Kartoshka Engine is a Vulkan renderer that I have worked on in the 2nd and 3rd year of my study in Breda University of Applied Sciences in order to learn about the API and to better understand some rendering techniques. A total of around 200 hours were put into the project, including the research into Vulkan to understand the implementation details. The project was developed from scratch in that time, only utilizing a handful of libraries to allow me to focus on working with Vulkan. The most notable of those libraries were Dear ImGui for immediate mode graphical UI, stb-image for texture loading, and fx-gltf for easier loading of GLTF files.
The initial goal of the project was to learn the API by loading and rendering out Sponza in it, but I continued using it as a sandbox in which I can prototype rendering techniques in order to better understand them and their implementation. Because of that, in its current state the project has the following features:
Most of the work put into the project was to develop a framework to simplify the usage of Vulkan for myself, which in made it necessary to develop a solid understanding of many concepts in Vulkan, such as the synchronization and memory management which are significantly different to DirectX 12, which I was already well accustomed to at the time. Later on I also added the lighting using point lights and the normal mapping for surfaces. The omnidirectional shadow mapping was implemented months later as a means to practice my understanding of linear algebra and matrix math due to the list of transformations that need to be done when building and then sampling the shadow maps.
The development of this renderer has been instrumental to my understanding of Vulkan. The code of the project can be found on GitHub, although as it has been entirely a free-time project I have not put considerable effort into maintaining the code quality throughout the codebase.