"make all bones poseable" doesn't preserve bone rotation limits (or IK limit display)

Issue #901 resolved
Luke Graybill created an issue

Similar to #899, but in this case after pressing “make all bones poseable”, the rig loses nearly all bone rotation constraints and IK limit displays are not enabled. (This is in Blender 3.0.1 and 3.2 alpha, using addon build 1.6.1.0893)

To reproduce, import a standard G8M (with Dicktator in this case, but probably not necessary) and load the standard morphs.

Here is the rig before pressing the button:

and then after pressing “make all bones poseable”, note that almost all constraints and limit displays are gone (green bones are only bones that still have them):

Comments (16)

  1. Luke Graybill reporter

    It looks like affected bones have the IK limits min/max ranges set, but the axis limit booleans are not enabled:

    Also, as mentioned above, the rotation constraints are missing entirely:

  2. Alessandro Padovani

    This seems to happen only when loading body morphs. Not sure if it’s a bug or some limitation with body morphs. Please Thomas let us know.

    steps:

    1. import g8f and merge rigs
    2. import body morphs and make all bones posable

  3. Thomas Larsson repo owner

    This is intentional. Make all bones poseable replaces a single bone with a pair of bones; a driven parent and a poseable child bone. The limits apply to the pair, but it is not possible to limit the combined rotations of a bone and its parent. A constraint on the child bone would go wrong if the parent is moved by drivers.

  4. Alessandro Padovani

    To translate for Luke and also myself. This means that body morphs will remove most limits because this is necessary for the driven bones to work. While without body morphs the pose bones will retain the limits. Do I understand correctly ?

  5. Luke Graybill reporter

    Probably it is my fault, but I don’t understand.

    I “make all bones poseable” and then manually add a limit rotation constraint to lShin and enable the IK limit display, it seems to work fine? What am I missing?

  6. Alessandro Padovani

    If I understand correctly, Thomas says that the driven bones don’t work fine if the relative posable bones get limits. I guess you should test with body morphs for that, not posing manually.

  7. Thomas Larsson repo owner

    This is what happens if the ik limits of the free bone are enabled and a body morph is set. Before (correct limits) and after (wrong limits) the bone has been made poseable.

  8. Alessandro Padovani

    @Luke, put it another way, the posable bone is a child of the driven bone, to allow us to pose the bone relative to the driver. Thus if we use limits we may lose the ability to pose the bone as needed, as in the example by Thomas in the second picture.

    That is, if the bone is driven then the posable bone is intended to move relative to the driver, thus without limits, to be free to move anywhere independently from the driver. At least this is the actual implementation.

  9. Alessandro Padovani

    @Thomas, on the other side I understand this is not what’s expected by a daz user. That is, in your example the “knees up” driver in daz studio operates within the bone limits and the sliders too. This way it is possible to use limits for driven bones. Below the picture.

    I remember you did a lot of work with @engetudouiti with final and driven bones to ensure that the daz behaviour was preserved. So somewhat I find it odd that this doesn’t work. But I’m not a rig expert so I can’t help here.

  10. Thomas Larsson repo owner

    We managed to reproduce the behaviour of Daz sliders with a pair of Blender properties. For bones it is not possible. The free shin bone has no local rotation relative to its immediate parent, the driven shin bone. It has a rotation relative to its grandparent the thigh bone, but there is no constraint that limit the rotation relative to the grandparent.

  11. Alessandro Padovani

    Thank you for the explanation. I’m not sure to understand why it works for expressions but not for body morphs, since both of them use drivers and sliders there should be no difference. But I simply trust you that it can’t be done.

  12. Luke Graybill reporter

    I can see the problem now, thank you for the explanation! Definitely some odd behavior there.

    Personally, I still find it preferable to have the limits present even if they don’t function exactly right after a morph is applied. I’ll probably end up manually adding the limits on every bone because I really want them, but I definitely see how it’s annoying for others. Trying to find a way to have the best of both worlds, I guess. In my workflow, I rarely use body morphs for posing, but sometimes they are nice to have available, while having the bone limits missing the majority of the time when I’m loading poses and adjusting them in pose mode is kind of non-optimal.

    Maybe this could be a toggled option in the posing tab (alongside the existing “rotation limits” checkbox that is non-functional on most bones after making them all poseable)? That is, something like a checkbox next to “rotation limits” called “also for morphed bones” or whatever.

  13. Luke Graybill reporter

    Finally got a chance to do some testing, and I’ve found a couple of oddities, but I’ll report those in #902 instead. For the scope of this issue, the problem of missing constraints and IK limit display seems to be fixed. Again, thank you both!

  14. Log in to comment