2D SouthPark style animation with Blender?

Hello folks. I hope somebody can give me some insight on this issue ive been trying to figure out and work around for the longest time.
I’ve been using Sony Vegas to do a 2D cutout animation series for youtube for a while and i think switching to blender would help speed production up a bit, and I was wondering how southpark animators rig their 2D cutout characters so that they can switch out a front facing head for a side facing head, and so on. I cant figure out a decent method to achieve this. I tried putting each face, body direction on seperate layers, and then using keyframes to change the layers that each face, body direction is on, but it didnt work to well for me.
How exactly does southpark do this (replacement animation style ) in Maya, and can it be done the same way in blender? I saw a couple videos on youtube where they used a custom made script for switching and swapping body parts, but i have no experience with scripting. If anyone knows of a creative way to achieve this southPark style of animation, please let me know.

A really simple way to do it would be to use separate bones of an armature for each head, arm or whatever. Just move the parts you are not using off screen and when you go to switch parts clear the location of the bone with the part you want and key it for as long as it needs to be active.
Without knowing how much you know about animation I don’t know how much explanation you need but feel free to pm me if you have questions.

There was an article on blender nation a couple of months ago that had a link to a tutorial on how to do 2d animation in blender.
I can’t link you to it right now because I’m on my phone but you could probably find it if search for 2d animation on blendernation.com

Here you go:

Thanks everyone. I wish I knew exactly how they do this with Maya, it would certainly make this a hell of a lot easier on me. Maybe i could suggest this to the folks who develope blender. Thanks for those links quollism, but i was asking how they swap their 8 way directional head and body sprites with one another during animation like on southpark. I already know how to rig and do all that FK and IK stuff. I found a replacer script somewhere, but it’s very outdated and no longer works. I also found a video where a guy acheived this with a UV offset modifier, but it was custom built by him :frowning: Grrrr this is so frustraiting How do they do this in Alias and Maya?!?!


I did some South Park animation some time ago with Blender. This is the demo of the Rig I created:

And here my animations, all 100% Blender:


So this can only be done with a script?

Wow, those are pretty good! You’ve got the animation style down as well!

I did some research and it showed they achieve this in Maya with ‘Set Driven Keys’. I even saw a tut on youtube where a guy built a SP rig in Maya and did the mouth movement, hand, and head swapping with set driven keys. Does Blender have set driven keys too? Im not too worried about the mouth movements because im using a subdivided plane with shape keys for the mouth and eyebrow changes and lipsyncs.

Moved from “General Forums > Blender and CG Discussions” to “Support > Animation and Rigging”

You can automate this pretty easily in your rigs using drivers and/or Python

Well, i managed to locate the ‘replacer’ script from this forum from a few years back. Only problem is, it can only work in 2.49 since versions 2.5 and up doesnt have the old style buttons window, and now we cant select the scripts button for selected objects like we could in 2.4. (first the audio window, and now the scripts window? Cmon blender, stop removing useful tools we need for gosh sakes)
Looks like ill be learning python scripting now so i can modify the replacer script to suit my needs. Aslo sucks that ill only be able to do this in 2.49 as well, since again, Blender thought it would be a good idea to remove the scripts button in the object properties so i cant select the handle object that i want to run the script, along with my beloved audio window that actually shows the sound waves we need to help with lipsyncing.

I also want this very much as I’m looking for an open source replacement for my cut-out animation software and switches is one of the few things I haven’t been able to do easily in Blender yet.
Keep us updated on your progress with the replacer script! (Will this really be 2.49 only!?)

Well i guess you could use this in 2.5 - 2.6, but here’s the problem im having. In the example blend file that downloads with the replacer script, there’s a handle object that you move along the x axis and it changes the face expresions. You have to select the buttons window and click the scripts tab in order to open and enable the script for the handle object so it knows to use that object to swap the faces. In 2.5 and 2.6 they took out the ‘Buttons window’ with the script tab, so i dont know what to do to get to the scripts tab. If you can figure out how to do this in the newer versions, them im sure it would work just fine.

I’ve got far too little experience with scripting in Blender, or python knowledge or the time to try to figure this out right now but will keep it in mind for later experimentation.

Been reading this thread, from time to time, but far to busy to post anything worth while for you. I’ve got some time now…

1st, that script will need to be totally re-written for it to work in current version of blender. One reason is blender 2.49 uses python version 2.6. Blender 2.6x uses python 3.2 so there have been a few changes to python. Second reason is blender’s API has been totally re-written since blender 2.49 and this is the real show stopper for that script. Basically, what it means is, every part of that script that uses or changes data in blender has to be totally re-written for the new API.

Since you can rig, you can pretty much do what that script does, and with a little python you could do a bit more. Say you have 3 mesh objects for the head, like Happy, Sad, Mad… parent each mesh to the bone. One way to swap them would be to keyframe visibility/rendering in the outliner. Simple, but could get messy quickly. Bit more advanced way would be to assign custom properties to the bone with the mesh objects. 1 property per mesh and use that as a driver to control the visibility/rendering of the mesh. This would give you numeric/slider controls in the 3d view UI (transforms panel) where you can control and key frame what mesh is visible and will be rendered. When combined with a keying set (PITA to setup, but worth while if you are doing any amount of animation) it would make the animating process easier…

With a little bit of python, you’d get a nicer UI…

If you want, I could turn out a small mock up .blend file…


Thanks Randy
I’ve actually been making a lot of progress on this project, all without making any modifications to the script itself. Ive been finding creative ways to work around these situations where i would need to modify the script, so things are going pretty smooth, except for limiting me to 2.49 only (thank God i didnt delete it). I think I should actually buckle down and finally learn python, but If you want, feel free to send me a small demo rig blendfile of your method, I’d like to see your idea in action, and it might actually work better than this replacer script and give me a better UI than the one i whipped up.

OK, here’s my idea, in blender 2.62, see attached file. Basically, in the 3d view there is one bone that would be the character’s head bone. There are 3 simple meshes - a plane, a circle, and a triangle, (all meshes are set to wire frame for clarity). When the bone is selected, there are 3 sliders in the UI, one for each mesh and the sliders can be set to 0 or 1 only. When a slider is set to 0, that mesh object is invisible/won’t render, when set to 1 it will be visible and will render. To animate say the circle mesh changing to the triangle mesh, on the last frame where the circle would be visible, keyframe it’s slider set to 1, and the triangle’s slider set to 0. Then on the next frame, adjust circle’s slider to 0, keyframe, and adjust the triangle’s slider to 1 and keyframe.

All of this is done without any python. I set up 3 custom properties on the bone, in the bones panel, this creates the sliders for the UI. Then I setup a driver for the visibility of the mesh object using the custom property as a value for the driver. Then it’s a simple copy & paste of the driver to set it up for rendering of the object.

I used this method on a complex object (about ~300 mesh objects) where I wanted to control when some parts would be rendered, or not rendered, while animating. By placing the controls in the UI it saved me from scrolling around the outliner, trying to locate each mesh object and turning off/on visibility/rendering of the objects.

With a little bit of python, you can create a custom UI, which may make it a little nicer if you are using several mesh objects per bone.

Since you’re dealing with a cartoon 2d character, if you wanted a fade-in/fade-out effect over the course of say 10 frames that can be done as well. You’d just use textures, 1 texture per mesh object, and drive the visibility/rendering of the texture.

Anyway, take it for a test drive around the block, kick the tires, and see what you think. If you like this and want to learn how to set it up, just say so and I’ll provide more details. It’s not so straight forward at first, but like anything in blender, once you learn it, it’s simple…



driver_render.blend (355 KB)

Thats actually pretty clever. I cant believe this method never crossed my mind. Thank you very much. Im going to do 2 test animmations of the replacer script rig and the render visibility rig and see which works best. Im actually thinking your idea will work better since there is conflict with the script actions when i do a full copy scene and it adds numbers to the objects. Thanks again randy.

If you like this method and need the details on how to set it up, just post here or pm me, and I’ll post it all here…

BTW, if you use auto-keyframing, this should be super easy to use, as you change the values, they’ll be keyframed for you…


Heres how my first test came out for 2.49. I’ll put up a demo of Randys idea as well after i set it all up.