Ever since I first saw Doom and its contemporaries, I wanted to learn how to make my own 3D engine, to understand how these amazing images could appear on my screen. A friend of my brother's introduced me to Doom by showing me how I could make my own maps with DoomCAD and Doomed. This was a fascinating start that appealed to my creativity but I certainly had a long road ahead of me before I could understand computer graphics.
I was a fairly good student, getting As and Bs for the most part. My interest in game development and particularly 3D rendering helped make my choices for college too. I started college early as a dual enrollment student, and was even able to take OpenGL programming classes before finishing high school. I learned a lot in my college years, but many of the things I learned wouldn't click for me until much later. For 8 years after college I would think 'I want to make an engine'. I'm a very slow paced person. In that time, I got my first and 2nd game development jobs, as well as other jobs before and after. But then, there was Unity.
Up until that time, my encounters with game engines usually went a little like this: 'Okay, it's great for that game, but will it work for MY game idea?'. Before college I would toy around with things like the original Unreal here and there. But Unity was different than those experiences. It felt more like a new programming language and specialized game IDE. I spent 7+ years using Unity, across dozens of game projects both professional and personal. Unity really can be great, and while I think it's really easy for a programmer to learn to use compared to other engines, its ease comes at the cost that it's difficult to use to it's full potential. Unity has a bad reputation I think due more to inexperienced users than the engine itself.
Recently I got a new job. In this job I'm learning to use Unreal 4. As game creation tool, it is much improved over past experiences with older versions. However, like Unity, it still has lots of pros and cons. Things like blueprints are actually pretty awesome, something I never thought I'd say of visual scripting in a game engine.
Ultimately, learning Unreal is what sparked my interest in making my own engine again. I have a lot more experience making games now, and was able to delve really deeply with Unity thanks to my last job. I don't want to make an engine just because I can though. I want to have concrete reasons for doing it, after all Unity and Unreal can both be extended and each offer great benefits.
The last factor in the puzzle comes along: a new wave of single-board computers. The current Raspberry Pi is a pretty darn capable computer, and to my knowledge, there's no support from the two aforementioned game engines. I have seen plenty of source ports available for older game engines such as Doom, Duke Nukem 3D and Quake. And that's great too, people could certainly build their own game off of them, which is something I was considering doing myself.
A little more than a year ago I got a Raspberry Pi. I started looking into what I could do to make a game on it, keeping it somewhat relevant to my skills and job. Part of what that meant is making something I could easily port and work on between my primary computers as well as on the Raspberry Pi itself. This is when I found SDL. It is a great piece of software, offering a wide array of device support, and giving a great set of features that would be a royal pain to port, like input support, window handling, etc. At this time I'm still thinking 'Oh, I'll just do a quick 2D game'. That could've been fine, but I've never been nearly as excited about working on a 2D project as I have been about 3D, so I ended up setting that project aside. Fast forward to about 2 months ago, and I ordered a new single-board computer device, the GameShell. I'm now bringing all my past experiences together and learning a ton of new things to make a 3D game engine to run on this tiny little device. It is the best feeling I've had working on something in over a decade. I'm really excited to share what I can about it!
Here's a sample of my software renderer in action!