Jump to content
  • Advertisement
Sign in to follow this  
Steve_Segreto

Animation question: One KFA, a tall skeleton and a short skeleton

This topic is 3119 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Question for the experts here. I have a single keyframe animation (KFA) which rotates/translates a common set of bones to produce a biped type animation (for example, clapping hands). I have two different skinned meshes with the same skeletons, the only difference being the distance between their bones in their bind positions, because one model is a human being and the other model is a giant (or a dwarf too for example). The single KFA file has translations for the bones it animates baked into the bone's keyframes using a "human-sized" translation. What is the common technique for applying that single KFA to both skeletons? If I simply accept the translations then running the hand-clapping animation on a giant skeleton squashes the character to the height of a human during the animation then returns them to their original height (assuming the giant has a different "IDLE" KFA than the human). Similarly for a dwarf model, the hand-clapping animation stretches the dwarf until it is as tall as the human during hand-clapping then returns the dwarf to original size (again assuming different dwarf "IDLE" KFA). Of course I could just ignore the translations in the keyframes and use the bind position translations instead, and this work for stationery KFA's (like hand-clapping). The issue still comes in when the KFA requires some movement of the biped root bone (Bip01), for example a sitting or falling animation designed for a human-sized model applied to a giant/dwarf. In the case of ignoring all animation translations, the motions look correct for all skeleton sizes but for no skeleton size does animated movement look correct (for instance all the skeleton's will fall or sit at the same height as their bind position root bone, which places them in mid-air instead of translating down to reach the sitting position).

Share this post


Link to post
Share on other sites
Advertisement
Hey Steve!

The thing to remember is that vertices transform relative to the joints they are assigned to. If you have a human sized rig, vertex groups assigned to any joint will try to conform to the space around the rig, causing... Ahem,
">unusual effects.

If you want correct transformations for all of your dynamic meshes, you will need a different rig for every different body structure, unless you get complicated and try to have joints "home in" to where they should be on other meshes.

If you look at WoW all the races have members of a similar build. The developers refer back to a single rig many times. For example, you don't see a really fat Night Elf or a scrawny Orc.

Cheers!
-Zyro

Share this post


Link to post
Share on other sites
Ha Ha funny vidoes of those Pokemon!

Yes I know quite well what vertices do in the skinned index blending implementation, the question I have is whether I can somehow normalize the artists translations of the bones and then account for the different heights of the skeletons while interpolating bone matrix positions per frame?

And as to your WOW example, there is no real reason not to have a fat model or a skinny model, provided that the skinned mesh is different for each one with respect to which vertices are influenced by which bones and by how much (to avoid the candy wrapper or interpenetration artifacts). As long as the model is roughly the same *height* as the one for which the keyframe animations have the translations baked in, there should be no issue. In other words, Blizzard could still have hundreds of biped keyframe anim sequences and put either a fat orc or a thin orc on any of them and it would look the same, but as soon as they put a hobbit on one of them things would look wrong (unless their artists modelled the hobbit as exactly the same height as the other bipeds, and then the game engine uniformly scaled the hobbit to be small after the skinning).

Can somebody tell me how to include screenshots here and I can provide pictures to explain more?

Share this post


Link to post
Share on other sites
Quote:
Original post by Steve_Segreto
Can somebody tell me how to include screenshots here and I can provide pictures to explain more?
Post the images somewhere else, and use the html <img src="http://www.example.com/image.jpg"> syntax.

Share this post


Link to post
Share on other sites
Unrelated to the technical ability to apply an animation to a biped of different size, I don't think you'd want to use the same animations for a human-sized model as you would for a giant or a dwarf anyway - they're going to move differently, after all.

Share this post


Link to post
Share on other sites
From the screenshot it looks like you're playing with DAoC models and animations. If that's the case, DAoC's KFAs have a matrix associated with each node. It's been a long time since I worked with those but from memory these are used to transform vertices into bone space. Applying the bone transform then moves the bone correctly regardless of size.

Share this post


Link to post
Share on other sites
Thanks guys I'll post the real pictures later today, this one was a picture I tried to add to another post for determining collisions between an animated models and picking rays, I was trying to show this thing I created called a "collision rig" by taking my character's bone's and creating spheres with centers at the bone's origin and diameter's scaled by the distance from root.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!