Learning about game engine architecture

Posted on 2020-12-27

Over the past few years I’ve been fortunate to work on several big video games. I’ve mostly worked on gameplay, such as the implementation of parts of the “game feel” for characters and interactions, or the frameworks that power game modes and rules. In my spare time I’ve sometimes wanted to learn more in other areas of software engineering for games, such as lower level engine architecture or rendering. Some of that learning has gone into a project called freeplanet (naming things is hard).

freeplanet is written from scratch in C++. It’s not exactly a game, as it doesn’t have much in the way of gameplay (yet), but it doesn’t have the authoring capabilities or editor of a full game engine. To give myself some direction, I aimed towards making a procedural sandbox inspired by the likes of Minecraft and No Man’s Sky.

freeplanet screenshot

Here’s some of the main features of this not-game so far:

  • 3D rendering with OpenGL.
  • An architecture for large game worlds which supports loading/unloading parts of them on the fly.
  • Basic 3D object collisions.
  • Randomly generated spherical planets.
  • Creation and destruction of smooth 3D volumetric terrain.
  • Randomly generated and spawned trees.
  • Particle effects.
  • A 2D user interface.
  • Keyboard and mouse controls, config files, an in game console, 3D and 2D debug displays, etc. etc.

Working on each of these things taught me a bunch and presented their own unique challenges. You can see some of them come together in this video:

If you’re especially keen, builds of freeplanet are available to try out for Linux and Windows. For those who are feeling more technical, you can also check out the code. (It’s available under a free software license.)

In the future, there are loads of other areas I’d like to learn more about, and implement into the project. Some examples:

  • Serialization and save games.
  • Networking and client server architecture.
  • Improved procedural generation, such as planets with distinct biomes and more variation in plants.
  • Audio.
  • Skeletal animation.

You know, nothing big 😛

So far freeplanet is a learning exercise, a tech demo, and a sandbox. What I’ll make of it in future remains to be seen 🙂

Posted on 2020-12-27