Cabinet of Curiosities
Period:
Year 2
Duration:
24 weeks
Team Size:
20 students | 5 programmers
Role:
Graphics programmer
Game Engine:
Custom Engine
About the Engine:
My team was tasked with creating a custom C++ engine that is capable of making dungeon crawlers for both Windows and Nintendo Switch. To be able to fulfill this we created a technical design document on all the necessary features we’d need to implement.
Our ideal for the rendering was to be able to load a large amount of models and have a good lighting system in place that would allow for a nice stylized look to the models in the scene.
Contributions
I contributed to the project by developing a comprehensive design document outlining the engine’s focal points. Within the engine, my responsibilities encompassed establishing rendering pipelines and implementing nearly all rendering features.
Furthermore, I assumed the role of a communication intermediary with other disciplines to ensure a cohesive and high-quality final product. (Can’t show code due to Nintendo SDK being displayed)
Features
- Bloom
- Model loading GLTF
- Deferred rendering
- Abstraction layer for Nintendo Switch | Windows
- Sprite lighting
- Model instancing
- Parallax scrolling
- Sprite animation
Challenges
Bloom
Working on the bloom effect marked my initial experience with generating and reading textures for value manipulation, as well as employing ping-pong techniques. This endeavor also introduced me to combining attachments and orchestrating multi-step processes within the lighting pass.
Model Loading
Among the various features, model loading posed the most formidable challenge due to my limited experience beyond MD2 files. Overcoming this, I delved into understanding the intricacies of GLTF files and the process of extracting and transferring data into compatible rendering structures. Additionally, I incorporated instancing to optimize frame rates during gameplay. Despite the steep learning curve, I swiftly acquired the necessary skills within a week to enable artists to seamlessly utilize their models.
Deferred Rendering
Deferred rendering was pivotal due to our game’s requirement for numerous lights in the scene. This technique, which I’m particularly proud of alongside model loading, addressed this need by optimizing light handling. I gained deeper insights into render targets, framebuffers, and textures, utilizing them for post-processing effects and performance enhancements.
Graphics Debugger
To handle the extensive workload, I effectively utilized graphics debuggers, honing my debugging skills to swiftly identify issues and gain comprehensive insights into the underlying problems, thus enhancing efficiency and problem-solving capabilities.
![](https://usamaevers.com/wp-content/uploads/2023/07/position-1024x567-1.png)
Normal buffer
![](https://usamaevers.com/wp-content/uploads/2023/07/Positiopn-1024x566-1.png)
Position buffer
![](https://usamaevers.com/wp-content/uploads/2023/07/Albedo-1024x565-1.png)
Albedo buffer
![](https://usamaevers.com/wp-content/uploads/2023/07/Deferred-1024x566-1.png)
Final Lighting