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.
As this is a learning project meant for my benefit only, I will not accept pull requests.
Luna is built with CMake. Ensure you have the latest CMake installed, as Luna requires at least version 3.21.
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.
- 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.