[Bf-committers] About Pose evaluation of child bones in armatures

Bastien Montagne montagne29 at wanadoo.fr
Fri Dec 30 19:21:24 CET 2011

Forgot to mention, also check there are no other parts of code affected 
by those changes (this is a quite complex area in which I have not much 
experience :/ ).

Le vendredi 30 décembre 2011 19:18:45, Bastien Montagne a écrit :
> Ok, so here is a patch addressing the issues mentioned above (I choose
> the second solution, but rather using the first one is trivial change):
> http://projects.blender.org/tracker/download.php/9/498/29461/18881/bt29461_armature_pchan_pose_mode.patch
> Basically, I factorized into a new function (pchan_to_pose_mat) the
> compute of two matrices, one to compute rot/scale of pchan in parent
> space, the other to do the same for location. That two matrices differ
> when either HINGE/NO_SCALE/NO_LOCAL_LOCATION options are enabled.
> Then, I can use those two matrices in the pose solver
> (where_is_pose_bone) and armature_mat_pose_to_bone (used by snap to
> cursor/to grid). We probably lose a bit of performances, but imho the
> gain in readability is more than worth it!
> It could probably be used by the transform code too (in
> add_pose_transdata) – but I’ve just had enough of matrices for now. ;)
> Also, that new code most likely can be optimized a bit by
> power-matrix-users, and need a general cleanup/proofread/testing, but I
> did test it in quite some various situations, and it always worked for
> me so far.
> Cheers,
> Bastien
> Le 30/12/2011 12:10, Bastien Montagne a écrit :
>> Hi devs!
>> I have spent quite some hours this week on those two bugs:
>> http://projects.blender.org/tracker/index.php?func=detail&aid=27898 and
>> http://projects.blender.org/tracker/?func=detail&aid=29461
>> While searching and reading code about pose transforms (I don’t like
>> matrices, and they don’t like me :/ ), I think I found some
>> problems/incoherences in the way the Hinge/NoScale options are handled
>> *for the position of the bone*. See also this small demo file
>> (http://www.pasteall.org/blend/10564), with one child, unconnected bone,
>> pose-translated, and a parent bone pose-scaled by a factor two.
>> When you disable only Inherit Rotation, the bone moves back half of its
>> Pose translation. This is because its position is evaluated fully in its
>> parent rest space (instead of using parent rest rotation and parent pose
>> scale).
>> When you disable only Inherit Scale, the bone does not move. This is
>> because its position is evaluated into its parent pose space (instead of
>> using parent pose rotation and parent rest scale).
>> So, imho, we should fix those incoherences… But how ? Do we always want
>> to use the parent pose space for the child position (thus never moving
>> the child bone when disabling/enabling the Inherit Rotation/Scale
>> options) ? Or do we want to fully respect the logic, and make the
>> pose-location of the child bone depend on the hinge/no scale options
>> (i.e. use parent rest scale and/or rotation) ?
>> Cheers,
>> Bastien
>> _______________________________________________
>> Bf-committers mailing list
>> Bf-committers at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-committers
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers

More information about the Bf-committers mailing list