J. M. Stark

Custom Engine vs. Unity

Since finishing Vacuous half a year ago, I have been spending a lot of time learning and experimenting in the background for my next project. I bought and read through several books on game engine programming and real time graphics. Along with this, I did additional reading online about OpenGL, SDL, and other C++ game frameworks/libraries. The goal was to build a game from scratch entirely in C++. After six months of working on this part-time off and on, this is how far I got:

Blog Image 1

Game window. 3D renderer. Update loop. Input system. Entity-Component architecture. Mouse controls. Events. UI with buttons and text input. All of these basics are here amongst other things. These components came together to build this very basic stage editor. The game was being built on Windows with MinGW (with the intention of being easily portable due to using SDL for OS things). Honestly, I'm surprised I was able to make it this far. Along the way I had to do one major rewrite where I moved from a poorly thought out attempt to have a "data-oriented" architecture to a more traditional object oriented approach. It is a bad idea to pursue some of the fancier game engine magic on your first try.

I started to hit a wall though. Six months had passed with the last having been spent trying to build the UI components for the editor. The sheer scale of the project was finally getting to me. Not an ounce of gameplay had been created. The editor seemed like it was going to take the rest of the year to finish. Some performance tests began to reveal how naively engineered my update and rendering loops were. Research showed that the solutions would require heavy duty fixes and refactoring that would take another three to four months to implement. I should have started with several 2D projects first before going brashly into a full 3D rendered project, especially considering I could only work on the engine for two to three hours every day.

So I finally decided to return back to the idea of using a pre-existing engine. Since I'm fairly familar with Unity, I decided to pick that one up and see how quickly I could recreate the work I had done in my own engine.

It took three days and I had already gotten ahead:

Blog Image 1

The toolsets, asset pipelines, and pre-existing resources that a game engine like Unity or Unreal can provide make an astronomical difference in productivity. And having an understanding of what is under the hood now, using an existing engine is even easier. Despite my stupid pride wanting to create everything from scratch as some "great" engineering feat, what matters in the end is the game. If my tools of creation offer more productivity and time to experiment, I am more like to deliver the audience a good experience, which is all that really matters.

I might return to a custom engine to experiment with some more reasonable 2D ideas in the future. It would certainly provide more opportunities to learn. However, I have come to realize that my time is too limited to be spent reinventing something that thousands of other people have already created (and what they have made is far better than anything I can produce in my life time). So for the time being, my new project continues on with Unity as the engine. Once the editor is finished and some gameplay code gets created, I will begin to talk more about what I am making.

- J. M. Stark