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, 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.
Luna is purely written as an educational experiment, and I have no intentions of ever releasing it commercially.
Luna has been built and tested using Clang and Windows. While I endeavor to keep things platform-agnostic and compliant, other compilers have not been tested and may produce errors.
- CMake (Verion 3.21 or greater)
- Vulkan SDK (Version 1.3.xxx.x or greater)
cmake -S . -B Build
cmake --build Build --parallel 8
- The final executable can be found in the
Build/Bin
folder. - The editor expects to be run from the root of the repository. Otherwise it will fail to load assets.
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 and projects 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. A lot of the way I use and abstract Vulkan has been inspired from him.
- 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.
- Flax Engine - For providing a high-quality, open-source engine that I can look to as an example of how to architect the systems needed to make a game engine run.
- Yan Chernikov (TheCherno) - For his work on the Hazel engine (and the private development branch of Hazel). I was able to learn a lot about engine architecture and asset management from this example.
- 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.