Epoch is a game engine I've been working on in my free time since spring 2023 written in C++.

When I'm working on this engine I'm able to delve deeper into every feature I'm implementing, allowing me to learn more and to make sure it's working as I want, as there is no external deadlines.

The goal is to be able to use Epoch to create and maybe even release games.

Epoch is a game engine I've been working on in my free time since spring 2023 written in C++.

When I'm working on this engine I'm able to delve deeper into every feature I'm implementing, allowing me to learn more and to make sure it's working as I want, as there is no external deadlines.

The goal is to be able to use Epoch to create and maybe even release games.

When I worked on Aurora, a game engine I developed as part of my education at The Game Assembly, I mainly worked on the graphics so for this engine I have priorities the user experience of creating and exporting games.

Feature Highlights

When exporting the game all the necessary files are put it into a user defines folder in a runtime ready format. This includes serializing an asset pack, a binary file including all used assets, protecting the assets from being stolen and makes them faster to load in game.


In the project setting the user can set the applications name and icon which will be used when exporting the game.

Most games includes functionality specific to that game and there is different ways to address this.

Unity uses C#, allowing developers to add script files as assets relative to the Unity project.

Unreal Engine allows the developer to write scripts using C++ and by using there node scripting.


I chose to implement C# scripting, like in Unity, and it's very fast and easy to use. 

The prefab acts as a template from which you can create new object instances in the scene. They are created by dragging an entity from the hierarchy panel into the content browser.

This makes the process of creating scenes easier and allows easy creation of more complex entities during runtime.

I implemented physics using the PhysX library.


I've set up collision events to call functions in C#.

These events are:

  • OnCollisionEnter
  • OnCollisionExit
  • OnTriggerEnter
  • OnTriggerExit


Each collider component can be assigned a layers and layer masks can be used for scene queries to ignore, or collide with, specific layers.


Compound colliders can be created by having an entity with a rigid body component without a collider component. This entity will instead use all collider components attached to its children allowing the physics body to have more complex shapes. 


I plan to implement more features later on, including different joints and vehicles.

Physically-based Deferred HDR rendering.

Deferred rendering is the only supported rendering method but the plan is to add Forward+ as well.


Currently I'm using two major optimizations. These are frustum Culling and mesh instancing.

Meshes are sent to the renderer only if they are in the cameras view. The renderer automatically sorts all submitted meshes into lists so that it can render multiple of the same mesh in one go later on.


I'm using msdf-atlas-gen to generate font atlases used to render text. Text elements using the same font atlas gets batched together and drawn in one go.


I've added basic UI support to the engine, including images, buttons, checkboxes, and text. This implementation is basically a more refined and robust version of the UI I added to Aurora.


Shaders aren't pre-compiled but are instead compiled as the engine starts. This makes it very easy to automatically recompile a shader when the shader file is modified.

My main source of inspiration and resource is Hazel by Studio Cherno.

The engines logo was designed by my sister.