Deprecated Ton is doing a much better job. - JeremyWall
This project aims to rewrite the Blender Armature System. I'll be using these pages to document my thoughts and the result of my research on Armatures. And also to document my implementation of a new system. The pages will be changing frequently as the project evolves. This is of course a collaborative document so feel free to add something to these pages if you feel it is substantive.
Armatures should in their base form allow a great deal of freedom for the animator. Root Bones should not be required but easily defined on the fly for a particular chain. Chains should be directionless unless defined otherwise. IK should allow the direction in a chain to be defined. Ik Should also be able to go over multiple chains. (from foot to foot for instance). I intend to come up with a framwork that allows all these things to occur.
Blenders current Armature Implementation
I intend to explore a joint based armature system. Joints will be the basic building block of a bone or bone chain. There will be two modes of posing an armature. Joint mode and Bone mode. In Bone mode you rotate a bone around one of its joints and it will work like forward kinematics. In Joint mode you will drag a joint and the chain will be evaluated using Inverse Kinematics. The chains will not end at a "root" bone in the armature but instead will be evaluated till no more joints are left in the chain or chains. This will allow a properly constrained model to react in more intuitive way with the entire armature reacting to changes intead of ending at the end of a chain in a "solver"
Roadmap to completion
A very quick roadmap for introducing the blender code.
- Identify core needs and workflow (keep it blender-like)
- Identify neccessary data structure
- Identify Functions for entrypoints and modifying data.
- Code the implementation
- Make transform friendlier, code transform for bones seperately
- Recode parts of pose and action code for faster execution
- Tweak GUI workflow (fix the annoyances)
- Change Constraint evaluation. (the place they get evaluated is incorrect. Might want to change to pass or fail instead of directly modifying object data)
- Add new Data structures ()
- Add or recode the entry functions ()
Transformations and constraints
- http://www.euclideanspace.com/maths/index.htm An excellent resource on the math behind 3d manipulation
-- JeremyWall - 21 May 2004