We Love Penguins

Small Image Large Image


The cuteness and clumsiness of penguins has always fascinated us (especially Nicolas). Since larger exemplars of these flightless birds inhabit colder regions, the climate change could lead to their extinction. This possible environmental damage is the topic of our scene. In this rather pessimistic vision of the future, global warming has lead to a rise of the sea level such that the cities are flooded. On a swamped sidewalk stands now a forgotten toy, a snow globe with two king penguins starring into the night.






Samples per pixel


Render time

Composition of the scene

There are not many elements in our scene, but we payed a lot of attention to smaller details. Here we summarize the required steps to build our scene.

1. Snow Globe

We started with modelling the snow globe in blender. Except for the penguin, we did everything ourselves. We used a publicly available and free model for the penguin, the sources are listed below.

With our renderer we inserted randomly small white spheres, which represent the snow in the snow globe. The size of the spheres were randomly chosen as well. We gave the surface of the sphere glass material, which gives nice reflections. This resulted in the following picture:

2. Street

For the street segment we imported a publicly available and free model of a simple street. We adjusted this 3D model to our needs by removing everything but one building and two lanterns. This way we could later repeat this building in our renderer with instancing, which is faster than importing the whole scene.

Further, we gave every surface texture and added area lights beneath the windows and on top of the lanterns. This lead to the following result:

3. Floor and Background

For the watery texture on the floor we started off with a fuzzy mirror material. Then to add slight waves, we created with a combination of perlin noise and scaling a bumpmap that we put on the floor.

For the slight dawn, we let a giant sphere surround the whole scene and added a blue point light under the road. Then the stars were randomly set in front of the sphere and we let their size vary as well. All this combined resulted in our final scene.


Adaptive Renderer

We implemented a renderer which focuses on pixels with a high variance such that noise gets reduced. In particular, we weight each pixel according to \(\frac{\sigma_n}{\mu_n \sqrt{n}}\) where \( n \) denotes the number of samples for the pixel and \(\mu_n \) and \(\sigma_n \) denote the estimated expectation and standard deviation of the pixels value. Then a pixel gets selected randomly according to its weight and gets updated. This can be efficiently done using a segment tree such that pixels can be selected and weights can be updated in \( O(\log N) \) where \( N \) denotes the total number of pixels. The corresponding code can be found in rt/adaptrender.

You can see the difference in the following two pictures which were rendered using the same total numbe of samples. The left picture was rendered using the classical renderer and it has a lot of noise in the glass. The right picture shows our new renderer which removed the noise. However the checker pattern is a bit more blurred since more samples went into the glass.


Our BVH is built using the SAH heuristic. The SAH-costs are minimized along the x-, y- and z-direction and then the best split is selected. Further, we sort the primitives just once such that each subsequent split can be computed in \( O(N) \) where \( N \) denotes the number of primitives. This results in a fast building and raytracing time. The code can be found in rt/groups/bvh and rt/groups/bvhbuild. These files contain additional algorithms that turned out to be slower.

Performance Improvements

To improve our perfomance we parallelized the rendering process and distributed the pixels to multiple threads. Further, we identified BBox::intersect as critical part and improved it using SSE instructions. This allowed us to intersect two boxes at once and to half the running time.

No-Shadow Materials

Additionally, we allowed the integrators to ignore materials when casting shadow rays. This makes it possible to illuminate the penguins in the glass from the outside.