Priority Delay on Stacking Skin Deformers



  • Hi,

    This has been the bane of my rigging in C4D, which does not exist in Maya.
    Normally, you have Skin Deformer being driven by joints.
    In complex set-ups, it is desirable to have the Skin Deformer as a driver.
    In C4D, it is somewhat impossible without getting a priority delay.

    The priorities are set-up properly. The initial skin_grp has Generator -10 and the secondary skin_grp has Generator -5

    I move the joint, hit undo and the secondary skin has delay.
    You can check the video illustration here:
    https://www.dropbox.com/s/445v51535b1z3dj/c4d307_python_skin_deformer_delay.mp4?dl=0

    You can check the file illustration here: https://www.dropbox.com/s/hlswduxe52kjp5l/c4d307_python_skin_deformer_delay.c4d?dl=0

    Initial skin is connected to the secondary skin using the python tag below. (Check file above for more details)

    import c4d
    #Welcome to the world of Python
    
    
    def main():
        jnt = doc.SearchObject("sec01_jnt")
        node = doc.SearchObject("skin01")
        cache = node.GetDeformCache()
        points = cache.GetAllPoints()
    
        jnt_mat = jnt.GetMg()
        jnt_mat.off = points[83]
    
        jnt.SetMg(jnt_mat)
    

    Regards,
    Ben

    P.S. Actually, the priority delay doesn't happen only on Skin Deformer x Skin Deformer but also (Other Deformers) x Skin Deformer.



  • hi,

    first, you don't have to change all priorities to "fixe" priorities issue. The undo command often make obvious an already existing priority issue.
    In your document, if you change the position of your joint in the position palette (without dragging the object) you will see that your object isn't following.

    As you can see, your second join isn't updating correctly.
    That said, even after correcting the priorities (the join move as expected) the second skin deformer doesn't take the position of this joint into account.
    I've asked our specialist and it's seem to be a limitation. You can't add an expression based operator between two skindeformer.
    I've tried to create some sort of generator but failed until now.

    I'm not sure if there's a solution for this one. That's interesting and would require more investigation or test.

    Cheers,
    Manuel



  • RE: I've asked our specialist and it's seem to be a limitation
    Yes, this is what I am afraid of :(

    RE: You can add an expression based operator between two skindeformer.
    I'm not sure I understand, isn't the Python Tag I used already the expression based operator between two skindeformer

    ==============

    Hypothetically speaking, can I instance the default skin deformer and create a new one with a hardcoded generator priority? Currently, it is set to Generator -1. How about I hard code it as Generator -10 on creation.

    Will that work? I believe it involves C++ so I haven't tried it yet.



  • @bentraje said in Priority Delay on Stacking Skin Deformers:

    RE: You can add an expression based operator between two skindeformer.
    I'm not sure I understand, isn't the Python Tag I used already the expression based operator between two skindeformer

    Sorry i mean "you can't add" the negation is important on that case.

    cheers,
    Manuel



  • @m_magalhaes
    Ah gotcha. I guess there is no way around this, yet.

    Thanks for the confirmation.


Log in to reply