This page lists samples of work related to my career in the Animation and Visual Effects Industry (Walt Disney Animation Studios in Los Angeles, US  & Weta Digital in Wellington, New Zealand, AnnexNine in France). Work topics from previous roles are listed at the bottom of this page.
  
Main skills: Maya, Maya API, C/C++, Python, MEL, Qt, PySide/PyQt, OpenGL, NVidia CUDA, Object Oriented Design, PostScript, Linux, ...
Domains: Plugins, Pipeline Development, Computer Animation, Computational Mathematics, Object Oriented Design, Computer Graphics, Film Production, Visual Effects, Project Management, Agile Development, ...  

Samples
Rise of the Planet of the Apes (©Twentieth Century Fox)

Summary
An R&D project that involved a custom Maya plugin to edit motion capture data through an Inverse Kinematics solver to correct foot-slips/gait/posture.


Implementation
The architecture is such that motion data that passes through the DAG graph can be modified in a similar manner as geometry data being modified by a Maya deformer node. 

The hypergraph above shows an AsfAmc node that is connected to an IK node which in turn is connected to a proxySkeleton node. The AsfAmc node represents the original asf skeleton and amc motion capture data. This data is then passed through the connection and gets modified by the IKNode before it reaches the proxySkeleton node. The latter generates the Maya Skeleton before it connects each virtual joint (shown in red/blue) with its Maya counterpart thereby transferring the edited motion onto the actual rig.     

Skills used: Autodesk Maya, Maya API, C++, MEL, Python, OpenGL, NVidia CUDA, Linux 
Motion Capture Data (Production data not available): Hochschule der Medien (HDM), Stuttgart, Germany / CMU Graphics Lab, Pittsburgh, USA


Bolt (Bolt, ©Walt Disney Animation Studio)

Summary
A custom Autodesk Maya plugin to deform geometry within multiple regions of influence by pulling and pushing a series of co-dependent handles by means of the Maya Move tool. 

Connected handles are called Wires while a set of loose handles is called a Cluster. In the image below there is one wire with 3 handles (red spheres) and one cluster of 2 handles (green spheres). Each handle has a 1-on-1 relationship with a pre-selected mesh vertex.

The wire deforms the geometry in a perpendicular direction away from the wire itself. The cluster deforms the geometry in a radial direction with respect to its handle.

All the handles feed into one deformer node which is agnostic to what ever type of modifier (Cluster/Wire) is being used. The design is such that at any time each handle remains attached to the geometry's surface irrespective of the deformation inflicted upon by adjacent handles.

https://youtu.be/tR5nuecfYiA
What you see - the Wire with the red spheres is pulled up first and at the same time their influences are being increased. Then the left green Cluster handle is 
pulled up while its influence is being increased. And finally the right green Cluster handle is pulled up but only just while its influence is increased quite significantly. 
Throughout this animation one can see that the spheres remain on the surface of the geometry no matter how much they deform each others region of influence.

Benefits: 
  • This deformer provides riggers, character finalling as well as animators an intuitive and simple way to tweak geometry by means of multiple controls that remain on the surface of the mesh (The standard Soft Deformer that comes with Maya does not have this capability. One could try to connect multiple standard Soft Deformers in series but then only the last handle in the chain would stay on the geometry surface while the ones earlier on in the deformation chain may float in space). 
  • Animators can add handles at will to achieve a pose that otherwise would have required a rigging tweak back in the rigging department i.e. it gives the animator the flexibility to tweak geometry on a per shot basis. 
  • Industry feedback has shown that the intuitive and modular nature of this tool helps to reduce production costs e.g. crew members reach their quotas more easily & there is a reduced need to send a rig back upstream for adjustments.

Skills used: Autodesk Maya, Maya API, C++, MEL, Python, NVidia CUDA, Object Oriented Design, Linux


Grace (Avatar, ©Twentieth Century Fox)
Summary
A custom Autodesk Maya plugin to create/manipulate a geometrical shape to mimic muscles and tendons in digital doubles. Multiple muscle primitives can overlay each other without collapsing onto each other. The controls to stretch and bulge the shape of this primitive are key framed on a shot by shot basis rather than being driven by numerical simulation. 


Implementation
The deformation of the base geometry is achieved by applying a transformation matrix that represents the difference between a core base wire and its corresponding control wires on the outer surface of the geometry. Maya Nodes: MPxGeometryData, MPxSurfaceShape, MPxSurfaceShapeUI

Skills used: Autodesk Maya, Maya API, C++, OpenGL, MEL, Python, PyQt, Object Oriented Design, Linux


Rhino (Bolt, ©Walt Disney Animation Studio)
Summary
A custom Maya plugin to deform geometry such that it squeezes Rhino's paws and tummy when they are pushed against the inside of his ball. This work was undertaken by a small team of people in collaboration with Pixar Animation Studios.

Skills used: Autodesk Maya, Maya API, C++, Python, PyQt, MEL, Object Oriented Design, Linux, Team Lead.


Snowy (The adventures of Tintin, The secret of the Unicorn, ©Paramount Pictures, Columbia Pictures, Amblin Entertainment)

Summary
This project involved the development of a Node Graph to visualise, verify, construct or manipulate asset data and its dependencies.

Each node represents an arbitrary data object with its own attributes and build-in methods (e.g. a single Maya command, a Python script). The user builds the node graph by selecting/adding the appropriate node from a given node palette. The latter consists of nodes that are specific to a particular department (e.g. Creatures, Mocap). Nodes are connected through their agnostic plugs in order to define the graph's traversal paths.

The node graph is traversed in both the up and down direction. Once the traversal reaches a node it invokes the corresponding up or down methods, depending on the direction of the traversal. Eventually a full up/down traversal will have manipulated the graph's data in a predefined way based on the instructions held in each individual node.


Applications
  • To assemble an asset (e.g. creature) from its predefined parts. The up traversal verifies/load/readies each component and the down traversal puts the entire asset together. The final result is an asset that is up-to-date and that is ready for publication.  
  • To visually identify down stream elements that needed to be updated e.g. as a muscle model changed then all the nodes downstream that either used that model or were dependent on it would be flagged as out of date by changing the node's colour.
  • To update a graph by comparing its version to the ones on disk. If there were newer versions, based on the structure of the graph, it would then replace the nodes that needed updating and publish a new version of the graph
  • To interactively create new nodes out of existing nodes by identifying a sub-graph, separating it out into a collapsible macro node and adding it to the node palette.   
Skills used: Python, PyQt/PySide, Autodesk Maya, XML, Object Oriented Design, Linux.


Chicken Little, Bowler Hat Guy (Chicken Little, Meet the Robinsons, ©Disney Animation Studios)

Summary
At Disney CAPS was the Computer Animation Production System that computerized traditional ink and paint methods and added many multiplane camera techniques and effects.  When production requirements became more stringent an initiative was launched to replace CAPS with a more modular pipeline system called CHIP that could combine the latest animation and compositing techniques with the ever increasing computer power that was available on the commercial market. 

I was recruited by Disney to to join this CHIP project and was asked to develop modules for its infra-structure as well as pipeline tools for end-user production use (e.g. Layered configuration system, Node Palette for Compositing, Album tool for shot/scene continuity, Animation timing chart in PostScript, Rigging tools...) 

Skills used: C/C++, Python, PyQt, Qt, OpenGL, Maya, Maya API, Object Oriented Design, PostScript, Linux


Special Effects - Real-Time Helicopter Flight Simulator for Australian Navy [Computer Sciences Corporation, Sydney, Australia]
Radar Display System - Validation and Certification of European Radar Systems [Eurocontrol, Paris, France]
GIS Graphics - Geographical Information Systems [Unisys, London, England]
Seismic Data Display System - Visual Evaluation of Oil Well Data [British Petroleum, London, England]
Finite Element Simulation - Semi Conductor Device Research [General Electric Company, London, England]