Junior School Project
Custom C++ Engine
Sept. 2019 - April 2020
Xbox One, PC
The graphics engine for Turboengine is more complex and larger in scope than any graphics engine I've worked on before. With a team of three graphics enthusiasts, we're able to develop functionality much faster than on our independent projects, and the graphics engine came together at a blindingly fast pace. From PBR materials to deferred rendering to animations, our combined knowledge had helped us work towards a technically impressive engine. Pushing the limits of my abilities as well as learning from the work of my teammates has made this a very educational experience.
Shader Reflection Based Materials
The shader and material system was something I wanted to develop for a long time. Ever since I started learning about computer graphics, the question that grabbed me the most was "How can I make adding a new feature through a shader less painful?" To solve this problem I started with the user experience provided by Unity, where variables in shaders can be marked to be displayed in the inspector, which from there can be tweaked during runtime to rapidly develop effects. I used shader reflection to find texture handles and variables in my shaders, and populated a material editor with them, allowing developers to create a new shader, material, and play around with its parameters without recompiling the game.
We approached this project with the unique goal of developing a product that runs well on both Xbox One and PC, a task that no other student team had succeeded at. Thanks to UWP, this was much less challenging than it otherwise would have been, but console development still brought significant challenges. We needed to build the engine from the ground up with this in mind, multi-threading as much as we can to deal with the sluggish CPU clock, and being aware of what libraries and APIs will play well with the console. There were many other problems along the way, but in the end we shipped a product able to hit 30fps on the base console, and 60fps on the Xbox One X.
Bezier Curve Based Camera Animations
Once I finished my materials system, I was inspired by a math class I was taking at the time, Curves and Surfaces. I found myself very enthusiastic about the topic so I knew I had to apply it to my game project. I did research ahead of the class, read a few white papers, and implemented a camera animation system using bezier curves. The editor is very intuitive, allowing the user to create keyframes by positioning the in-game camera, then simply clicking a button to add the camera's translation and rotation as a keyframe. After adding animations to the main menu, everyone remarked the game had an immediate jump in production value.