Screenshot

Released at Hogmanay 2020, 4KB Executable Graphics (a single 4KB executable file generates this image, with no external data).

Download on Demozoo

Meaning

This was inspired by a particular group of people: transgender women who either accept or figure out their true identity later in life, after settling and starting a family, and choose to stay in the closet either to protect that family or to keep it together. They know how to leave their prison, they hold the key, but they choose to repress.

Identity needs an outlet. Unable to live as themselves offline, social media provides this outlet for many - a space to present as themselves, find others, and support each other.

However, I don’t intend this piece to be about this group in particular and avoided visual hints about who the characters may be. There are many others in this situation, for many reasons. This is dedicated to you all.

Lighting

Since the focus of the piece is about support as well as being in a dark place, I wanted to represent that and chiaroscuro (strongly contrasting light and dark) felt perfect.

I wanted the scene to be very dark, with a beam of light in the centre falling on the key and the hands, with everything else lit indirectly. Since the subject is a form of imprisonment, I went with light shining through a high, barred window.

To do this, I put a light far away from the scene:

Screenshot

Then, I added a plane between the key and the light. I used a simple 2d distance function to cut a few rectangles out to let the light through.

Screenshot

There isn’t actually a room at all - just the floor and one wall.

I use biased rendering here, meaning I shoot rays out of the camera into the scene, and each time the ray intersects a surface, I cast a ray towards the light rather than just hoping the ray will randomly hit it.

Since the light is far away and mostly blocked by a wall, rendering time would be extremely long otherwise.

Modeling

There are 3 models here, all made with SDFs (signed distance functions). A key, one human, and a pair of hands.

Key

It’s basic, but it’s small and far from the camera, no more is needed.

Screenshot

Human

This is a bit more complex, apart from the head shape (a distorted sphere) everything is made from blended boxes. Here’s how it’s built:

Screenshot

Not everything is accurate, but it only needed to look right from one angle (or, technically two) in a badly lit room 🤷‍♀️

##No room for 2

With the tight size limits of 4KB and 30s rendering time, I didn’t want the extra code and slower rendering 2 characters required, so I simply mirrored and flipped one:

Screenshot

Hands

The characters are holding hands, representing support for eachother. But doing this with a single, mirrored character is both complex (since the mirror would have to somehow be between the hands) and limits the hand positions (I don’t want them shaking hands).

So, I decided to model the hands seperately:

Screenshot

Again, they’re built from blended boxes, and the final step is to blend the hands into the character models.

Screenshot

I’m not super happy with the modelling there, but it’s difficult and looks ok in the final image I think.

Post

The raw pathtraced output looks like this (live preview quality, the final output is much less noisy):

Screenshot

First I reduce brightness:

Screenshot

Then increase contrast:

Screenshot

I wanted more depth to the shadows, so I increased the ‘contrast bias’. This lets me adjust the midpoint about which contrast is changed, the code is like this:

luma = (luma - contrastBias) * contrast + contrastBias;

Screenshot

Next is colour. I wanted richer colours, but without oversaturating. The first step is actually to desaturate:

Screenshot

Then I increase ‘warmth’ by applying a power curve to the chroma:

Screenshot

Just a touch of depth of field…

Screenshot

Finally, I added quite a hard vignette to cut the light beam and give the image better composition:

Screenshot