Set in the cold winter months of 1950's Sweden, we witness the aftermath of a deadly storm having caused the failure of a dam. Caught in the water flow, the boat of one of the dam mechanics has ended up in a precarious position.

38 678 5
Round of applause for our sponsors



Below are LookDev renders for some of the assets that were created for Downstream. All assets were textured in Mari and LookDeveloped using MaterialX.



For the water FX I created a TOPs Network that would help me speed up the iteration process. I extracted the metadata from the files of the sim and rendered images with python and this data then got applied to the final mosaic. This data was useful to have in estimating how long a render would take and how much storage space it would be using. Moreover, I managed to get a python node to send me an email with a message saying that it's done and also attach the .mp4 mosaic to it so that I could be reviewed from anywhere. 

This worked well on a single computer, but it was not compatible with our farm. However, the farm could handle ROP networks and so I managed to integrate the ROPs to compliment the TOPs Network and speed up the process by distributing the workload on multiple machines.


Our USD based pipeline was pivotal to this project being made as there was a large amount of data that had to be created an managed. Utilising USD allowed us to have full control over every section of our pipeline and to easily update assets and shots. We used a shot.usd, asset.usd based USD pipeline where we authored each asset individually and referenced them into a master shot that contained all of our layers which allowed us to keep our file sizes small and manageable.

Pipeline - Automation

Due to the limited time we had to create such a technically ambitious project, we felt like it would be a good idea to start automating some repetetive processes. The key process that I targeted in the beginning was the authoring of USD assets. In order to speed up this process, I packed the authoring process into an HDA which utilised Python scripting to automate the USD set up as well as the assigning of materials. Images of the HDA can be found below.

The other section of the pipeline that required organisation and automation was the lighting/rendering side due the amount of layers that were being imported into the render scene. We controlled this by making a render node that allowed us to switch between shots and render passes, this tool also avoided any overlap within the shot.usd files meaning there were no render artefacts. This tool was created using Python and set up to work as an HDA.

Defining the Look

The two big inspirations in terms of the look for this film were The Batman and the evening dam scenes on Aldhani in episodes 5 and 6 of Andor. Because our film doesn’t have a bright sky with lots of bounce light, we wanted to lay a strong emphasis on practical light sources to make the dramatic lighting feel plausible and fill the otherwise overly dark interior of the Boat and exterior of the Dam for which The Batman and Andor were great inspirations.

Below are a few references that were used for lighting, compositing, and grading.


Since this is a full CG film one of the big tasks for me was making the shots feel like they’ve been shot with real cameras. This and because the film is set in the 1950s I took a deep dive into old cine lenses and analogue film characteristics to emulate all of their imperfections. In the end, I decided to go with the Meyer Gorlitz Primoplan 30mm f/1.9 as my base lens since I really like the overall softness and strong distortion/catseye effect towards the edges.

Below are some of the reference images I used as well as a simple emulation test.

Another important factor to make the shots feel more believable was the decision to not shy away from dirtying up the lens. A big inspiration for that came of course from Greig Fraser's approach in The Batman. Similar to that, we really wanted the viewer to feel the roughness of the environment/situation and the best way to do that was to make the lens feel part of the environment and weather conditions it is in.

To achieve this, I developed a few nuke tools whilst waiting for initial renders to make my process easier later on. Most prominently, was the development of a procedural Water on Lens tool that reacts to the rotation of a camera input and also tries to emulate some of the caustics found when light interacts with defocused water droplets.

Below are first some of my references and then what my tool generates.

Comments (5)