First, some background. When I started at Vigil as an Environment Artist, the extent of Tech Art at the studio was a few tools that had been created for Darksiders I back in 2007. Few people at the company know MaxScript, or Python, and the Environment Art team had no one to go to if they thought of something that needed automation. If those people existed, their presence wasn’t well-publicized. In my first few weeks, I noticed myself hitting the same buttons hundreds of times to do the same things. I pinged h6x6n to give me a hand and automate one of these things, and in the process acted as an intermediary between him and Max to make sure the code worked. From there, the artists immediately around me started to request other automated macros. A few months later I was adding these scripts and others into our official toolset, had access to the code branch, and spent more and more time writing tools both in Python and Maxscript. The scope of the tools I was writing grew, the number of teams I was assisting grew, I started talking to programmers, helping producers generate reports on various pieces of data in the game. I was a tech artist. Familiar story, yes?
As the tool and tool support load started to let up for a couple weeks, it was dawned on me that in order for Tech Art to grow at Vigil, I had to find ways to move it from being “That one guy in the corner who knows Maxscript” to a more professional, scalabe, and accessible entity. To build up the Tech Art infrastructure here, I want to have the following in place:
- Scalable Tech Art Task Pool
- Training Resources
- Support Process
- Track Tool Usage
- Transparency to Production
- Robust End-User Documentation
- Robust Tech Art Documentation
- Internal Code Libraries
- Increase Tech Art Accessibility for Feature Requests and Bug Reporting
- Be able to Deploy Alpha Toolset to Trusted Partners
Coincidentally, this all started dawning on me about the same time as the 2012 Boot Camp talks got posted. Being in such a lonely position, I thought it’d be useful to expose the process of building up the Tech Art infrastructure at Vigil to TAO in order to take in feedback, advice, and pitfalls I’ll potentially run across.
So, where we are now, in terms of meeting the goals I set forth:
-
We have a viable platform for the effective distribution of our DCC app toolset. This tool will ensure that all custom scripts in the tool’s source directory will be applied to their equivalents in the C:\Program Files\Autodesk\3ds max 2012\ directory every time the user starts up 3DS Max. Tools are modified in our Perforce code branch, and using our build machine, the code from that directory is moved to the tool’s source directory.
-
A company wiki, and a Tech Art hub for that wiki that is project-independent. The Tech Art hub is broken down into the following sections:
– Max Tools Userguides
— Shows images of tools in 3DS Max, their GUIs (if applicable), and a brief description of how the tool functions
– Animation Tools Userguides
— Shows images of Animation-specific Tools in 3DS Max, their GUIs (if applicable), and a brief description of how the tool functions
– Python Tools Userguides
— Shows images of tools built exclusively in Python, and independent of any other application, and a brief description of how the tool functions
– Reports Userguides
— Shows examples of the contents of each Excel report that is generated by Tech Art scripts every morning based off our build data
– Goals
— Shows a breakdown (by game) of the tools, features, and other high-level goals ahead for Tech Art
– Resources
— Reference links for languages used by Tech Art, style guides used for languages used by Tech Art, interesting links, etc.
– Tool Spec Directory
— This is something new to which I’ve started adding, and one of the things I’m most curious to get feedback on. This lists new tools, features, and tasks and their associated spec sheet. -
Libraries
– A library of commonly-used Max functions that are stored as loose functions and accessible via the “FileIn” command
– A Python module of home-rolled functions and classes used by our Python scripts
What I’m doing now:
Transparency to Production
I have a template form for questions I feel need to be answered before moving ahead with a tool. This is also useful for me in planning out larger tasks, like building and implementing internal Maxscript libraries. Outlining the basic plan to get something done, and it looks something like this:
Strategic Questions
What is this tool/feature?
How will the target user interact with this tool/feature?
Why does this tool/feature need to exist?Tactical Questions
What are the subsystems and steps necessary to complete this tool/feature?
What are the reviewable phases of this tool/feature’s development?
What else would you expect to see in a document such as this? Can this be trimmed down to make it more streamlined?
Internal Code Libraries
I’m evaluating our current set of tools looking for boilerplate functions, functions already extant in the internal library that could be better utilized, tools that, because of their relative simplicity, could be added to an internal library and modified slightly to be usable both in their macroscript, and accessible via one line of code. Also been looking at external libraries, like the TAO Maxscript libraries, to learn from their structure and see what I could pull from and use in-house. Loose structure for these libraries lookes like this:
osOps
- Functions to interact with the operating system that don’t come stock with Max
mathOps
- Math functions that don’t come stock with Max (lerp, round, sum, angleFromPoints)
pyOps
- Wrappers to interact with all our Python tools
p4Ops
- Wrappers to interact with Perforce, either through Python (to get the return from P4) or directly through Commandline
oblivionOps
- Functions to interact with our other in-house plugins (custom materials, user properties used by our exporter)
vUtils
- Miscellanous functions used across many of our tools (logging, reading text file, writing out to text files)
VigilTools
- Wrappers for much of the less lengthy and easily adaptable to take inputs from commandline and selection
- Wrappers for some GUI tools that are call as both standalone and from other GUIs
All the Maxscript libraries will be held in structs, instantiated on startup.
Again, thoughts are appreciated on that structure, and any other advice from y’all on building up the Tech Art infrastructure at a studio.