Kuroyume0161
03-21-2006, 07:15 AM
I asked this over at PluginCafe, but don't really expect an answer (any time soon). ;)
It's a toughie, so read carefully.
How would you allow a set of bones to be nonuniformly scaled and not propagate the scales to child bones and avoid introducing skew into the children when rotated?
This has been bugging me for a very long time and research shows that the solutions are not feasible in realtime situations (and there is no description of a process for this that I've encountered). David Eberly avoids nonuniform scaling like the plague in his 3D engine (and he's like a Master PhD in uber mathematics - which I'm not). :) That says more than enough about the deepness of the problem!
For the most part, Cinema 4D can handle nonuniform scales the way it usually does (propagated to children). But add in active countermeasures to implement non-propagating scales and any child rotations immediately get skewed - the more rotation and/or nonuniform scaling, the more skewed the child's coordinate basis.
I have not really found a way to counteract this basis skewing (i.e.: keep it from becoming nonperpendicular). I do have code used for initial rigging that works for the most part - but it is for a different system (standard C4D bones, not my plugin bones) and speed was not as much of an issue since it was not for active transformations.
Oh well, thanks for reading nonetheless... :)
Robert
It's a toughie, so read carefully.
How would you allow a set of bones to be nonuniformly scaled and not propagate the scales to child bones and avoid introducing skew into the children when rotated?
This has been bugging me for a very long time and research shows that the solutions are not feasible in realtime situations (and there is no description of a process for this that I've encountered). David Eberly avoids nonuniform scaling like the plague in his 3D engine (and he's like a Master PhD in uber mathematics - which I'm not). :) That says more than enough about the deepness of the problem!
For the most part, Cinema 4D can handle nonuniform scales the way it usually does (propagated to children). But add in active countermeasures to implement non-propagating scales and any child rotations immediately get skewed - the more rotation and/or nonuniform scaling, the more skewed the child's coordinate basis.
I have not really found a way to counteract this basis skewing (i.e.: keep it from becoming nonperpendicular). I do have code used for initial rigging that works for the most part - but it is for a different system (standard C4D bones, not my plugin bones) and speed was not as much of an issue since it was not for active transformations.
Oh well, thanks for reading nonetheless... :)
Robert
