Overlap Tool: Animation Capstone 2
So far, much of the animation work that we've been doing has been preproduction. That means a lot of render tests, lots of gathering references, and lots of concept art. But, I've still managed to sneak a bit of coding in.
One of the things that makes any animation look fluid and real, particularly on an underwater creature as flexible as an octopus, is overlap. This refers to the motion at the end of a limb in one direction overlapping with the opposite motion at the base of a limb. If you wave your arm up and down, the tips of your fingers are still going to be moving up when your shoulder starts rotating down. We learned a trick to easily get decent overlap without doing too much thinking: pose the whole limb at it's most extreme point, and then push the keyframes of that pose later in time more and more for each joint down the chain. This makes the end points of the limbs hit their extreme poses after the base of the limb does, and makes the movement feel weighty and natural.
Doing this is pretty quick for a human with two arms that only have three joints and some fingers, but it gets a lot more tedious for an octopus with eight arms each with 15+ joints. So, I decided to automate it.
We have some existing framework for building custom tooling that has already been built up by animation capstones in years prior, so I am largely building off of that. I'm using PySide2 to handle the GUI and layout, and PyMEL for interfacing with Maya.
The initial feature set was very simple and quick to implement; you could select a joint chain, hit a button, and it would displace them all appropriately. This could do some pretty impressive things in simple test cases, and was trivially easy to use.
Before I made it pretty though, I gave it to a couple animators to play with. As the saying goes, no plan survives first contact with the end user. It was sort of useful, but seeing it in action revealed a few insights on how to turn it into an actual usable tool.
The first was that this technique had to be planned for intentionally, and almost counterintuitively. If an animator has a basic poses that already have some overlap factored in, this tool will only make a mess of things. It requires animators to make one extreme pose that by itself would never be used as an actual pose. This isn't so much a problem with the tool as it is a slightly different use case and workflow to be thinking about.
The biggest feature addition is the need for different weights along the chain. An octopus arm is very muscle-y at the base, and incredibly floppy at the end. In terms of this overlap technique, that means that there needs to be a small keyframe displacement at the top, which grows much larger towards the base. This isn't hard to implement, but I hadn't realized how important it actually was to make this tool useful.
The second and as yet unsolved issue is that this is a fairly destructive tool. Once applied, the keyframes for a whole limb are spread about messily, and it's difficult to reverse later on, and to make further edits to. A partial fix to this may be an un-overlapper, that could look for the pattern of keyframes generated by this tool and collapse them back into a single keyframe, but that's an uncomfortable workflow. Another possibility is to use animation layers to apply this effect without touching the underlying keyframes, but that could easily cause unexpected behaviour when animators make further adjustments. Another possible improvement is to change the underlying mechanism to something more physical-simulation-esque, which could solve some problems, but would be rather heavy both to implement and to use.
Right now, alongside making the actual film, I'm working on building some safety features in and making an animator-friendly UI. Once that's complete, I'll release it to our motion team and see what else I haven't thought of yet.