This is a project that’s been taking a lot more of my spare time than I’d like, but it’s been a great exercise in really understanding how 3d assets should be managed throughout a show.
It began life as as a geometry caching tool I built for a film I was working on. Because of an extremely tight schedule, we only had time to build a rudimentary character pipeline for the show, and the lighters were referencing in character animation – rigging, fur and all. After spending a lot of time troubleshooting broken scenes, I decided to start putting together tools to alleviate some of the hassle for lighting. After the show was finished I decided to take what I’d learned and build a more ambitious tool to manage the pipeline for a short film I’ve been working on in my spare time with friends.
The primary function of this tool is a model and material manager, aimed for use at smaller studios. Models are automatically cleaned up and tagged with custom attributes before being submitted into the pipeline ‘ materials are stripped off and saved separately. Assets can be checked out and resubmitted by the artists, all the while they are automatically numbered and copied into the artists’ work directories. Metadata for each asset is stored in XML files that are used to maintain versioning.
The custom attributes persist all the way through rigging and/or dynamics, so that if an animator submits his animation, assets in the scene are automatically cached. With one click, lighters can reference all the assets for their shot including the camera; geometry caches are automatically applied. Riggers can work with only the grey shaded models while lighters can call in the materials with one click.
The first version is a little rough, but very functional. It was written entirely in MEL so it was a little slower than I’d like, but I’ve rewritten and optimized some of the core procedures in Python which has sped up the performance. Currently this is written for Linux only due to the reliance on shell scripts (it can function in Windows with Cygwin, but I’ve not thoroughly tested it. OSX can use the tool as well, but again I’ve not tested it for any significant amount of time). Instead of faffing about with Windows command line functions, I’ll just rebuild the next version with Python for all platforms.
Directory Parsing
The core of this tool is the directory parser. The admin sets up the root directory location in the prefs, and the Asset Manager takes it from there. Whenever the user clicks on a menu in the UI, the tool automatically finds the current directories for all ‘asset classes’ for the particular asset (ie: model, rig, material, dynamic rig) and sets an optionVar for Maya to use in it’s core procedures. The optionVars persist even when Maya is closed and are only recreated when needed, speeding up a lot of the unnecessary disk searching that might otherwise happen.

Show directory parsing interface
The default setup gives suggests default directory locations, but the admin is free to customize them to their directory structure. They can also tailor the asset categories and classes.
Model & Material Manager
The second function of the tool is managing models and materials. Models get submitted into the pipeline with attributes assigned that designate shading group assignments. Shading group sets are saved off automatically when a model is tagged or checked in, furthermore, shading group sets can be arbitrarily saved off at any time from any shot’the new sets are tagged with scene and renderLayer information. This easily allows the user to save off a custom shader set for a particular shot or render layer, should it need to be recreated in another scene.
Versioning
Model, material and rig version are tracked throughout the pipe. When any asset is referenced into a scene, an unknown node is placed in the scene with information that tracks the history of the asset from when it was placed into the scene. When material sets are applied, that is appended to the node allowing which gives the user the ability to track the history of any asset in the shot. The system isn’t perfect, but it is useful when something goes wrong with a referenced asset ‘ information on which model, rig or model/rig version was used is retained, allowing the user to version backwards to an asset that did at one point work in the shot.
Since Asset Manager data is stored in unknown nodes and attributes, scenes and assets can be transferred between studios without reliance on an external plugin.
Model Cleanup
Models are flattened, construction history is removed, normals are checked and a polyMoveVertex operation is applied to each shape to reset it’s vertices. Materials are saved off into a separate file which can be called back at a later date. This was done so that when materials are applied in a shot, they will respect shading overrides on existing render layers. When a model is referenced or checked out, materials are automatically applied for the user so no extra steps are required – the process is transparent to the user. To facilitate this, I wrote a very robust sets managing library. A “materials” set is created and saved with each model; contained sets are named after the shading group that was originally applied to the members of each set. When the model asset is checked out or referenced by an artist, the matching material file is imported as well and applied to the model. While this is in no way a complete solution, it has worked very well for our scenes, and gives the artists a little flexibility to change shaders in their lighting scenes without worrying about shader connections being broken in render layers.
Extras

Asset Tagging UI
Some of things I’ve built in to the tool are automatic rendering of 1k imagePlanes in Nuke when a shot is initially setup.
On-the-fly generated shell scripts to customize the pipeline for different shows (only works in Linux and OSX at the moment).
When you submit a model with shaders, file textures are copied to a central textures folder for that show and the file nodes are updated on the fly.
To Do List
There’s a long list of things I’d like to do with the tool; first and foremost is to read and write show/asset data to a database for speed. Currently all metadata for things like models, shots and shows are stored in invisible files in the relevant directories which works, but has some obvious disadvantages if a user inadvertently deletes a file or directory, that data is lost. The latest version does contain a library file with procedures for rudimentary CSV reading and writing, and I’ll be expanding on those in the future.
The check in/check out feature is also fairly robust, but wouldn’t stand up if used by a medium to large team of people. Ideally I’d like to hook it into a system like SVN to handle the processes of versioning and establishing ownership of the assets in the pipe.
Installing
To install, extract the archive into a directory (ideally on a network drive where others can access it). You need to set a Maya environment variable ASSET_MANAGER_LOC that points to that directory. Copy this code and save it as a button:
{
string $assetMgrLoc = `getenv "ASSET_MANAGER_LOC"`;
eval("source \""+$assetMgrLoc+"/am_startup.mel\";");
am_startup("assetManagerUI");
}
Download the script here:
http://www.michaelfessenden.com/downloads/assetManager.rar