vfx stereo td compositor
Showreel VFX breakdowns Programming Resume Contact
During my work in Aardman, I've developed several tools to help compositors in their daily work, including gizmos (programmed in Python) and plugins (programmed in C++). Following is a list with the most relevant as well as a description of their functionality.



Gizmo written in Python.

Many shots in Pirates! involved the rendering of skies, sometimes still, sometimes with a camera movement. There was the need of creating a tool that allowed the generation of 3D environments with layers of clouds in different depths, to feel parallax when the camera moved. Also a per-cloud tweaking possibility was necessary in order to readjust the position, depth or stereo of the clouds, so that DMP artists didn't need to redo the work when there were changes in the reviews.

AardSky was created to solve this situation. The gizmo outputs a stereo image of a rendered sky and has 3 inputs: an image input for an EXR file which has all the elements (background sky and all the clouds) separated in layers, a camera input (usually the tracked camera corresponding to that shot) and, optionally a sea render as a reference for the horizon line. Once the sky is built, every cloud can be controlled individually, tweaking their position, rotation, scale, depth in 3D space or stereo offset. Additionally, global settings can be modified. This controls global translation, rotation, scale or depth, but also the IO space between cameras, copy settings from other skies. It's also possible to select different types of outputs and formats. An additional tab allows the generation of artificial rocking for static scenes where a bit of movement was considered necesary. The gizmo generates an Axis for the camera, so that information can also be used elsewhere. Finally, one of the outputs of the gizmo is a coverage map reference for DMP artists. This coverage image maps the camera movement into an unwrapped image of a sphere. This way, matte painters can paint the clouds only where there's needed and where the camera is moving. The DMP generated based in this references, when used as an input in AardSky, matches exactly the camera movement and the position of the clouds.

This gizmo was used extensively in almost every shot that included a background sky.

AardSky interface
AardSky interface. From left to right: Build settings, global settings (such as global translation/rotation, global stereo offset, output options...), Sky settings to adjust every cloud individually (position, rotation, scale, depth, stereo offset), rocking settings to add rocking movement to the system and DMP reference, to generate coverage maps as a reference that can be repainted by DMP artists and used as an image input to the node.
AardSky coverage maps
To the left, the spherical coverage map generated by AardSky for DMP. To the right, the sky painted using the coverage map as reference. Every cloud is in a different layer, as well as the background.
Inside AardSky
The 3D environment provided by AardSky: stereo cameras and the background and clouds layers of the DMP painting separated in different spheres, providing depth and parallax.



Gizmo written in Python.

The way Aardman films the shots is "in 2s", that is every frame is repeated twice, to give a more stylized look to the animation. But sometimes there are some frames "in 1s" (that is, normal frame after frame) to add some speed in certain situations. This can cause problems when trying to track or key shots because there could exist slight differences between frames that should be the same. Also, when rotoing these shots, a lot of time is spent duplicating the keys.

ConvertToOnes transforms a shot filmed in a mixture of 2s and 1s into a shot only in 1s. To do that you scrub the footage looking for frames in 1s and adding them to the list with the corresponding buttons "Add", "Remove" or "Remove All". Using sanity check makes this task very easy by highlighting frames in 1s. After your work is done, you can copy the same node in the end and enable "reverse" to get back to the original distribution of frames. This tool was able to save up to 50% of work in certain shots.

ConvertToOnes usage and interface  
ConvertToOnes usage (left) with the second node in "reverse" mode and interface (right). Sanity check allowed to add or remove frames in 1s very easily.   With sanity check enabled, a frame in 2s looks as the one on the left. To the right, a frame in 1s displays a blue halo, making it easy to detect them and add them to the list.



Gizmo written in Python.

One of the needs near the end of the project was to reedit some shots by skiping or holding some frames to make the action faster or slower. This could usually be done directly in the final render of the shot but, in many cases, specially were cgi elements like water, moving skies or fog where added, this had to be done inside the comp, to prevent jumps in those elements. This task had to be done manually, holding or skipping the desired frames.

AardEdit did this task automaticly, simply by selecting the updated EDL text file from the server and clicking "Go". The gizmo parsed the text file and obtained the desired data to modify the timeline. In addition, it trimmed the comp to the new length and put thr slates back in the new last frame automaticly.

AardEdit usage and interface   AardEdit timeline graph
AardEdit usage (left) and interface (right). The tool works simply by passing an EDL text file.   The timeline is modified to match the data in the EDL file.



Gizmo with no programming.

One of the features of AardSky is the possibility of generating artificial rocking so that the clouds moved as if we were on a ship. In some shots, however, the sea was prerendered, so if the shot required rocking, matching sea and sky could be difficult.

AardSeaRock used an AardSky node and the render of the sea as inputs. Then the sea was projected onto a card and rendered with the same rocking movement of the sky, hence matching perfectly.



Gizmo programmed in Python.

MasterNode allwed a simple way of disabling nodes or groups of nodes in a comp without affecting batch rendering. This way, it is possoble to disabe heavy parts of the comp we know work well, without having to enable them for render.



Plugin written in C++.

AardSky relied on the CurveTool node to autodetect the bounding box of each cloud layer, so that it could be cropped and add a label to each cloud in its center. Unfortunately CurveTool can be quite slow, specially if there's a lot of layers to crop.

AutoCrop is a very fast plugin written in C++ that simply detects the boundaries of an image based on its alpha channel and makes the result visible so other nodes can use it. It's derived from XXX and works at pixel level.