Video:




Screenshots:




Download:




External Libraries:
Game Info:
Objectives:
  1. Create a project that showcases my abilities in 3D graphics programming.
  2. Create a custom engine that will be used with this project, and with other projects in my porfolio.
  3. Create a UI for the user to toggle on and off different game and system infomation panels.
General Info:
  • Title: DX11 Graphics
  • Platfrom: PC
  • Genre: Technical Demo
  • Programming Language: C++
  • Development Time: ~1 month
  • Engine: Custom
  • Graphics API: DirectX 11
  • 3D Assets: Autodesk - 3ds Max, Autodesk Mudbox
  • UI: Inkscape, GIMP
Description:

    This project was designed with graphics programming heavily in mind. It runs with DirectX 11, and is created with minimal external libraries. The project is comprised of two visual studio projects. One is a static library where systems within it are designed to work well in this project and any others that want to include it. The second project is a executable application that has the static library linked to it.


Project and Engine key features (not all are shown in the demo).
  • Deferred rendering.
  • Direction, spot, and point lighting.
  • Dynamic shadow mapping for direction, spot, and point lights.
  • Texture projection w/ falloff.
  • Particle system w/ soft particle support.
  • Render to texture system
  • Skydome creation with cubemaps.
  • Freetype font creation with signed distance field (SDF) implementation.
  • FBX mesh loader with the FBX SDK.
  • XAudio2 system for 2D and 3D sounds.
  • In-Engine UI library.
  • In-Engine Math library.


Post Mortem:
What Went Right:
  • I was able to implement a lighting, and shadow mapping system that can be updated easily and quickly.

  • I was able to implement a UI system that can be updated easily and quickly.

  • I was able to implement a system that allows scenes that are in an FBX file format to be imported, and used with minimal work needed, outside of inputting the filename.
What Went Wrong:
  • A feature that I wanted to add in this project was an in-engine physics system, but lighting and shadow mapping took more time than I anticipated, so I couldn't get to it while still meeting my deadline.

  • When I was working on the systems for shadow mapping, something that I wanted to use was dual-paraboloid point light shadow mapping, but after running into too many issues with it, I decided to move back to cubemap point-light shadow mapping.

  • Soft shadow mapping was another thing I wanted to get to, but seeing as by the time hard shadows were in place, time was already becoming an issue, I felt the remaining time would be better spent on adding features outside of lighting and shading.
What I Learned:
  • I gained a deeper understanding of how lighting and shadows are implemented in games, and about some of the issues that can pop up while implementing them, and how to fix them if they do.

  • I learned how a use signed distance fields with fonts to allow for a single font image to look sharp in multiple sizes.

  • I learned how I can use the XAudio2 library for 3d sounds, and about some of the effects that can be achieved with it.