Luna is the latest (and hopefully greatest) pet project of mine, in my efforts to understand how modern game engines work. I've been an avid gamer for most of my life, and I've always been fascinated by how graphics and computing technology has come together to make such incredible experiences.
I'm also curious at heart, and I would love nothing more than to take those game engines and tear them apart to see how they tick. But more than that, I want to understand these programs on a more fundamental level, and the best way to do that is to create my own.
This repository contains the combined efforts of the past few years of study, experimentation, and tribulations I've gone through on my journey. The code contained within is not going to be optimal, or even usable at times, but I leave it here in the hopes that someone like myself may see it and find some amount of inspiration, or even learn from it.
As this is a learning project meant for my benefit only, I will not accept pull requests.
Luna is built with CMake, and requires at least version 3.21. Ensure you have the Vulkan SDK installed, at least version 1.3.204 or later. I recommend installing the optional third-party libraries along with the SDK, as this project will search for them rather than building them in some cases.
Luna is built with Clang version 13, and has not been tested with other compilers.
While the libraries used by Luna are mostly cross-platform, effort is focused on developing for Windows, and bugs/crashes/compiler errors may appear on Linux or Mac systems.
My journey has been long and hard, and it would not be possible without the inspiration and help of others in the game development community. Below, in no particular order, are just a few of the people I would like to extend thanks to, or credit for code I've used along the way in this project.
- Hans-Kristian Arntzen (Themaister) - For his work on the Granite engine, and several helpful blog posts. Most of this project's Vulkan implementation is taken from Granite.
- Travis Vroman (travisvroman) - For his work on the Kohi engine. His return to the basics of C and hand-rolled libraries was inspiring and informative, and while I've chosen to stick with C++ for my project, I have learned a lot about low-level implementations from this series.
- Matthew Albrecht (mattparks) - For his work on the Acid engine. The clean, modern C++ infrastructure he developed was instrumental in helping me work out this engine's structure.
- Panos Karabelas (PanosK92) - For his work on the Spartan engine. The beautiful lighting and rendering techniques have driven me to strive for more, in the hopes I can one day match them.
- The Khronos Group (KhronosGroup) - For their work on the Vulkan API itself, as well as the glTF model format, KTX texture format, and sample models.