Octopus Revolt

Jonas Schmitt, Marius Schuh

The contestants have taken revenge...

Render Time: 1h 13min, 200 samples on a Macbook Air M1

Scene Introduction

This scene is heavily inspired by Squid Game. In the Korean thriller, 456 financially desparate participants compete in deadly versions of children's games to win a large sum of money, with failure leading to immediate death. The scene pictures the three pillars present in the last episodes of season 3.
The games are run for the entertainment of billionaires called VIPs, who observe the deadly event from their luxurious spectator's room above the playing field. Before the end, tables have turned: contestants have finally taken revenge on the VIPs. We picture the aftermath of the revolt: as players managed to build a ladder reaching up to the observation room, they brutally took revenge on the VIPs using weapons they smuggled into the game.

Development

We begann by creating a mood board. Marius wanted to show the contrast between the VIPs in their luxurious environment, while Jonas wanted to have a The Last of Us-inspired scene. In the end we combined both ideas and came up with an abandoned Squid Game set.

Initially, we had some issues with scene geometry. After meticulously reviewing each object in the scene, we were able to identify the garden gloves as the culprits, leading to their removal.

After solving this issue, we had to review our Alpha Masking implementation, as we weren't shooting new rays in case of an intersection at an alpha-0 UV coordinate.

We were finally able to render the scene correctly! At this point we didn't implement Area lights yet so it took many samples until the scene was rendered in a satisfactory manner.

Feature: Motion Blur

Before

Before

After

After

Initially we wanted to realistically model rain using Motion Blur. For showing a blurred trail of moving objects, we needed to come up with a way to specify a series of Transforms for each instance and the camera.
Furthermore, each transform has an additional keyframe attribute, allowing users to define at which time the transform should be applied. Our code then interpolates between the transforms. Users can also specify a shutter speed, which can be used to show only a section of an object's movement in space.

Feature: Bloom

Before

Before

After

After

Bloom is a post-processing effect which creates soft glowing halos around bright areas. It is essential in creating an immersive scene with moody lighting. The algorithm consists of three filters:

  1. a high-pass filter extracts bright areas beyond our threshold,
  2. a blur filter blurs the bright areas by applying Gaussian kernels to the pixels, and
  3. a combining filter updates the original image with our bloom values, scaled by strength.

However, this was not satisfactory: the simple approach only created very dense glows around bright areas, not smooth halos with long falloffs.

To this end, we use several bloom stages, each one having a different blur radius and weight. This allows us to control the falloff precisely.

Feature: Normal Mapping

Before

Before

After

After

Normal mapping allows shading details on flat surfaces without additional geometry.

Feature: Alpha Blending

Before

Before

After

After

Alpha Blending is used for the leaves of the pine trees in our scene.

Feature: Thin Lens

Before

Before

After

After

The thin lens provides a depth of field effect.

Feature: ACES Tone Mapping

Before

Before

After

After

We thought Reinhard tone mapping is too bland, so we instead implemented ACES tone mapping, according to this website.

Feature: Denoising

Before

Before

After

After

The denoiser removes noise from the scene.

Feature: Area Lights

Before

Before

After

After

Before

Before

After

After

Without area lights, our scene is barely usable due to the high level of noise caused by the emissive surface.
The second set of images was rendered with 512 samples (off) and just 8 samples (on). Despite having way fewer samples, the version with area lights is much more accurate already.

Challenges

Implementing the glass crack. We had to fake the refraction in the cracks by writing an OpenCV script that takes the crack texture and causes the cracks to have a color value of 1.5, such that we get an IOR texture encoding the cracks for our dielectric.

References & Assets