This post was originally part of my series on Python for Feature Film on my personal site, but is being ported here with minor changes. The dates have been adjusted to match release dates for the projects.
Today’s blog post will be about Percy Jackson and the Sea Of Monsters which I worked on at Rhythm&Hues. This was my very first feature film, and it was a great experience because it was like being thrown into the deep end immediately. Having to learn to swim on this show was the best learning experience I’ve had.
I had taught myself a little Python a few months before this job, but I really learned it and decided to leverage it while here.
Up till this point I’d mostly been a Windows and macOS user. I’d only used Linux once as a kid when I decided to dual boot and then realized I hate using it as a daily driver.
Unfortunately, like most major studios, Rhythm used Linux, and it’s not just Linux as an OS, you do almost everything from the command line.
There were no fancy desktop icons to launch the apps. You had to know how to type the commands in your Terminal and navigate to directories and files all via text. This was such a drastic change from what I was used to.
Fortunately it’s actually not that hard and you can get into it pretty quickly. Now I pretty much use the command line even when there are UI equivalents, just because I’m faster in it, and don’t have to take my hands off of my keyboard.
Another thing to note is that many studios use tcsh and not bash. This is important because bash is way easier, but oh well.
A good resource we were given to learn the command line was this book: The Linux Command Line. You can grab a free download here.
Voodoo and Parsley
Rhythm had their own proprietary animation software which had its’ own proprietary scripting language. So after spending many years learning various 3D applications, I was now faced with one that you literally could not train for without joining this studio and similarly a language that had never seen the light of day outside of those walls.
Voodoo was a delight to use. It was limited in what it could do, similar to Pixar’s Presto and Dreamwork’s Premo, it could only be used for rigging, animation, some basic lighting and matchmove. You literally could not model inside it outside of creating a cube or a sphere. But the things it could do, it did incredibly well. It was a fantastic animation tool, and clearly build from the ground up for the artists at Rhythm.
Parsley was their in house scripting language. It’s pretty similar to MEL mixed with a bit of BASIC. It wasn’t hard to learn, but again, it was a bit more of a challenge than other languages because you can’t just go online to look for help.
So how do you prepare to start a job with a software package you’ve never even heard of before?
Well here are my tips:
- When you learn any 3D package, don’t learn just where the buttons are and what they do. Instead, learn the fundamentals of what you’re doing. This will let you adapt quickly to other applications because it doesn’t where the features are in an application, it’s easy to get it to do what you want. Many people make this mistake and are utterly confused when they have to change applications.
- Learn more than one 3D program and more than 1 programming language. Try and do the same thing in each of them. Make a simple animation or model in both applications, write a simple script in both languages. This way you really force yourself to abstract the concepts from their implementation.
- Don’t be intimidated. There are people around you at work who are there to help you, not to judge you. Try to figure it out, but if after 15 minutes you cannot, then ask somebody. Nobody benefits from you being confused and it’s better to show the initiative of learning it than being bad at it later on.
Python Tools for Percy Jackson
Here are a few of the tools I built for the show using Python. I was still fairly new to Python at this time, so the tools were nothing to write home about, so I’ll just give a brief overview of them here.
Python for Voodoo
Working with Parsley meant you weren’t able to make use of the majority of the Python libraries out there without going back and forth between languages. I really wanted a way to use the Voodoo commands from inside Python.
1import voodoo as voo2ball = voo.sphere(name="ball")3voo.xform(ball, [20.0, 0.0, 25.0])
This was a huge hack, but I tried it out as a proof of concept.
The pipeline team at Rhythm had a way to send Parsley commands to Voodoo over a network port. I used that to create a wrapper for every single Parsley command that let you use Voodoo straight from Python. When you initialized the module, it would connect to the Voodoo session you initialized it from, and then any commands issued would call out to Voodoo and convert values between Parsley and Python types.
Performance sucked, but it was a cool proof of concept, and could dynamically update when new parsley commands were added.
At Rhythm, we had a program called JobTracker that was used to track all our tasks and tickets. It was pretty great, but one limitation was I could not submit tickets from other people. I was often getting messaged for requests and needed a way to submit tickets from specific users to speed up my day.
I built a custom UI using PyQt4 and the Jobtracker API that let me submit tickets quickly and it ended up saving me tons of time having to ask people to submit a ticket and then wait, when I could just do it myself much quicker.
Voodoo uses it’s own really amazing referencing system, where each reference could override the previous one. This was incredibly powerful, but it meant sometimes you need to reorder the references manually.
This used to either require a little Parsley inside Voodoo or editing the Voodoo ASCII file manually.
I built a PyQt UI that would allow you reorder the imports in the ASCII so you could quickly run through all these Voodoo files without opening them up.
We didn’t really have an editor for Parsley. We had syntax highlighting inside an editor, but no real tools other than that. There was nothing like PyCharm that would show you errors or give suggestions on how to fix the code.
I built a development environment using PyQt to help us edit Parsley. It was rudimentary but it would do a live analysis of the script and build a DOM that could then be analyzed to see where errors were happening.