December 14, 2008
Im current working on some basic frameworks for corrective morph building, weight maps and skinning without the necessity of vertices.
Generating the corrective isn’t the hard part – that is just a simple math formula: base + (combination – target). The tricky part is first making the corrective process seamless to the user; you want them to ramp there blendshapes together, see the problems and quick edit the combination to the desired result. The backend should handle the creation of the corrective, and the order.
Storing the orders of correctives and the absolute results is absolutely crucial in making a system that handles being edited, and rebuilt.
Why do you need order and absolute result of the corrective?
Imagine that you have 3 base shapes. You blend two of them together and build a corrective. Then in turn you use this corrective with the third base shape to make a new corrective. Firstly this is already getting complex and secondly what happens if you change any of the shapes that when into making the correctives?
Essentially you’d be applying the wrong offset to the combination of base shapes resulting in a broken corrective. This is where you need to store the absolute target of the corrective when it got made. Because then you can retrieve this shape and use it in turn to build the corrective again.
You need order because it is crucial! – absolutely crucial to a complex system. If you don’t store the order of correctives you wont know which one to rebuild first, second, third. For example if you build the last corrective first, then the first the last will be broken.
So if we go back to our example with 3 base shapes – these shapes essentially would have an order of 0 – all of them. Then if i was to make a corrective of the first two it would get an order of 1, now using this corrective and the third shape to make the next corrective it would get an order or 2. you see how the order works?
Essentially its whether or not the combination of shapes includes a corrective and if it does you get the highest order of the correctives and add 1 to it. For example if i was making every combination of three (0) base shapes:
0 0 0 – base shapes
1 1 – first order correctives
2 – second order corrective
So if you store the order and the absolute target value of each corrective you can rebuild them after changes have been made to the base shapes. Additional values need to be stored such as the base shapes used and the slot the corrective was placed in, to make the system complete solid.
Building the framework is the key, once you have that in place you can use it to build the toolset to do all the handling of the shapes and corrective.