I have been an avid user of the Unity game engine since 2010 and am very comfortable working with in it. You may wonder why I am bothering writing my own engine. Well, I’ve always been interested in what makes a game engine actually tick and with my years of experience shipping titles, I have a good idea of what components are necessary and I wanted to see what an engine of my own creation would look like. That, and I’ve had a half-read copy of Game Engine Architecture staring at me from my library shelf for far too long.
I am now most of the way through the book and have a functioning engine that I am extending nearly every day. You can see where the project is at any time too because I have the code posted on my GitHub account.
What is the goal of this?
Well, first and foremost this is a learning experience for me. It’s so easy nowadays to whip together a game with no appreciation for (or knowledge of) the software that powers it. I want to understand what makes a game engine work at an atomic level. Well, actually not exactly at the atomic level. I have started this project a few times before and it fell apart because I felt the need to understand every concept inside and out. If you have been as audacious as me, you will know that there is far too much that goes into a game engine to know every piece of it. Quaternions are a beast in and of themselves and is responsible for putting a halt to developing my previous engines. The positive now is that I know enough about Quaternions to be dangerous!
Another reason for this project is for me to get comfortable programming in the open. I have wanted to be more transparent about game development in the past, but I get comfortable using private repositories. While I am not making this engine specifically for a game, I think this still fits the bill. I encourage anyone interested in game development to poke around my code base on GitHub and even fork your own copy of it.
I started this project a little over a month ago and spending my spare time adding more and more features. Now I have an engine with an OBJ loader, texture rendering, basic terrain generation, simple lighting, skyboxes and even render textures! Of course there is more to it than just that. I started creating a YAML based config system for the engine that I can modify without needing to recompile code.
There still is plenty more features I plan on adding to the engine including scene serialization and VR support which you will see them added over time. I will be posting updates to this blog of features that I add to the system and where I plan on taking it. So keep an eye on my blog to see how this project is developing or poke around the codebase at your leisure.