Nua Engine

Graphics API: DirectX 11

Languages: C++, HLSL

Dev Team: Solo

GitHub Repo

Nua Engine consists of a DirectX 11 deferred renderer and my own game framework. The engine has support for creating chunk-based tessellated terrains as well as frustum culling which is carried out in compute shaders. The terrain also renders animated grass at 2 LODs, with each blade of grass having its own geometry and bounding box.

The renderer has a post processing pipeline with effects such as bloom, chromatic aberration, gamma correction and more. Two standout post process effects of this renderer are screen space ambient occlusion (SSAO) and temporal anti-aliasing (TAA).

SSAO approximates occlusion from ambient light at each pixel by sampling random points around a hemisphere in the direction of the pixel’s normal vector. The less points the pixel can see, the less light it’s likely to receive and therefore it is in shadow.

No SSAO
With SSAO

No SSAO

With SSAO

TAA uses camera jitter and pixel data from previous frames to estimate MSAA, whilst staying computationally cheap by gathering its samples over multiple frames. Read more about my implementation here.

TAA with increasing methods of reducing ghosting artifacts

No TAA vs. TAA

The game framework contains a resource manager which ensures resources such as models, textures and shaders are not loaded more than once. In addition, once a resource is no longer needed, the resource manager automatically handles releasing the resource.

Shader loading was implemented with a templated LoadShader<>() function, which takes a shader type as the template as well as the file path as an argument. This function then compiles the shader with the correct parameters and stores it in the resource manager.

LoadShaders example

Being a deferred renderer, Nua Engine is very efficient at rendering scenes with a large number of lights.

Reflection of many point lights

Nua Engine uses ImGui for handling menus to control game objects in the world, as well as allowing the user to update post process settings.

View GitHub Repo
Next
Next

Quadtree-based Procedural Terrain Generator