==== Motion Group explained ==== //**Motion group**// is a convenient way of groping component animations of a 3D object scoped. For example, walking motion of a 3D character consists of translations and rotations of each part of a body (skeleton) and could yield a tens of single transformation sequences applied to each part. In Cast3D terminology they are call //tracks//. Essentially, //Motion Group// is collection of individual //tracks//. Each //track// in a group is bound (applied) to a scene node. There are two representations of a //Motion Group// in Cast3D. First is //**MotionGroup**// class within AS3 Cast3D framework, second is corresponding XML element in .Xc3 file format. On a .xc3 file load //MotionGroup// class is being instantiated and populated with data from elements. //MotionGroup// class is derived from Track3d, which defines it's behavior as any other track. But there are few differences: * by default, group has "REPEAT" time line with period (duration) equal to maximum length of including tracks. * it applies binding process to scene nodes. I need to explain this in a bit more details. The way //tracks// are linked to a particular scene node is defined in .xc3 file with following example: ..... ..... As you can notice, binding a track happens with referencing a track with within . Technically, you can apply same track to a number of nodes. Binding a //MotionGroup// to a node is done the same way, by using to a group track within . Since groups hold all tracks they need to attach those tracks to right scene node. Naturally, the way to do so would be to bind a track to a node by a node id. .... In a snapshot above **translate_Cube** would be a position track id and in //context="**Cube**//", //Cube// would be node id. Which is very close to truth, but instead, //Cube// is not a node id, but a node //**type**//. That is done on purpose. Node type is an attribute that indicates the context meaning of a node. For, example, it could be "hand_left" or "foot_right" etc.. So, if you extract //MotionGroup// into a separate file ( see tutorial [[interact_tutor|Creating Interactive scene]].) you can, perhaps, apply motion group to another model, if you use consistent node naming. Just make sure models are in same units, or adjust positional tracks as they may stretch model. Rotations should work fine. In practice, if you export model from Blender to COLLADA 1.4 file, node types will have same values and node ids. Also Da2Xc3 import utility always tries to combine tracks into group, if possible. And if you use '-xm' option it will store data in separate file(s). In main xc3 file these data will be replaced with statement corresponding to file. To summarize the way a //MotionGroup// does binding, for each descendant node of the node //MotionGroup// is applied, it tries to find all tracks with the same node type and applies them to that node. //MotionGroup// is very effective way of representation of a distinctive and separate animation sets for a particular 3D object, like walking, jogging, jumping etc.. motions of a character. There are few tutorials that show how to extract and work with //MotionGroup//s: * [[interact_tutor|Creating Interactive scene]]. * [[clone_tutor|Cloning 3D objects of scene]]. There is also [[docs:blendmotion|another article]] which explains animation blending process with combining //MotionGroup//s into a single motion.