JSON vs. cPickle by Jeremy Ernst

Hey all!

Just a quick mini tutorial/blurb about using JSON. In the first version of the Animation and Rigging Toolkit, I used cPickle, because I didn't know any better :) If you're unfamiliar with cPickle and JSON, they are both Python modules (in this case) that allow you to write out Python data, like lists or dictionaries, and have them be read back in as that data type, instead of the usual string you'd get back from file.readlines().

There are a few reasons to switch to json over cPickle. First, as I learned with the tools, cPickle and source control do not mix well. cPickle seems to be very dependent on its new line/line ending characters staying intact, and Perforce would corrupt this by changing the line endings in the file, unless you set your line endings setting in P4 to use something like 'unix' instead of 'universal line endings'. This is somewhat okay in a studio setting, it's an easy enough thing to control, but when tools are mass distributed, this can become a nightmare. The other downer of cPickle is that the file is not human readable. Depending on what you're trying to save out, this might be acceptable. I found for saving out poses or templates or animation data though, that being able to open, read, and edit the data inside the file would have been mighty useful!

So, onto JSON! The functions for both are very similar, and they do very similar things, but JSON seems to be more forgiving with not getting corrupted when using source control, and it's human readable, so at the very least, one could edit the file to fix any possible issues.

To use json to write out a list of data, first I created the list I wanted to save out, then:

I use maya's fileDialog2 command to grab the name of the file the user wants to save, create that file (or open if it exists), and then use json.dump(data, f) to dump my list (data) into my file (f). If you're wondering what "*.template" is, with text files you can save with any arbitrary file extension you want. In this case, since I was saving out data for a rig template, I made a template file extension.

Here's a snippet of what that file looks like if I open it in wordpad:

To load this data back in as a list that python understands, you can simply use the following:

Super short and sweet. Again, using Maya's fileDialog2 command to get the file to open from the user, then opening the file, using json.load() on that file (storing into the variable data), and then closing the file! Now you can iterate over the list, data, to get whatever it was you needed(in this case, template information).

If you've looked at the json documentation, you'll notice there are two load functions: load() and loads(). The load() function is what you want to use if you are passing in an actual file, whereas the loads() function is what you'd use to pass in a string/unicode. All of the examples I had seen online before looking that up were using loads(), but they weren't actually passing in a file object, so when I tried using it, it would error out! 

That's pretty much it! I hope someone finds this useful, as it's now my go to module for saving out data!

A.R.T update #3 by Jeremy Ernst

It's been a pretty productive couple of weeks! Had more time to work on tools than usual and got most of the leg module/base class functionality wrapped up!

Check it out!

 

Here's some screenshots of the UI, since the video compressed them to pure ugliness. (click to enlarge)


A.R.T update #2 by Jeremy Ernst

Hello again!

This week's update is a little weaksauce since I've been busy working on some of our games instead of the tools the past couple weeks. I've hired two more senior level technical animators to help out with the work load we have here, so that will free up tons of time to work on tools! 

So new stuff this time around is I've got some of the toolbar buttons working now, and I've got a bunch of new UI functionality as well as the leg joint mover going. I explain it in the video, but the reason you're still only seeing a leg is that I'm working on all of the base functionality that all of the modules will use, and the leg is my test module for all of that. Once all of that base functionality is done though, getting the rest of the modules hooked up will be really quick!

Here's this update's video. It goes over a lot of how the code is setup and talks about the base class functionality pretty in-depth, so if talk of code bores you, look away now :)



A.R.T. Update #1 by Jeremy Ernst

After speaking with some folks on the official forums (https://forums.unrealengine.com/showthread.php?2447-Animation-and-Rigging-Tools-FAQ-Known-Issues-and-Feature-Roadmap/), it seemed like a blog would be a good idea to show upcoming features and things currently being worked on!

This week was pretty productive in that regard, but I'll get to that in a minute. The ART tools are something I'm both proud of, but I can also see all of the massive problems and issues, and it is my desire and passion to bring something really solid that meets Epic's needs and our subscribers' needs as well. There were a few issues at launch back in late March that were things I never even thought to check or test for! Cross-platform capability being one of those. You see, these tools were initially developed solely for our studio's games and projects and as such, were developed and tested on the version of Maya we use on the OS we use. So, that's one of the first things I want to get fixed and as soon as possible.

The other thing I always wanted to do and had planned, but due to time constraints had to forego, was making the whole system modular and not just a bipedal rig. With a tool this complex though, it's really hard to address one issue at a time when they are infrastructure issues like these. So, I'm currently rewriting a bunch of the core infrastructure to address cross-platform capabilities and convert the whole thing to a modular rigging system, capable of rigging: props, vehicles, bipeds, quadrupeds and everything else.

Here is where I am on this by the end of this week. Hopefully much more to come soon!

Animation and Rigging Toolkit by Jeremy Ernst

These are the tools I have been writing for the last two years, and they are now available to Unreal Engine 4 subscribers! (www.unrealengine.com). Check them out!

The video below goes over a narrated version of the tools:

Check out an overview of the Animation and Rigging Toolkit! This is the toolset Epic Games' lead technical animator Jeremy Ernst created for our own internal projects, and now Unreal Engine licensees and subscribers can have it too!

Gears of War 3 Work by Jeremy Ernst

Gears of War 3 Rigging Reel

A small sample of the rigging and tools work completed for Gears of War 3!

ears of War 3 Facial Rigging GDC 2011 Talk

This is my GDC 2011 talk about the facial rig setups in Gears of War 3.

 

 

 

Gears of War 3 Pipeline GDC 2012 Talk

​My GDC 2012 talk covering the entirety of the rigging and animation pipeline for Gears of War 3 and how the pipeline evolved by learning from past lessons.