Nova Engine

Overview

During my second semester I attended the lecture “Game Engine Design”, which is a real time rendering introductory course. The course is split into a lecture and a practical course, where teams build a small, C++ & DirectX 11 based game contained within a custom engine. The game is a simple FPS where the player hunts alien space ships.

Like in many other practical courses this was also a group exercise. In this instance, however, all the work had to be done by all members individually. Our overall results were the best that semester and I even extended the game engine by adding a few nice to have features.

Data Generator

The project is split into two components, a resource / terrain generator and the game itself. The game requires a height, normal and albedo color map for terrain rendering.

The height maps are generated using the diamond square algorithm and then normals are calculated using the generator output. The albedo texture is generated by blending four textures based on elevation and slope.

The resulting textures, as well as all other required assets are then converted into appropriate file formats and stored on disk.

The generated output

Game & Engine

The engine itself is based on DirectX 11 and uses DXUT. The game features several enemy types that move over the terrain and can be shot down using either a plasma or gatling gun. There are also some decorative elements such as bunkers & towers scattered across the terrain.

The terrain is rendered first and uses simple Lambert lighting. All meshes are rendered using Phong lighting based on specular, glow, normal & transparency maps. Enemies are surrounded by an energy shield, which uses a depth pre-pass to enable glowing terrain intersections. Shots and explosion effects are rendered as billboard sprites, optionally changing over time (animated smoke & fire). The engine also features a skybox rendered using a cube map.

Enemies and projectiles are simulated using a simple physics and collision model. Most game settings can also be adjusted in the config file, which serves as both a settings and scene description file.

Final Notes

This project was my first extensive contact with graphics programming and inspired me to dive deeper into the matter. The course overall was very interesting and I learned a lot of the basics and even some about more advanced topics due to the extra-curricular engine additions.

If you want to take a look at the project and play around with it, the project is available on my GitHub. While there are many things I would do differently nowadays, I am still rather happy with the results of the project. Sadly I can’t provide a precompiled version at this point, as the project is a bit outdated and doesn’t work on my current setup anymore.

Leave a Reply