AWS Artist Series: Compositing Spanner
This is the second post in our AWS Artist series. For more information, read the first post “Creating characters with dynamic wrinkles”.
Spanner is a short film about two bridge makers: Ulysse is an overly confident worker whose insecurities become very evident when he encounters Noa, a bridge building expert. Spanner was created by FuzzyPixel, an internal AWS team that tests the tools and services that AWS is developing for animation and visual effects studios. Our team ensures that these tools and services stand up to the rigors of real-world production. To do so, we create animated content using industry standard tools, and we aim to meet the level of complexity of the productions that our customers work on. Spanner was animated with Autodesk Maya, rendered with Autodesk Arnold, and composited with Foundry’s Nuke.
Our compositing approach
Our goal during the production of spanner was to get as close to the final look as possible in render, and not rely too heavily on compositing. However, we were aiming to create extremely complex and high-quality environment assets and characters. This meant that our files were very heavy, resulting in long load times and sluggish viewports. We did a lot of optimizations, but we ended up lighting the backgrounds (rock pillars, foliage, and clouds) and the foreground elements (characters, bridge, and props) separately. The foreground and background layers were then composited together in the composite (comp).
We also wanted to give ourselves as much flexibility as possible when it came to adjusting depth of field and motion blur, and making color corrections. For this reason, we rendered depth and vector passes out of Maya so that we could add depth of field and motion blur in the compositing phase of the project. We also rendered out arbitrary output variables (AOVs) and Cryptomattes for the foreground and background so that we could have the most amount of flexibility when color correcting the rendered images.
We used the compositing phase to really nail the color gradient that we see in each shot of the film. Our environment artwork contained a strong warm to cool gradient across the environment, and we wanted to push that gradient in the final look.
These are the steps we used to achieve our compositing solution.
In Maya, we rendered out all of the necessary AOVs so that we could rebuild the beauty image in Nuke and adjust the image per channel. Make sure you select all of the necessary AOVs. If you don’t render out all of the correct AOVs, you will end up leaving important render information out of your final comp. To select the AOVs that are rendered, open the render settings window and navigate to the AOVs tab.
For Spanner, we rendered out these AOVs: direct diffuse, indirect diffuse, direct specular, indirect specular, coat, subsurface scattering, emission, transmission, and volume.
We also used a Cryptomatte AOV, which is a plugin that allowed us to isolate an individual material in the image that we wanted to color correct in Nuke. By combining AOVs and Cryptomatte, we are able to select an object in the image and color correct it based upon a single characteristic of its material. For example, in some shots if we wanted to boost the reflectivity in the characters eyes to make them look more glossy, we could increase the indirect specularity of the character’s eyes. This type of flexibility made it easy for us to quickly add some nice finishing touches on the final images.
If you are interested in replicating and/or following along on your own, you can download the Cryptomatte plugin here.
Now keep in mind, depending on the contents of your scenes, you might not need all of the same AOVs that we rendered out. For example, if you don’t have any volume materials in your scene, you won’t need the volume AOV. We rendered out all of our AOVs and Cryptomattes as a single layered EXR to make it easy to access everything we needed with a single read node.
Rebuilding the beauty
When our layered EXR sequence was rendered, we read it into Nuke and broke out all of the individual channels, and combined them so that the beauty was rebuilt from the individual channels.
Here is the process for setting up a template for rebuilding the beauty from the AOVs:
- Create a read node and navigate to the path of the EXR sequence. I like to set up a reformat node for each read node so that if I am not rendering at full resolution, all of the image layers will still line up properly.
- Create a shuffle node for each of the AOVs. I like to name the nodes with the name of the AOV.
- Merge each shuffle node to the next.
- Check that you have all of the correct AOVs rendered by selecting the read node and the final merge node and toggling the view back and forth. They should be identical if you have all of the correct AOVs rendered out.
Repeat this process for each of the layers you are comping together. For Spanner, we had a background layer (the rock pillars, foliage, and cloud layer) and a foreground layer (the characters, props, and bridge).
Depth of field
To make sure we could dial-in the depth of field (DOF) and not have to wait to re-render the frames if we wanted to make adjustments, we elected to add the depth of field in comp. We used the ZDefocus node and a depth pass that we rendered out of Maya to achieve the final look.
None of the shots contained motion blur that was rendered in camera. Instead, it was added as a post process within Nuke. A few methods were employed to achieve a consistent and clean look that worked with the highly stylized animation. A large number of shots contained subtle movement and dialogue. In these instances, Nuke’s “Motion Blur” node, used with motion vectors, provided the correct amount of softening with very little artifacting. However, there were a handful of quick, action-packed shots with highly exaggerated animation, with large amounts of squash and stretch. In these cases, Nuke’s “Motion Blur” produced obvious artifacts, due to errors in the motion vectors. At times, it made the shot look broken, or the motion vectors were unusable, especially those rendered from a DCC package. To remedy this, a mixture of uniform gaussian blur and directional blur was used with keyed positions that would match the quick bursts of action. In these shots, characters could cover the entirety of the screen within 10-12 frames. This method assisted the animation by softening the character, stretching the character lines, and pushing them back into the plate more naturally.
Gradients, LightWrap and vignette
To push the warm-to-cool look in the concept art, we overlaid gradients into the comp. These gradients were created by combining a ramp, boosting saturation with a color correct node, and reformatting the ramp to match the same resolution as the final image. We then merged these into the rest of the comp.
To better incorporate the foreground and background elements, we added a LightWrap node to the foreground layer. The LightWrap node adds a subtle glow to the foreground layer where it is on top of a bright background.
Lastly, we added a subtle vignette on each shot to focus the viewer’s eye. This vignette was set up using a roto node as a mask on a constant. We multiplied this on top of the image at the end of the node tree. Here is a video showing the addition of the gradients, LightWrap, and vignette to a rendered image:
Breakdown of gradients, LightWrap and vignette added to a shot from Spanner
Overall, the compositing strategy that we employed worked really well for Spanner. We had a ton of flexibility, which allowed us to really dial in the look that we were going for. Please check out the full short film Spanner and search for AWS Artist Series for more blog posts on the productions created by the FuzzyPixel team.
Other compositors on the film: Cris Fudge, Amaru Zeas, and Stephen Jenkins.
Have a question for one of our artists, authors, or compositors on this series? Let us know in the comments or on social media. Once the series is complete we will be posting a roundup of Q&A.