Any Granny users out there?

I’d like to have a chat.

It’s been a while but I worked on Granny back in the day, and used it again at Bungie. What do you need to know?

First off, I don’t normally set up animation graphs… I’ve done the best that I can with what I’ve been able to glean from the comically written documentation and my ability to tear systems apart and figure out how they tick. Take that for what it’s worth.

However, I’ve got an animator (the only one in our studio) that’s been doing animation for games for years. You might not be able to tell, since it seems like he’s done everything in his power to complicate the animation system for myself and the programmers. The animations look great and he gets them done quickly. However -

Are you aware of any way in Granny to set up something without programming whereby an animation knows where it’s coming from and where it should go to? I’ve got a single blend state for attack that uses a programming-supplied parameter to select from one of 15 available attacks. So, idle state to “attack” state with a parameter for the selection node inside the attack state. My animator keeps animating attacks that begin in one idle and end in another, and either I need to figure out how to accommodate him, or I need some kind of concrete evidence that what he’s doing is adding work to our overburdened programmers and he needs to stop.

Also, retargeting has been a bit of a problem, forcing me to transfer/retarget all our animations in 3DStudio and export them as a whole new (modified) copy of the existing animations. That sucks, I’m sure you are aware. Problem is that locomotion animations seem to retarget fine, but the attack animations on bipedal characters that involve a lot of lunge-type motions are causing characters that are a lot shorter to have their bodies sink into the ground during playback. I’m using a synthetic root node, if that helps any.

I’m not familiar with the granny blend graph beyond having sat through the demo a couple of times.

However, it does sound like your setup may have accidentally blurrred the line between the character state machine and the animation state machine. AI or controls or whatnot may know that all 15 attack animations represent the ‘attack’ state - but as far as granny is concerned they probably want to be 15 different states, or perhaps even 15 different sub-states which include a start and end each.

As a rule, I think it’s safest to use blends to add display detail to a state (like changing the speed or the look direction of a walk state) but to use state transition to move between things which don’t blend. You can have multiple animations in a state - say ‘walk slow’, ‘walk medium’, ‘walk fast’ etc - but blending is playing all of them at once, and they will transition to and from other states together. So if there really are multiple attacks with different in and out states, you probably want to give them each a state of their own. This probably involves some negotiation with the programmers so that everybody is clear on who owns what and how to implement that choice.

As for the animator, he is making work for other people if he doesn’t use predictable sequences. Using sub-states can disguise that a bit but at the end of the day the number of edges in your node graph = the complexity of the system, and adding extra edges imposes a cost on other people who need to figure out how to navigate the graph to get to a predictable state before trying some new action. It also increases the number of transition animations or blends that somebody has to make, increasing the likelihood of bugs down the road.

As for retargeting: Are you using the granny retargeting directly? It sounds like you’re doing it yourself in Max. When I used it the Granny retargeting was a pretty simple name matched system that played animations back on different characters with some mappings to say ‘bone x in this character moves like bone y in that one’. It is (was) not a MotionBuilder style motion adaptation system and didn’t do a great job on characters with widely varying proportions. You should be able to mix and match - retargeting some stuff in granny and making custom content for hard cases - but that will involve some coder support.

Sorry I can’t be more specific. My granny knowledge is pretty dusty :slight_smile: FWIW The Rad guys expect to field support questions and they want you to get good use out of the product. Advice is cheaper than new , do-everything features. If you don’t have an email for the current Granny guy (I think it’s Aaron Pfeffer these days but I’m not sure) [email protected] should get to them.

Thanks. That makes sense about splitting out the states.

And I’ve done both methods of retargeting. I’ve let Granny do it, and I’ve unfortunately been forced to do it Max-side and export out separate animations. I really wish I could just let Granny’s retargeting handle it, being that we have a single animator and a whole ass-load of animations to do. Plus, it would simplify my life in the pipeline side of things.

You might see if you can get some budget to use mixamo instead of doing it yourself. That will let you get more control over the output when retargeting, particularly for characters of different sizes
https://www.mixamo.com/