Project Categories

Project Setting Academic
Team Size 1
Role(s) Creator / Developer
Languages C++ HLSL
Software/Tools Used DirectX 11 (framework), Visual Studio (code)
Status Complete
Time Period Jan 2022 - Apr 2022

About

This project was an ongoing series of assignments for a class called "Foundations of Game Graphics Programming" for my last semester at RIT. We started with a very barebones DX11 starter template, which primarily handled the core windowing and input so that we could instead focus on actual graphics programming; all it could do was draw a single RGB triangle to the screen and read input.

We first started with implementing a mesh class, followed by vertex shading (with vertex colors), transforms, and eventually cameras. After that came importing 3D models and defining a material class to handle our own pixel shaders, lighting, textures, normal maps and cube maps, and finally physically-based rendering materials.

It was incredibly satisfying to see this project come to life over time, especially considering each step of the assignment was divided in a way that not only made sense but ensured each step took very little time to implement (each assignment took usually between 30 minutes to at most 2 hours, and that includes any problems or cleanup I did on the project in the meantime). It was also fun to hear the professor wanted to use my randomized pixel shader as an example for future assignments and to hear that he wanted to make some changes to the starter that were like some I made to it myself (like making texture loading and path retrieval available outside DXCore). I did try to do some more optional features with the project that weren't a part of any requirements, such as reflection maps, supporting dynamic light count, emissive maps and emission colors, and making various texture maps optional. in the standard shader.

For the final project, we had a choice of either making a small game-like experience or adding some sort of advanced feature to the project. I went the advanced feature route and chose a couple options because of how much I enjoyed working with the project. The options I chose were adding transparency and creating a toon shader. For transparency, I supported both alpha cutoff and alpha blending. For the toon shader I studied the professor's demo as well as existing Unity toon shaders (most were implemented with a mix of CG and HLSL), creating my own that additionally supported outlines on top of emissive, albedo, and specular maps. In theory it supports alpha, but it did have an issue where the rim light would apply to the entire interior (backface) of an object. It also does have a branching problem (where the shader will take different steps for different pixels). I decided these were in context minor issues as I had to focus on other projects for the end of the semester at the time.

Samples

These are some samples from the project.

Screenshots

Code

Places

Github Repo Repository