Procedurally Generating Secondary Animation for Characters in 3DS Max

A decision was recently made at the studio that I work at to move away from the use of Unreal’s physics functionality for the animation of secondary character pieces (like hair, chains and all sorts of other dangly bits). As these secondary items will now have to be animated explicitly within 3DS Max, our animation department has suddenly found itself with a great deal of additional work on its hands. Like any good (read lazy) technical artist, I loath the idea of my creative brethren having to slog through this sort of epic tedium. I’d like to be able to come to the rescue with a tool of some sort that leverage Reactor etc. in order to “automate” the process of creating this secondary motion. One caveat to this approach is that many of the animations would need to loop. Does this sound like a sensible approach? Has anyone here implemented such a solution?

I ran into this problem where I work. Tried many solutions, but essentially we could not get real-time cloth in the engine we were using. It was going to be too expensive at run-time.

Initially I tried using Reactor, as you stated you might want to use. The results were really inconsistent, and we quickly realized it could be a nightmare to hand off this sort of solution to animators. Plus, in the middle of productions we needed something we felt was more stable.

My lead, really championed the code on this one however. But, I came up with the idea to create a dense mesh, which we would use for cloth simulation, using 3DS Max cloth modifier tool. Bones (which looked like MoCap tracking balls) were attached and skinned to the high-rez cloth at chosen intervals (a tool was written to place bones at each vert, every other vert etc. etc. automatically) “Underneath” would be a lower resolution mesh which would be skinned to these bones as well (SkinWrap helps to transfer weights from the high-rezzed skinned version, to the lower rezzed version). Without going into it anymore, the lower resolution cloth was being driven by Max Cloth simulation and what ended up getting exported. This gave the animators bones with keys, for cleanup etc. You can start to run up a high bone count if you go wild, but it was still cheaper then a real-time cloth solution.

In the process, many more tools developed to support this such as:

For example, one of many:

  • A tool was written to lengthen the timeline of the animation, allowing us to slow the ‘settling’ of the cloth during really fast actions, so it would be easier to bookend or return to our starting pose; for a smooth loop in and out of the action.

Yes, this did put a lot of extra, and unforeseen work on the plates of our animators (and I helped do clean-up or simulation when I could), but it did on us as well!

The result was cloth that could crush on itself, detect collision etc. With straight FK chains controlling cloth, you can get great S shapes, nice reversals etc., (and sometimes that is all you need). All in all, even tho it meant more work on the animation side, which could not be avoided at this point, the result turned out really great. It did help to alleviate a lot of man-hours starting to animate cloth from scratch.

I hope this helps and gets your brain workin’ on a solution!

CMarchal

Thanks for the detailed reply Christophe. That sounds like an excellent solution. Thankfully, the secondary parts that need to be animated in our case are not as complex as the cloth parts that you described. Many of the pieces are using a single bone and just need to “jostle” around somewhat convincingly. The remaining secondary parts are simple bone chains.

I noticed that you’re at Tencent in Boston. If you run Eric Chadwick, please give him regards. Jon Hanna was actually my boss some years back. I believe that he’s currently at GlobeX.

You are most welcome. Yeah, the technique was really for long flowing things like hair, skirts, or cloaks, tassels etc. Typically, on really short bone chains for things like loincloths, I just key-frame on a simple FK bone setup. You could try and setup some sort of more simple ‘auto-secondary’, but the trick with things like Flex is getting them to loop properly or cleaning up the keys to have things work back into your ‘bind’ pose. If the motion is minor, like short jostles or jiggles, it may not be too noticeable. But if the motion becomes grand, trying to reel that back in can be tough and time consuming, thereby making hand-keying quicker sometimes…lol.

Yes, I work with Chadwick. I will say hello for you. And yes, I used to work with Jon Hanna as well, but he has since moved on. Great to work with as well!

We bumped into the same issue, where dangling objects were to performance intensive with physics and needed to be converted to animation.

I had a lot of success creating a tool that copied and pasted animation between objects and/or files. That way the animator only did the animations once and could apply it to several other bone chains or files, then just adjust the length or timing by hand.

Monster: First off…loved your game. One of my favorite games of 2011 was Orcs Must Die! Well done.

Yeah. We were also able to copy a set of ‘baked’ cloth animations onto other characters as well, with the use of another custom tool. Doing this “copy” would typically get the animator 90% there, but likewise, at time required some hand tweaking.

Have you considered using expressions? We’ve used expressions here for a long time to give us fake secondary motion. By creating some clever nested if statements in there you can get some very convincing and very cheap cloth like effects on secondary bones as long as you use some intelligence in the hierarchy setup.