I consider myself a "Technical Generalist" at heart. Most of my professional experience has been spent problem-solving in one way or another. A big part of what I do is build tools and solutions to overcome a range of day to day challenges. This includes general artist workflow, major pipeline and systems development, or simply finding clean and efficient ways to fix stuff when it breaks -or prevent the breakages from happening in the first place ;o)
One of the most complete set of tools I've built to date are my custom rigging tools. From generating guides to automate the process of constructing humanoid skeletons and rigs, to custom joint alignment tools, to baking tools for automating the process of converting dynamic simulations into bone driven animations.
Less glamorous but non-the-less important, I built a custom tool for standardizing how artists work with vertex color sets - keeping set names and color ranges consistent from asset to asset. This tool also incorporated single click creation of AO based on scale presets, as well as the capacity to copy individual channels between sets, invert them, merge and clear them. I also added a quick solution to fade border edges with vertex alpha giving artists the control to define over how many parallel edges the transparency would fade off over. The most advanced feature though was to project specific data from any source object and for this I wrote a custom solution to recursively ray-cast from all the verts on the target model onto the surface of the selected source and sample an average from the verts associated with the nearest face. This came in useful if a model had been considerably tweaked and the integrity of any custom vertex painting had been broken - the artist could essentially project from the original model onto the modified one and retain all the vertex color work.
This next tool was an updated version of a custom tool I wrote for 3D Studio Max when I was working on Dragon Age at Bioware. Its basically a solution for "wrapping" simplified physics primitives around objects or sub-object selections whose transforms have been frozen or no longer represent the objects local axis. This solution "wiggles" the selected object in each axis until its bounding volume is as small as it can be in each axis. This is assumed then to be the best alignment for the object to have collision match. It then creates the appropriate primitive that fits within the dimensions of the flattened object bounds, and then "wiggles" the physics prim negatively in reverse order and matching it to the original selection. Simple, but a monumental time-saver!
Prior to Maya 2012, there was no native tool for managing Namespaces - this sucked - so I built one. I think its still better than the one that ships with more recent versions of Maya as it offers more functionality like the capacity to move selected items from one namespace into another directly within the tool.
At some point during the course of development, there will be the need to batch assets. Be it simply to re-export them due to a pipeline or data change, or to roll out a mass fix to broken assets. This is my Batch Tool. I added the capacity to run custom Python code that the user could enter into a simple text field on the interface, or run an external script. This has been a life saver a number of times across many projects. One interesting thing not apparent from the following screen shot was that under the hood, I built the tool to keep track of processed scene files and store values in a number of arrays that could then be accessed after a completed batch. A typical use case for this was to have the batch tool query scene files once opened to look for a specific object or attribute and then log this internally to a list of files that could then be manually reviewed.
At Propaganda games, when working on the Armada of the Damned game, we used FaceFX to handle all our lip-syncing and basic facial expressions. This was predominantly a way of handling the massive amount of dialog that had to be animated. The problem with FaceFX at the time was that it expected a match between skeleton data on import and namespaces would cause it to not find target joints in the working scene file. It could only handle a one to one workflow and there was no way to have multiple characters in a single scene file and selectively match animation to the appropriate character.
I basically re-wrote their import scripts to handle multiple characters as well as namespaces, giving the animators the capacity to pull faceFX data onto characters that were fully rigged and have the facial animation data drive the controls of the character and not the joints.
The following video shows my custom tool in action.
The following video shows a tool I built for the VFX team on the same project. We licensed Gamebryo for the content pipeline and the artists wanted to streamline their workflow of attaching particle assets to character assets, as well as having a way to create and apply presets and set values across multiple emitters simultaneously.
This was a simple R & D project, again developed in my time at Propaganda Games, that provided a simple interface to Perforce directly within Maya. From this tool, artists could sync assets, check out, revert and submit without leaving Maya. In the background I did all the heavy lifting to make sure files were up to date, not checked out or locked by other users, and generally validate the interaction between the current working scene file and the file status in Perforce. The tool kept the user informed with HUD messages.