Warm Winter
Final Project submission for the 2025 Computer Graphics course at Saarland University. Author: Gino Lanzo Hahn
A grueling journey through the snowy wilderness comes to a momentary halt as the day begins to fade. With a set up camp and a crackling fire, the weight of your travels begins to melt away, you let out a sigh. Finally, you can rest and bask in the warmth of the fire and the setting sun.
Winter has never felt this warm
I knew from the start that this scene was going to be more of a technical showcase, as I had planned to implement certain features from the get-go (i.e. subsurface scattering). The choice of a winter scene and a POV shot reflect this, showcasing the physical effect on both skin and snow.
Another big consideration however was also the artistic composition and storytelling. Depicting a struggle, juxtaposing feelings and sensations was important to invoke (or try to) a certain emotion in the viewer. The feeling of tiredness after a hike, though not common, isn't something unimaginable to most. The warmth of a fire contrasting with the cold of winter is also something most people can relate to, and I wanted to capture that feeling.
The initial sketch was done in a very rough manner, just to get a general idea of the composition and elements I wanted to include in the scene. I managed to get some feedback regarding the scene as well. In particular, the addition of the breath and the volumetric bonfire were additions that came from that feedback session.
As the final render shows, the scene is somewhat different from the original sketch. While the main ideas are still present, the availability of free assets and time limitations meant that some compromises had to be made. Mainly, the sunset HDRI has the sun higher in the sky than originally intended, the character pose is also different to show a more realistic posture.
The final render was rendered at a resolution of 2560x1440 with 2048 samples per pixel (SPP)
The total rendering time for the final image was approximately 6h 30m. 4h 10m: path tracer 1h 10: normal AOV 1h 10: albedo AOV
Rendering was done on a Ryzen 5 9600x processor. 32GB DDR5 RAM
All assets used in this project are free and properly attributed and credited as per their licenses. Find out more here.
Below are some of the features implemented in the renderer, along with a brief description and related images (or image comparisons). Click the 'Learn More' button to go to a page with more details regarding the implementation, comparison pictures, and implementation process.
Subsurface scattering is a mechanism of light transport in which light penetrates the surface of a translucent object, interacts (scatters) inside it, and exits the surface at a different point. This effect is crucial for rendering realistic skin, wax, marble, and other materials where light diffusion beneath the surface is significant.
The assumptions for volumes made during the assignments were somewhat restrictive in the accurate simulation of light transport within homogeneous media. This feature breaks those walls by utilizing physically accurate absorption and scattering coefficients, allowing for more accurate light transport. Emissive volumes were also added (pictures for this in the proper page).
Volumes in real life often have varying densities and properties that affect how light interacts with them. This feature aims to simulate such complex light transport within heterogeneous media by using the OpenVDB and NanoVDB libraries.
Area lights allow for more realistic lighting by simulating light sources with a defined shape and size, resulting in softer shadows and more natural light distribution. Compared to utilizing emissive materials, being able to sample these light sources directly reduces noise and improves convergence in scenes with significant area light contributions.
When utilizing lights that can be both directly sampled (NEE) and intersected (sampling a direction from the BSDF), dealing with double-counting can increase variance significantly if not handled properly. This feature implements the power heuristic MIS strategy to reduce variance when both sampling strategies are used.
Light contribution from emissive volumes rely on BSDF sampled directions to be properly accounted for in the final render. This feature aims to allow for area-light like sampling for heterogeneous volumes. However, given that this feature was experimental and is actually an ongoing research area, its results aren't very good.
Environment maps were previously only intersectable via the BSDF sampling strategy, which can lead to high variance in scenes where the environment is the main light source. This feature implements a method to directly sample the environment map based on its luminance distribution, allowing for better sampling of important areas. This is very useful in this scene, where the sunset HDRI is the main light source.
The independent sampler used in the assignments can lead to clustering and uneven distribution of samples, resulting in higher variance and noise in the rendered image. This feature implements a low-discrepancy sampler (Halton sequence) to provide a more uniform sample distribution, reducing variance and improving convergence rates.
The Principled BSDF implemented in the assignments was limited to diffuse, metallic and specular lobes. This feature extends the BSDF to include a sheen lobe, adding non-lambertian models to the diffuse lobe, and adding thin-walled with translucency to emulate subsurface scattering materials on surfaces.
Alpha masking allows for the use of textures with transparency information to create complex surface details without the need for additional geometry.
Normal mapping is a technique used to simulate high-resolution surface details on low-polygon models by altering the surface normals during lighting calculations.
To further reduce noise in the final render, this feature integrates the Open Image Denoise (OIDN) library as a post-processing step. The feature utilizes auxiliary AOVs (albedo and normal) to guide the denoising process, preserving important details while effectively reducing noise.
Bloom is a post-processing effect that simulates the phenomenon of light bleeding around bright areas in an image, creating a glow that enhances the perception of brightness and realism.
The tone mapping implemented in the assignments was a simple reinhard operator, which can lead to desaturated images and loss of detail in both highlights and shadows. This feature implements a more advanced luminance-based tone mapping operator that better preserves details and color saturation across a wider range of luminance values.
Here is a list of all the assets used in this project, along with their respective licenses and attributions.*
*Assets used for feature showcases are attributed on their respective pages