Features
Rendering Features
Area-Lights
Area-lights are a good way to provide more realistic lighting and soft shadows.
We implemented area-lights by just uniformly sampling their area.
Below you can see what happens if we replace the spherical area-light by a point light.
Depth of Field
Implemented using the thinlens camera model. In this case it also has an effect on bloom.
Normal Mapping
Normal mapping is essentially a way to give surfaces a more complex appearance for free by disturbing the surface normal and introducing bumps and other features.
Alpha Mapping
Alpha mapping enables very fine details even for low-poly meshes, which is especially great for foliage.
Postprocessing Features
Denoising
Denoising aims to remove the noise from a rendered image. It also helps with fireflies.
We implemented denoising with the use of Intel's Open Image Denoising library.
In addition to the normal integrator of the assignments, we implemented an albedo integrator
to provide both normal and albedo input to the denoiser. This required Bsdfs to
have an albedo method
which computes the
hemisperical
reflectance.
Both the normal and the albedo inputs are prefiltered, meaning denoised themselves,
to further improve the denoising quality.
To better show the effect, the images below have been rendered with only 32spp.
Bloom
Bloom is implemented using the downsample-upsample+blur technique. We apply a naive threshold to the image before starting the operation.
AGX Tonemapping
The bloom ended up looking very different from blender's version.
Some digging revealed that it was mostly due to the color transformation.
Since the resulting image is an exr, it needs to be converted, and
the standard linear to sRGB conversion is likely being used by most conversion tools.
Thus, we do the conversion ourselves to get the desired look.
We use a polynomial
approximation
of AGX, which is not optimal, but it has a small MSE and was easy to implement.