What I did
- Shadow mapping in DX11 and GNMX
- Particle systems in DX11 and GNMX
- Particle system editor with preview
- Cube mapped reflections and skybox in DX11 and GNMX
About the project
A game built using a custom engine made in the second year of my game development bachelor at IGAD. The engine was written completely in C++ over a period of 16 weeks and runs on both Windows and PS4. The game AGR, an anti-grav racer, was made in unison with the development of the tech. As a graphics programmer I setup the foundations for cross-platform rendering and implement several effects, including shadow mapping.
NOTE: I fixed some stuff (click here to see what) and replaced the shadow camera transform calculation in 2022. The footage above is from 2022. The trailer at the time the project ended at IGAD can be watched here though in this trailer a mixture of footage is used some showing different features working than others.
Something I was determined to learn from the moment this project started was how to implement shadow mapping. I did the implementation for both the DirectX11 and GNMX renderers. The features I worked on are the base shadow mapping, PCF, and normal offset. Two shadowmaps are rendered, one higher resolution shadowmap for only the player's car and one lower resolution shadowmap with greater coverage for everything but the player's car.
Since the engine and game were developed simultaneously, I created incremental versions of the particle editor. Meanwhile, I changed the particles from physics- to curve-based, and optimized the rendering reducing bandwidth (using the geometry shader) and draw calls (batching).
Here you can see the car exhaust particle system in the editor...
... and here you can see it in the engine. To accommodate for the car's movement I added parenting and 'weights'.
In 2022 I removed the broken shadow camera transform calculation algorithm and created one that works. I also fixed some other stuff left broken, such as splitscreen postprocessing and fixed that a shadow was not always fully rendered for another player’s car.
The working shadow camera transform calculation algorithm uses the player's camera's forward direction if the player's camera's forward direction is perpendicular to the light direction. The shadowmap for everything but the player's car is shown here at the center right (black and red).
If the player's camera's forward is parallel to the light direction.. the player's camera's up direction is used instead.
The shadow for another player's car is now rendered to the greater coverage shadowmap.