Back in November I decided to take a step back from making a game in Unity. One of the major causes of this was how unity dealt with external scripting (like those used for mods). Before Unity 5 was released, the only option to being able to extend Unity to make it do what I want in a nice way, was to pay the $1,500 Pro License fee for access to native libraries. Its an amazing engine with many great features that I could never make myself, but I felt restricted by it.
I had previously attempted to write my own DirectX 11 engine back in April last year, using SharpDX in C#, but for whatever reason I stopped. However, this is what I went back to after leaving Unity and haven’t stopped working on it since. Almost all of my free time goes into working on my game engine.
Here are a list of the features it has after around 3 months of “spare-time” work on it:
- Full DX11 shader support (Vertex, pixel, geometry, hull, domain and compute)
- Multi-threaded content management – capable of loading multiple files at once, in separate threads, without slowing the game down (much!)
- Deferred Renderer – I’ve recently been showing a lot of progress for this on twitter
- Client-server networking integration – For multiplayer! Lidgren framework has done most of the heavy lifting here
- Full audio playback
- Full keyboard and mouse support – including the extra buttons that a lot of games seem to forget about! *shakes fist*
- Basic scene-graph system – this is still a WIP. It has no culling of any kind yet
- Logitech G15/19 keyboard support – I would like more games to have this, so its only right that my own does too
- UI system + editor
- Model viewer/editor tool
- Sprite sheet editor
- Editor framework – I can plug new tools into the editor in a relatively short time
There are lots of smaller things I could go on listing but many of them are things you’d expect to come along with the ones listed above anyway.
Features like FMOD studio integration, mod management and physics will come later down the line, but what I really want to get back to soon is the voxel system I had working in Unity. It worked really nicely, and used as much multi-threading as Unity would allow, but it wasn’t enough. I want to be able to load up large amounts voxel objects very fast, sometimes generated on the fly. It can and will be done!
Is it worth it?
If you’ve made it this far, you’re probably wondering why in the seven kingdoms am I still making my own engine, when 2 perfectly capable and fully-featured engines are available, for free?
At the time I switched from Unity, I had no idea Unity 5 would provide every single feature free of charge. Making you own engine however, has some very tasty perks. You never have to worry about license fees, ever, except for any 3rd party tech you decide to license. You also have complete access to the engine source code, forever (you do backup your work right?). So the answer is, yes. For me it was worth it.
I believe that making your own engine is a massively invaluable learning experience. If you’re looking to get into the industry as an engine programmer, you will probably be expected to have attempted this at least once. But even if you’re not, you can learn a massive amount of knowledge about how a game works and all of the various technologies, terminologies and techniques that come with it.
Building your own engine doesn’t come without a cost though. It’s a huge time sink and you may have to forgo features like cross-platform support to keep it manageable. You also have to know what your game(s) will need before you’ve even started the engine. You wouldn’t build a V8-engine if you’re only going to make a small motorcycle would you?
To conclude this epically long post, if you just want to make games and you’ve never finished a game before (even if its pong!) then use an engine like Unity or Unreal. Do not attempt your own game engine. However, if you want gain an understanding on how games actually work, rather than just making them, then definitely go ahead and try making your own engine. But keep in mind, it involves a humongous amount of constant research, trial & error and most of all, screwing up. 🙂