Tiled Forward Rendering Demo

Creation Date: 2014
Programming Language: C++
Technology: Direct3D 11

This Tiled Forward Rendering Demo is my implementation of the technique based on AMDs Forward+ Rendering (link to the paper). Having implemented several deferred shading pipelines I wanted to try something new and the potential of Tiled Forward Rendering sounded promising.

Tiled Forward Rendering works by drawing many light sources and assigning each of them a 2d tile on the screen. This results a small number of associated light sources for each pixel and thus reduces rendering overhead.  The following slider shows a visualization inside my application, tiles which have many light sources associated with them are rendered in red, while tiles which have no associated light sources are rendered in blue. You can drag the slider below for a comparison between the actually rendered scene and the debug view.

My implementation uses the CPU for assigning light sources to tiles and then sends them to the GPU which handles the rest of the lighting calculations. In comparison to Deferred Shading Tiled Forward Rendering provides simple access to hardware antialiasing and provides much more flexibility for designers and shader programmers to use many different materials inside a scene. This may especially be interesting when using physically based rendering approaches.

A zip archive with the executable file and all the required assets is included below. The archive also contains all the uncompiled shader code, so feel free to take a look.

Requirements:

  • DirectX 11 capable GPU
  • Visual Studio 2012 C++ Runtime
  • Windows 8/8.1/10

>> Download Demo <<

A flat view of the scene results in a bigger performance impact. Many light sources may be associated to the same tile!
This shows the screen space rectangle for a single light source, which is used for assigning every light source to the right tile.

The shader source code of the main material: