Technical work

As an engineer, I've always enjoyed problem solving and over my years working in Animation and Computer Graphics, I've had the opportunity to write many artist tools and find solutions to several interesting problems related to rendering. I've tried to summarize some of them here. 

 
 
th_laydown_comp.jpg

maya plugins for nova

I wrote a number of Maya plugins for the Creative Team at DWA Nova. Some of these included:

  • Tool to enable modeling/surfacing artists to create a library of looks for any asset.
  • Tool to enable lighting artists to easily switch between looks for rendering different variants.
  • Plugin to import scene data from studio's proprietary lighting package and convert it to an equivalent Maya scene.
  • Exporting Maya's scene data to our proprietary renderer's readable format.
  • Batch Render plugin to submit our renders to the studio's render farm.
 

NUKE plugin for GLobal aov manipulation

AOVs (Arbitrary Output Values) provide a way for artists to output any arbitrary shading network component into different channels of an image. As a simple example, the artist may want to separate the direct lighting contribution from the bounce lighting and then combine them during compositing, after manipulating them individually.

The plugin I wrote allowed the artist to manipulate all of the same AOVs for all the selected layers (eg: the bounce lighting for all the characters) globally for color, saturation, exposure, brightness etc. This way, if art direction wanted the bounce to be warmer overall, we could make a global change to all layers in Nuke with just one dial.

 

overhauling the Studio's model reading/caching mechanism

We had to re-design the model reading and caching mechanism at DreamWorks to speed up artist workflow and rendering efficiency both interactively and in batch mode. This required me to re-write and modify a large set of global studio tools affecting nearly all departments. We made the major "switch" in the middle of production of our first stereo film (Monsters Vs. Aliens - 2009) and it helped us eliminate some unwanted overhead and saved a significant amount of time that was spent reading in geometry data before rendering. 

 

validation Tool to check for latest animation/cfx/crowds

One of the most common problems that artists came across was that their rendered geometry did not reflect the latest and greatest changes in animation and/or cloth simulation. This was partly due to communication gaps between departments and partly due to a 'pull' vs. 'push' model update system. In either case, it meant a lot of re-rendering for no lighting changes. I wrote a tool (both GUI and command line) for artists to quickly check if their models were up-to-date with the published Animation, CFX and Crowds models, before kicking off their renders. The GUI version also allowed them to visualize the models and see any apparent problems.

 

crowd simulation on 'The Croods'

In the piranha-owl (bird) attack sequence on 'The Croods', we had up to 40,000 birds in each shot. Even with a 'Run-Time Deformation' solution using the 3rd party software MASSIVE, the frames were too heavy to render in a reasonable time. I worked with the Crowds team to replace this solution with instanced geometry, which is slightly trickier with animated models. Also, we could not have the same animation on all the birds. So we came up with a clever way to assign a randomized animation offset on each bird, so that their wings were not all synchronized. This brought down the frame render times to minutes.

 

plugin to create a hud for image based lights (IBL)

We used Image Based Lighting for the first time on 'The Croods'. I wrote a plugin to create an IBL Heads-Up-Display (HUD) in the 3D viewer of our lighting package, in order to easily visualize and manipulate the environment lights. The HUD was pivoted with an offset from the camera, so that it always lined up at one of the four edges of the frame (based on user preference). There was also an option to pivot the HUD from a selected geometry object, which made it easier to work in perspective view. 

 

separating 'diffuse' and 'specular' passes before the AOV system

We did not have a rendering solution for generating AOVs before 'How To Train Your Dragon 2', because in feature animation, we had a more 'purist' approach with lighting while compositing was reserved for minor tweaks . That changed with The Croods, when we decided that separating the shading passes could save us a lot of rendering iterations and cost. I wrote a wrapper around our current scene definition system to allow artists to break up their renders into different passes, most commonly 'diffuse' and 'specular'. They could also other create passes for any combination of shaders or lights, if desired. This solution was also used on 'Rise of the Guardians'.

 

Tool to auto set-up render layers and generate diagnostic renders

I wrote this GUI tool for the lighting pre-production stage, to automatically set up render layers for 'each individual part' of a given geometry asset and then auto-kick off diagnostic renders. The resultant renders had a text overlay of the geometry part name and the render stats. This was a great way to test every hero character or environment asset on the show. The tool helped us detect any non-optimized or heavy-to-render pieces so that we could have them fixed by modeling and/or surfacing before full-fledged production. 

 

plugin to correct feet contact with the ground

On 'The Croods', we often had our characters interpenetrating or floating above the ground after the ground displacement was applied because of the highly uneven terrain. I wrote a plugin to fix the ground displacement in a shot, based on where the character's feet landed. It was a spinoff of the FX department's footprint system and I extended it to deform the groundplane either up or down, with a user defined radius. This way we didn't have to ask surfacing to paint new displacement maps for every problematic shot.

 

tool for crowd data validation

I wrote a command line tool that artists could run in their shot's environment to validate crowd data. The tool listed the character types, their count, asset names and checked whether the models existed and were up-to-date with CFX.  It could be run in verbose or summary mode. The latter listed quick statistics and flagged only what appeared to be broken.

 

fur LOD set up on 'Kung Fu Panda 2'

I worked on the Fur Level-of-Detail (LOD)  set up on 'Kung Fu Panda 2' to enable artists to automatically set the right LOD values for each character in their shot.  They could run the auto-lod selector command for one or multiple characters, and that would set an override on the 'density' and 'width' of all the related fur objects in their scene. The LOD values were based on the highest percentage screen coverage of the character for that shot.

 

GUI for installing look dev rigs using global templates

I wrote a GUI 'installation' tool intended for use during pre-production stage to pull in the latest studio standard look dev lighting and compositing rigs for a show. The goal was to have all shows work with the same standards (at least as a starting point) and use the same HDR library, so that the look dev was done more reliably.