Tank War

Project Description:

This was a project that helped me understand 3D rendering concepts, Shadow Mapping, Performance Profiler, Threaded Logger, Transform Hierarchies, etc. The list of the features I worked on for this project is under the summary section.

Development Specification:

  • Engine: Personal Engine (C++)
  • Development Time: 2 Months
  • Rendering API: OpenGL 4.2

Summary of Work Done

  • Created a 3D third person shooter game based on single player-controlled tank and AI enemies. 
  • Implemented a Transform hierarchy system to enable easier generation of model matrices for child components. 
  • Implemented a forward rendering path.  
  • Implemented a swarm based AI with flocking behaviors. 
  • Implemented an instrumented profiler to keep track frame times and performance.
  • Implemented a multi-threaded logging system that writes log files to disk. 
  • Implemented a terrain system that chunks the map into smaller parts to enable lighting over different parts of the terrain. 
  • Implemented 3D Raymarching techniques to enable Ray-AABB3, Ray-Sphere, Ray-Terrain intersections.
  • Implemented a surface patch rendering system that uses height maps to generate scalable terrain. 
  • Implemented a stack-based game state system to enable easy switching and modularized game states.
  • Implemented a sky-box in OpenGL.

Shadow Mapping

We implemented a basic shadow mapping system that works for a directional light in the scene. We extended our forward rendering path to create shadow maps before the actual render of the scene. The halo around each object is caused by the depth bias.

Instrumented Profiler

Getting into more terrain generation and tasking operations like flocking behaviors meant I needed to keep track of our frame times to enable smooth frame rates during gameplay. To enable us to keep track of performance, I worked on implementing an instrumented profiler system that’s easy to use during development. I hooked it up to my developer console and it was good to go. I started understanding were my time was being lost and tried to work on some improvements based on that. The profiler UI uses a widget-based system to enable easy iteration for UI elements. 

Threaded Logging System

Moving into networking meant we needed some form of logging system that would enable us to debug engine systems and network packets. 

Postmortem