I am getting asked this a lot, why I decided to make my own engine in order to create Sapiens, and why I didn’t “just use Unity/Unreal/Godot etc.”
So rather than answer everyone individually, now I can point you all here!
a) The main reason is because I can.
I started making games in 2003. Unity didn’t exist then. There were a few engines around at that time, but the options weren’t as good as they are now. I would guess that the majority of people who made games did so from scratch, and every game I made in the early days used my own custom engine with OpenGL.
So when I sat down to start Sapiens, I did so with over 15 years experience making my own engines vs. zero years experience using Unity or Unreal. That alone is a pretty big factor! It would be crazy to throw all of that experience away unless I really had no other option.
I am also lucky enough to have the time to make my own engine. I don’t have any investors or publishers breathing down my neck wanting to see gameplay/content immediately. I have the funds from the successes of my previous games to be able to take my time with this game.
b) I’d rather know exactly how everything works
Using an engine means that large parts of what is going on are hidden in a black box. Even if you have source access, you didn’t write that code, and it can be hard to figure out how it works. Having written every line of code myself, I know exactly how it works, how best to use it, where to look when things don’t work. This benefit especially now that I am getting into the later stages of development really can’t be understated.
d) Sapiens is not normal
This is kind of a minor point compared to the others, but still worth mentioning.
The engines are extremely flexible, and I’m fairly certain I could have made Sapiens using them. However they are designed mostly towards fairly small worlds with static geometry. Sapiens with it’s earth-scale planet needs to have an engine with double precision all the way through. It needs a terrain generation system which can support extremely fast on-the-fly tessellation, in multiplayer, with modification support. It needs to create and render thousands of trees/rocks/plants/animals across the entire surface of a planet seamlessly as you explore, every one of them being able to be moved or removed.
I have no doubt that attempting to achieve all of this would have had me fighting with the engine every step of the way. It could have been done, but it would not have been as fun, and ultimately I would have written a whole lot of the same code, just in a different environment that I had less control over.
e) I enjoy it
This is probably the second biggest factor. I just really enjoy writing the engine code too. It feels good, it provides a nice variety of work through my day, and it’s just really rewarding, enjoyable work. I love my job.
Yeah but you’re wrong and I still think you’re crazy
There are definitely down sides too. It has taken me longer to get to working on gameplay than it would have. I had to spend months porting my renderer to Vulkan because the industry changed underneath me, Unity or Unreal would have given that to me for free. Cross platform support isn’t quite so easy. And there are no doubt other sacrifices I have made too.
If you think you’d be better off making a game in Unity, you’re almost certainly right. Creating even a 2D game engine is very hard, and it’s taken me 15 years to learn enough to be able to make this engine and game.
But for me, there is no doubt I made the right decision. The best solution is the solution that gets you out of bed in the morning.