Google Summer of Code 2007

Anything and everything that's related to OGRE or the wider graphics field that doesn't fit into the other forums.
User avatar
tuan kuranes
OGRE Retired Moderator
OGRE Retired Moderator
Posts: 2653
Joined: Wed Sep 24, 2003 8:07 am
Location: Haute Garonne, France
Contact:

Post by tuan kuranes » Thu Mar 15, 2007 7:20 pm

Think "Animation blending for dummies".


Here's how crytek marketing puts that :
Parametric Skeletal Animation: By blending example-motions based on user-defined parameters, we obtain responsive interactive control over a character with a focus on believability and the ability to adapt automatically and naturally to the changing circumstances of a game environment. This enables the character to travel at different speeds, follow paths where the direction changes smoothly or suddenly, move uphill or downhill, dynamically blend in varying amounts of hit reaction animation, and/or change the style of locomotion.



User would give "environement" parameters (mostly ) and then don't have to handle the blending complexity. An implementation could be a state machine that would do the blending, with input parameters, character current states, states weights, bones weights, etc.... At the end, the user don't have to handle the blending complexity, just give some parameters.

An AnimationBlender, but far more advanced, and at higher level.

Really simple illustrative example :

Let's imagine user defines parameters in a .anim file:

Code: Select all

Walk
{
  ReplaceWithTimedBlending : (Run, 0.5, Linear)
  Blend {Aim, Fire, Crouch}
}
Die_Sudden
{
  Replace {Run, Aim, Fire, Crouch}
}
Die_In_Motion
{
  ReplaceWithTimedBlending {Run, Aim, Fire, Crouch, 0.7, Linear}
}
SmallHit
{
  ReplaceWithTimedBlending {Run, Aim, Fire, Crouch, 0.2, CircularLoop}
}
BadHit
{
  ReplaceWithTimedBlending {Run, Aim, Fire, Crouch, 0.6, CircularLoop}
}
Aim
{
  ReplaceWithTimedBlending { Fire }
  Blend {Run, Crouch}
 }
Run
{
  ReplaceWithTimedBlending { (Walk, 0.5, Linear_x2) }
  Blend {Aim, Fire, Crouch}
}
Then when user would call

Code: Select all

myAnimatedEntity->setManagedAnimation("Walk")
and, result would be entirely dependant on previous myAnimatedEntity state. For instance, if previously running and firing, it will blend "walk" and "run" during 0.5 sec, linearly tending toward 100% walking, still firing.


Here's a list of papers on that.
0 x

User avatar
sinbad
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 19265
Joined: Sun Oct 06, 2002 11:19 pm
Location: Guernsey, Channel Islands
x 2
Contact:

Post by sinbad » Thu Mar 15, 2007 8:02 pm

Ok, I see what you mean, thanks.
0 x

Post Reply