Posts Tagged ‘zAnimation’
zAnimation – exporting models from Maya
This is a short tutorial which I’m also posting on the zAnimation codeplex wiki. The next one should be about building a new project with zAnimation. This was going to be a video tutorial, but my english speaking abilities sock. As well as my english writing abilities. Also I suck at modeling/animating, so this shouldn’t be taken as a modeling tutorial. It’s a tutorial on how to export stuff. So let’s get started. Read the rest of this entry »
zAnimation – on codeplex
zAnimation is finally on codeplex. You can find it here: http://zanimation.codeplex.com/.
It’s all very basic for now, no samples or documentation yet. The code is somewhat documented. I believe experienced people will have no problem using it. It’s just a matter of selecting the right content processor, checking out my past blog entry to write a definitions file, and writing model.Play(“Walk”); I won’t be working on the documentation or samples the next 2 weeks, my exams are still more important.
zAnimation – a simple XNA animation library
Before XNA 3.1, there was a bunch of animation frameworks which could to tons of stuff like interpolation between animations and stuff like that. When the 3.1 came out all of these became obsolete – except kw animation which comes with a 3ds max exporter and is great if you’re using max, but I’m using Maya and I needed to write my own animation foundation. zAnimation is a XNA library for animating skinned models exported from Maya. It supports customizable pre-clip interpolation, and per-bone animation. No interpolation between frames or animations yet.
Pre-clip interpolation:
Before a clip is played, the model interpolates over a customizable number of frames to the starting position. It delays an animation a bit but removes jerky transitions between animations.
Per-bone animation:
When defining a clip within the animation, you also define what bones does the clip affect. Based on that you can play an animation that animates all the bones in a model, and easily override the animation on one or more bones to make them move in a different way.
Below I’m listing a couple of things that I encountered while writing zAnimation:
Maya gets all your animation keyframes and exports it in a single take called “Take 001″.
To deal with this I introduced another file (the take definition file) which contains where does a certain animation start and end, and also what bones does it affect.
XNA FBX Importer removes redundant bones.
If a bone has no weights defined on a skin it gets deleted. The same thing happens if the bone doesn’t move (change) in the keyframes. So I introduced 2 special parts of the animation, the “Bind” part and the “Init” part. The bind part acts like a starting transform, and the init part is just there so you don’t forget that you have to animate a bone if you want to have it.
So based on that there are a few rules and limitations to zAnimation:
- smooth binding only
- each bone in each skin has to have some weights, so no root bones with no weights (or it won’t be imported as a bone)
- each bone has to have at least 2 keyframes that are not the same (or it won’t show up in the keyframes at all)
- strictly defined animation timeline:
-at frames 0 and 1 keyframe every bone at its bind pose position. This is the position your animation starts with.
-at frame 3 you should keyframe every bone it any position other than its bind pose. I select all my bones and rotate them in the x-axis about 45 deg.
-at frame 4 you should keyframe your bind pose again.
- after frame 4 animate your model as you wish
- when importing a model create a takes.def file in the same directory as your exported fbx is in the XNA content folders, set its build action to none from Visual Studio
- takes.def file has a specific structure that is line delimited, so the first line should look like this:
Bind, 0, 2, AffectedBone0, AffectedBone1, AffectedBone2
and each line after that should look like this:
AnimationName, StartFrame, EndFrame, AffectedBone0, AffectedBone1, AffectedBone2
here’s an example of a takes file
Bind, 0, 2, root, door Open, 4, 34, door Opened, 34, 36, door Close, 36, 66, door
That’s more or less it. I’ll release it on codeplex in a couple of days. Check it out if you’re a XNA developer working with Maya.