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)
(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.
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
.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.