Concepts

The XMas goal is that you can forgive to develop code to use animations in your game, to do this you will need a Animation Graph. Animation graph is a graph of nodes binded to one our yours class by reflexion. The system evaluate all nodes and get all the result animations with the corresponding blending.

We have different animation nodes types:

Node Name Reflexion Value Comment
Start None Initial node, can be only one!
Animation None Node that contains a animation, this node hasn't output, it is a finish node
BlendList Index of child Basic blend list node, can blend in a variable items numbers, each one with different blend values
CrossFade Value from 0 to 1 Node that blend between two values from 0 to 1
Random None Choose a randomly a child to play, when finish play another with blend, useful to have different animations with one action, like 3 idles
Rangecrossfade Value between any range Do a crossfade between values in selected range


We need one Start Node, then the system calculate the weight of all children based on node type and finally get all Animation nodes with the final weights and aply with blending to the model. That's all

Editor

Editor has his own EditorDocumentation

Using XMas

There is a example called XMasTest
  • Add references
Add XMas reference to your project
Add XNACalc3DLoad to your Content preferences
  • Set your meshes
Set CCald3DImporter in content importer
Set CCald3DProcess in content processor
  • Add a XMas Graph
  • On LoadContent
    • Load model and get skin
    initialModel = Content.Load<Model>("Models/pink/pink");
    CSkeletonData skinningData = initialModel.Tag as CSkeletonData;
  • Create a instanced of XMAnimationSystem loading from file
    _animationSystem = XMAnimationSystem.LoadFromFile(@".\Content\AnimGraph.xmas", skinningData, PluginList);
  • Set the reflexion object
    _animationSystem.ReflexionObject = testReflexion;
  • Update Animation system (Update)
 _animationSystem.Update(gameTime.ElapsedGameTime);
  • Draw your model (Drawn)
  Matrix[] bones = _animationSystem.GetSkinTransforms();
  // Render the skinned mesh.           
  foreach (ModelMesh mesh in initialModel.Meshes)
  {
    foreach (Effect effect in mesh.Effects)
    {
      effect.Parameters["Bones"].SetValue(bones);
      effect.Parameters["View"].SetValue(view);
      effect.Parameters["Projection"].SetValue(projection);
    }
    mesh.Draw();
  }

Adding custom Animation Nodes

There is a example called PluginTest

It's easy, to create simply create a class derivate from AnimationNode or any class derivated from this. You can read all available methods and fields on technical documentation
To use with editor copy the result dll to Editor Path\Content\Nodes
To use with your game only add a reference to plugin dll to project

Adding custom importers

No supported yet

Technical documentation

You can download from release or read online

Last edited Dec 21, 2008 at 12:43 PM by Liaven, version 15

Comments

No comments yet.