Hey Tech Artists!
My name is Rich Katz, I’ve been in the game industry for over 28 years, first as an artist, then as a Technical Artist specializing in rigging, animation, tools, and pipelines. I’ve built rigging systems and animation tools for several studios including at Zenimax Online for the Elder Scrolls Online, and at Blizzard for World of Warcraft.
Over the past few months, I’ve been building a rigging framework for Maya. I got far enough along in development that I decided to pause and share my experiences in developing the system.
I started the project with 3 pillars:
-
Make extensive use of Maya 2020’s matrix nodes and offsetParentMatrix. I wanted to see how much I could replace traditional constraints with these matrix nodes and attributes.
-
Get more familiar with Python 3: type hints, f-strings, structural pattern matching, and dataclasses.
-
Utilize more OpenMaya API 2.0 and less maya.cmds.
I wanted to build the project with a defined structure:
-
A core library of maya rigging utilities
-
A class-based interface for maya joints, dag nodes, shapes, and controls
-
An abstract base class “plugin” system for rigging components
-
Fully data-driven: Serialization/Deserialization of components and other elements
-
PySide6 UI - fully Model/View design
I wrote a detailed breakdown of the framework. What’s in this retrospective:
-
The first few chapters are focused on building a library in Python for supporting the rest of the project. This includes some theory on project organization, and modules full of utility functions for building rigs in Maya.
-
The next set of chapters detail the base set of rig “components”, which actually build the rig. Here I’ll talk about the Maya node setups and linear algebra for driving the rigs, and how I create and connect them in Python.
-
Finally, the third set of chapters focus on building a solid User Interface in PySide. I went pretty deep into making the UI feel good and easy to use, employing item delegates, custom styles, drag & drop, and a full model/view pattern driving the design. While the interface is built for use with this rigging framework, I think a good portion of the information is applicable to any tools utilizing PySide/Qt.
It’s not exactly a tutorial, but I hope readers can learn something about how I built it, how I solved some difficulties I encountered, and hopefully gain some inspiration for building similar systems yourself.
It’s a lot of information, so I’ve broken it up into about 15 chapters, which I plan to publish every 2 weeks via my website https://www.katz3d.com/
Thanks!