Features implemented in our scene

Shading normals

Before After

Shading normals uses an additional texture to define surface normals, allowing for detailed shading effects without increasing mesh complexity.

In our scene, the shading normals are responsible for enhancing the quality of the meshes of the sword, the stone columns and the stones at the floor. However, we noticed these normal textures avoid the shields from reflecting light and therefore we decided to remove the normals of these meshes.

  • Source code:
  • Simple test:
  • Before After

  • Texture:


  • References:
  • Our implementation was based on LearnOpenGL.

    Alpha masking

    Before After

    Alpha masking uses a texture to determine transparency, allowing rays to pass through based on alpha values without increasing mesh complexity.

    In our scene, alpha masking is responsible for letting the light through the clouds and also to enhance the quality of the meshes of the swords, with these feature we managed to make dents to the swords without modifying its meshes.

  • Source code:
  • Simple test:
  • Before After

  • Alpha mask:


  • Halton sampler

    Before After

    Halton sampling improves rendering quality by generating well-distributed sample points ensuring better coverage of the sample space compared to pseudo-random sampling.

    In our scene, we can see how halton sampling reduces the noise specially at smooth zones such as the clouds with the same amount of samples (32). This helps us get a higher quality with less computational cost.

  • Source code:
  • Distribution of Halton and Pseudo-random samples:
  • Halton Random

    Images from Wikipedia.

  • Simple test:
  • Before After
  • References:
  • Our implementation was inspired by Physically Based Rendering book (Chapter 8.6).

    Postprocessing

    Before After

    Postprocessing allows us to simulate lens effects such as bloom or glare after rendering. It consist of selecting brightest areas and applying operations such as Gaussian blurring to these selected pixels.

    In our scene, bloom is used to highlight the reflection of the shield.

  • Source code:
  • Simple test:
  • Bloom:
  • Before After
  • Glare:
  • Before After
  • Bloom and glare:
  • Before After
  • References:
  • Our implementation was inspired by How to use Bloom and Glare? - C4D.

    Area Lights

    Before After

    Area lights improve rendering quality by reducing noise through direct sampling of emissive surfaces. Instead of relying on chance hits, they sample light sources proportional to their area when a surface is hit. This ensures more consistent lighting contributions and lowers variance.

    In our scene, area lights are used to create a light below the knight, giving it a mystical glow and emphasizing the knight's presence.

  • Source code:
  • Simple test:
  • Before After
  • References:
  • Our implementation was inspired by Physically Based Rendering book (Chapter 12.5).

    Extra features that do not appear in our scene

    Break things

    Arriving to a consistent scene was not easy. Below we show some bugs that broke our renderer making it generate interesting results.

  • Another example: