Home Technical Talk

Max, Spring Magic, and Physics

polycounter lvl 14
Offline / Send Message
ablaine polycounter lvl 14
Hey all,

I've been working on some animation sets for a half-man, half-snake character and I've run across a couple of issues that I was hoping you fantastic human beings could help me work through.

To preface: I'm no animator, so to animate this creature I've been importing existing human animations for the upper body and then using a fantastic little Maxscript called "Spring Magic" (http://www.scriptspot.com/3ds-max/scripts/spring-magic) to have the tail follow the movements of the upper body in a slightly delayed, slither-like, motion. It's a fantastic little script and the results look much better than I could do by hand--it's very fast and once the simulation has been run, it keys all of the joints in the tail. Best of all, it's easy to undo and the simulation only runs on all of the joints in the tail below the bone that you select.. so I can manually animate some of the upper bones in the tail and re-run the simulation and it'll adjust.

The problem I'm running into is that with some of the animations, the tail drops below where the ground would be. Thus far, I've been manually adjusting the upper bones in the tail and re-running the simulation to try to keep all parts of the tail animation above where the floor would be, but it's time consuming and there has to be a better way!

Would it be possible to use built in max physics/collision to make the creature/tail and the floor hard bodies, and then use that collision in conjunction with Spring Magic to generate the keyed animation for the tail? Is there a better way to constrain the tail from moving below where the floor would be? I've never even touched max physics so I'm not sure how complicated it would be to set up.

Any tips/suggestions would be appreciated! :)

Replies

  • Eric Chadwick
    Options
    Offline / Send Message
    Depends. Are you exporting to a game engine, or keeping it entirely in Max for rendering? If the latter, you could simply layer another controller on top, and animate an upwards rotation before it starts to dip down, then rotate back after it comes up again. I'm not an animator, but I recall there being a couple different ways to layer animations on top of one another.
  • ablaine
    Options
    Offline / Send Message
    ablaine polycounter lvl 14
    Thanks for the reply, Eric. I'm exporting the animation to a game engine (Dragon Age Toolset).

    Though that sounds pretty similar to what I've been doing.. I've been manually animating the upper links in the tail and then adjusting them after running the simulation on the lower links, and then re-running it.

    It would just save a great deal of time if I could just use some sort of physics system or constraint to keep the tail from dropping below the floor. Pipe dream? :)

    EDIT: Maybe it would be possible to set up some sort of rotation constraint to the tail links on the ground to keep the tail grounded and only rotating along the horizontal axis?

    I don't even know if that would work or how to go about setting something like that up.
  • Eric Chadwick
    Options
    Offline / Send Message
    Since no animators or riggers have replied here, I suggest posting on http://tech-artists.org since there are a bunch of good riggers there.
  • ablaine
    Options
    Offline / Send Message
    ablaine polycounter lvl 14
    Thanks, Eric -- I'll give it a try! :)
  • poopipe
    Options
    Offline / Send Message
    poopipe grand marshal polycounter
    You could try a adding a limit controller to the rotation you want to limit but I doubt it'd override the effect of whatever's driving the bones in the script - I couldnt say without trying it but its unlikely.

    A physics based sim would need running after the fact and would probably require just as much cleanup as you're doing now plus the effort of dicking around with parameters.

    I'd say take a look at the script and hack it but its encrypted so that's out the window. You should be able to alter whatever controllers it creates to prevent movement in whichever axis you're interested in. I imagine they're just simple script controllers that inherit and delay rotations.

    definitely try TAO - there's a whole lot of brains on there.

    it's worth pointing out that whatever you do can be collapsed to keys/single controller so don't let the fact you're exporting to a game engine limit your options
  • autokey
    Options
    Offline / Send Message
    autokey polycounter lvl 11
    poopipe wrote: »
    You could try a adding a limit controller to the rotation you want to limit but I doubt it'd override the effect of whatever's driving the bones in the script - I couldnt say without trying it but its unlikely.

    I realize it's a bit late to be responding, but I'll do so for anyone else who may be looking for an answer. I was just working with this, and the limit controllers do work with the Spring Magic script. For those unfamiliar with limit controllers:
    • With the bone you want to limit selected, go to the Motion Panel, and expand the 'Assign Controller' rollout
    • Expand the list to find the rotational axis you want to limit
    • With that rotation selected, click the Assign Controller button at the top left of that rollout
    • Select Float Limit and then enter in your maximum and minimum values
Sign In or Register to comment.