Epoch

Epoch is a game engine I'm working on during my free time. As I am primarily working on the engine at school, especially the graphical side, I have chosen to mainly work on the editor for my engine as for now. 

I've got big plans for this game engine and plan to use it later to create small games. Epoch also allows me to challenge myself in a way I am not able to while working on Aurora in school, as nobody depends on me finishing a feature fast and letting it "just work".

As I can sit and work on a feature until I'm happy with it, I can learn much more and take those features and copy them into Aurora.


Instanced rendering is rendering the same geometry multiple times in one draw call. This can dramatically increase performance depending on the scene as we aim for as few draw calls as possible. I accomplish this my sorting and keeping count of identical meshes and storing their position, rotation, and scale in a buffer so that I know where to render them later on. 

An image of 729 meshes being rendered in 1 draw call.

I'm using msdf-atlas-gen which generates a texture atlas and all the necessary data needed to render text from a font file. 

Similarly to instanced meshes I can utilize the fact that the geometry is the same for each characters, but in this case the geometry is so simple, just a quad, that I can batch together the geometry instead. While instanced rendering renders the same geometry multiple times, batching, in this case, takes all quads and make one "mesh" out of them.

As for now, text rendering is only supported as part of the 3D world, meaning no screen-space UI. I will add UI support later on.

The gizmo can be used to move, rotate, and scale multiple object simultaneously based on there median point or individual origins.

All components/properties can be modified via the properties panel for multiple object simultaneously as well. The implementation of it isn't that scalable though as I need to add the functionality manually for each property. If this becomes a problem in the future I will try to make it a bit more automatic.

While working with Aurora, a game engine I helped develop as part of my studies at TGA, we mainly wrote the gameplay code as components in the engine itself instead of a C# file like one would in Unity. We did have a scripting solution in the form of node scripting, but this was only used by our level designers to implement smaller gameplay features.

This meant that the engine had to be restarted for any changes to take place which slowed down the process quite a bit.

I had thought about implementing C# scripting in Aurora but the rest of the group weren't interested. However, when it was time to implement scripting in Epoch I wanted a workflow more similar to Unitys. I implemented C# scripting with the help of a video series by The Cherno on YouTube. I'm not fully satisfied with how everything's working right now and there are a couple more features I want to ad but it's good enough for now.

This has made it vary easy to create small tech demos as I can easily create script assets via the content browsers, attach them to entities, and  reload the C# code without restarting the engine. For now an entity can only have one script attached to it but in the future i would like to support multiple.

The prefabs in Epoch act much like prefabs in Unity. For one, prefab assets can be created by dragging an entity into the content browser. Also, a prefab can either be dragged into the viewport to create an instance of it, or be instantiated via scripts. Prefabs are essential for creating scenes as it speeds up the process. There is currently an issue I will have to fix in the future; whenever a prefab is updated, the changes will only be applied to new instances.

MORE COMING SOON