velengine

Velengine is 3D Game Engine currently in development. It's production begin in Spetember 2022 during the program Game Development Advance Programming at Fanshawe London. To be released as an open source project soon.

From a Triangle

9-15-2022

To a Game Engine

4-21-2023

First Game - Artillery (Physics Project 1)

A game engine was provided by the college, the challenge here was to implement a parabolic projectile and shoot the enemy tank, with some particle effects for bonus marks.


Semester 1: Building a Game Engine

In the first semester, we got to know how a Game Engine works. We learned about OpenGL, GLFW, Audio, Frameworks & Patterns, Networking, and finally how to deploy the finished game. With my understanding of some commercial engines, I was able to create some sort of Entity Component System architecture, which helped me throughout the semester. But it was not pure ECS, and making changes to functionality was really difficult.

Game Engine after the end of 1st semester

By the end of the semester, the engine was capable of creating complex scenes, with multiple light casters and a combination of textures. And had Lua runtime scripting, to move the gameobjects without interfering with the engine code. But the code was not up to any coding standards, and there were files with 1000 lines of code. Adding any new features was really difficult without breaking the engine.

Refactoring
(SOLID Principles)

It's winter break, and I had 2 to 3 weeks to refactor the Engine in order for it to support any new features and modifications that would come during the final Semester. However, the code was such a mess that starting a new engine from scratch was way more feasible. So I did just that. 

SOLID principles are really important (which I learned the hard way), so the new Engine should be constructed in a way that follows all the principles, making it more flexible, and easier to understand.

Production of velengine

Abstraction

I wanted the new engine to support many APIs. So I started abstracting everything. Shaders, Textures, Vertex Arrays, Window, Physics, and almost anything that is platform and API-dependent would have a general interface. Which would then be implemented by each API.

Entity Component System
entt library

Creating an ECS architecture is way more complex than I had previously imagined. So this time I decided to use an ECS library called entt. It was really straightforward, and now my engine has a pure ECS architecture. Everything was an entity and every functionality was described by a Component. To add a new feature, I only had to create a new Component, which then can be handled by its respective system.

Asset System
.vasset files and GUID

Now that the engine has ECS, it was time to create a proper Asset system, which would allow every single element inside the Asset file to have its own components. In other words, if an FBX file has bones and meshes, then it can have its own components. Mesh can have materials, while bones can have box colliders. Storing them directly in the save file would be tricky. So after doing some reverse engineering on some of the modern Game Engines, it was quite evident that loading the assets directly would be the wrong thing to do. Instead, every file needs to have its own asset file, which then can be loaded by the engine. Each asset entity will have a GUID (Globally Unique Identifier) which can be mapped to the Scene's save file.

Fun Graphical challenge - Bloom

For the course Graphics 2, we were assigned with Post Processing effects. And the bonus task was bloom. It was the most fun graphical challenge, as there were many ways to implement it and it drastically changed the looks of the Game.

Bloom OFF

Bloom ON

Game ready??

By the end of the semester, the engine had all the functionality required by the course. Now was the time for the final project, the Game Jam project. The engine had PhysX for physics, OpenGL for rendering, Assimp to import FBX files, some Post Processing effects, a Camera System, and a simple implementation of native scripting using C++.  The engine was ready to make games.

Game Jam

velengine's first published game. Cyber Hell, built as a final project for the course. Available on itch. The link is below.

LinkedIn