Spite: Journey to the Top
About
"Spite: Journey to the Top" was our sixth project at The Game Assembly. Our task was to create a game that resembled Diablo 3 using our own game engine, based on a given theme. Our team consisted of 21 skilled developers who worked together to bring this project to life.
My Contribution
My main responsibility for the "Spite: Journey to the Top" project was to develop the entire rendering system and rendering architecture for our game engine, Firefly. To achieve this, Firefly's rendering architecture was based on a principle of batching everything, which allowed it to handle large scenes with an impressive number of meshes and animations. I also added Text rendering.
In addition, Firefly also boasted an array of post-processing capabilities, including physically based bloom, FXAA, SSAO, and color correction, which enhanced the overall visual quality of our game.
Creating a material system was a new challenge for me, as I had never done it before. To enable our technical artist to create custom shaders and materials in our game without the need for a programmer's assistance, I built a shader reflection system. This system allowed Firefly to automatically detect and bind textures and buffers, which made it easier for our team to develop and implement high-quality shaders and materials in our game.
Material System
Our material system was designed to allow our technical artist to create custom shaders and materials in our game without requiring a programmer's assistance. To make this possible, I developed a shader reflection system in Firefly.
Essentially, the shader reflection system automatically detects and binds textures and buffers. This means that our technical artist could create a new material with custom shaders, and the system would automatically recognize which textures and buffers to use based on the material's properties.
This feature was crucial for our team, as it allowed us to develop and implement high-quality visuals in our game more efficiently. Instead of relying on a programmer to manually bind textures and buffers for each material, our technical artist could create new materials on their own, which saved us time and resources.
Additionally, one of the benefits of the shader reflection system in Firefly was that it allowed us to compile shaders in runtime and handle shader errors seamlessly. This meant that if our technical artist made a mistake in their shader code, Firefly could detect and handle the error without causing any issues or crashing the game.
By allowing us to compile shaders in runtime and handle errors more efficiently, Firefly's material system saved us a lot of time and headaches throughout the development of "Spite: Journey to the Top."
Material showcase in “Firefly engine”
Physical-based bloom in “Firefly Engine”
Varible reflection in “Firefly Engine - material editor”
Instancing
The instancing feature in Firefly not only allowed us to render multiple instances of the same mesh with a single draw call, but it also enabled us to handle different animations for multiple meshes under a single draw call.
Using a structured buffer to store the bones for each mesh and offsetting them accordingly, we were able to render meshes with different animations in the same draw call. This was a significant advantage, as it reduced the number of draw calls needed for animated objects, leading to improved performance while still maintaining visual quality.
Overall, the instancing feature in Firefly was a critical component of the rendering system in "Spite: Journey to the Top." Its ability to handle multiple meshes with different animations under a single draw call helped us to optimize our engine for complex scenes with many animated objects, ultimately contributing to the game's high-quality visuals and smooth performance.
One drawcall different timed animations
Post processing
To achieve the high-quality visual aesthetic that we were aiming for in our game, I implemented several post-processing effects. One of the effects I added was Frostbite's physical-based bloom, which gave our game a beautiful and realistic bloom effect. I also implemented SSAO to create a coherent ambient occlusion effect, which added depth and realism to our game's environments and characters.
In addition to these effects, I also added depth fog to the game to create a sense of depth and distance. This helped us create a more immersive environment for players to explore. Furthermore, I added FXAA to the game to provide anti-aliasing and smooth out jagged edges, which was necessary to follow the art style we had in mind for the game.
Overall, my work on implementing these post-processing effects played a critical role in achieving the high-quality visual aesthetic that we were aiming for. It was a challenging task, but one that I am proud to have tackled and delivered successfully.
preview of SSAO In “Firefly Engine”
FXAA in “Firefly Engine”