Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Priority Delay on Stacking Skin Deformers

    Cinema 4D SDK
    r21 python
    5
    16
    1.7k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      bentraje
      last edited by bentraje

      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.

      1 Reply Last reply Reply Quote 0
      • ManuelM
        Manuel
        last edited by Manuel

        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

        MAXON SDK Specialist

        MAXON Registered Developer

        1 Reply Last reply Reply Quote 1
        • B
          bentraje
          last edited by

          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.

          1 Reply Last reply Reply Quote 0
          • ManuelM
            Manuel
            last edited by

            @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

            MAXON SDK Specialist

            MAXON Registered Developer

            1 Reply Last reply Reply Quote 1
            • B
              bentraje
              last edited by

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

              Thanks for the confirmation.

              1 Reply Last reply Reply Quote 0
              • B
                bentraje
                last edited by

                Hi,

                Any update on this one on the latest release (S24)?

                1 Reply Last reply Reply Quote 0
                • ManuelM
                  Manuel
                  last edited by

                  hi,
                  it's still a limitation.

                  Cheers,
                  Manuel

                  MAXON SDK Specialist

                  MAXON Registered Developer

                  1 Reply Last reply Reply Quote 0
                  • B
                    bentraje
                    last edited by

                    Gotcha.
                    Thanks for the response. Will close this thread for now.

                    1 Reply Last reply Reply Quote 0
                    • ?
                      A Former User
                      last edited by

                      @m_magalhaes Hello! I just want to add to this and say that this limitation is REALLY holding back C4D for rigging and thereby character animation. I would very much hope that the developers will allow the Skin Deformer's Priority to be set. It is my understanding that the Neutron node-based version of C4D will not have Priorities (THANK GOD!) but I don't know how long we will have to wait to be able to use it for character rigging.

                      1 Reply Last reply Reply Quote 1
                      • jochemdkJ
                        jochemdk
                        last edited by jochemdk

                        Hi, @m_magalhaes & the rest,
                        Joints & skins work a bit differently than setting priorities in the usual way..
                        Basically, only the first line changes @ the "declaration" of pd.

                        Hope this helps, Jochem

                        for item in items: # .. a list with objects or tags..
                        	# prioGeneric
                        	pd = item[c4d.EXPRESSION_PRIORITY]
                        	pd.SetPriorityValue(c4d.PRIORITYVALUE_MODE, 4) # 4 = Generators (as an example..)
                        	pd.SetPriorityValue(c4d.PRIORITYVALUE_PRIORITY, 412)
                        	item[c4d.EXPRESSION_PRIORITY] = pd
                        
                        for j in joints: # .. a list with joints..
                        	# prioJoints
                        	pd = j[c4d.ID_CA_JOINT_OBJECT_PRIORITY]
                        	pd.SetPriorityValue(c4d.PRIORITYVALUE_MODE, 4)
                        	pd.SetPriorityValue(c4d.PRIORITYVALUE_PRIORITY, 413)
                        	j[c4d.ID_CA_JOINT_OBJECT_PRIORITY] = pd
                        
                        for s in skins: # .. a list with skins..
                        	# prioSkins
                        	pd = s[c4d.ID_CA_SKIN_OBJECT_PRIORITY]
                        	pd.SetPriorityValue(c4d.PRIORITYVALUE_MODE, 4)
                        	pd.SetPriorityValue(c4d.PRIORITYVALUE_PRIORITY, 414)
                        	s[c4d.ID_CA_SKIN_OBJECT_PRIORITY] = pd
                        
                        1 Reply Last reply Reply Quote 0
                        • jochemdkJ
                          jochemdk
                          last edited by jochemdk

                          Hmmm… some extra notes: Although it’s possible to change the priority of skin deformers - it’s of no use.
                          The documentation states that priorities only will be applied if the “Force” option under “Include” is turned on.
                          But that’s not for polygon objects.

                          So in my case, I wanted to set skin deformers after dynamics had been applied, but that’s a no-go.
                          The only alternative I found was to add an extra pythonTag (Gen.412), which updated all meshes.
                          This means that on render time all works well, but in the viewport it will still lag 1 frame 😞

                          1 Reply Last reply Reply Quote 0
                          • ferdinandF
                            ferdinand
                            last edited by

                            Hello @jochemdk,

                            thank you for reaching out to us. I am not sure if your postings are questions, please remember to open a new thread for questions of your own. @m_magalhaes is also currently on vacation, so he will not respond here any time soon.

                            Thank you for your understanding,
                            Ferdinand

                            MAXON SDK Specialist
                            developers.maxon.net

                            jochemdkJ 1 Reply Last reply Reply Quote 0
                            • jochemdkJ
                              jochemdk @ferdinand
                              last edited by

                              Hi @ferdinand, I was working on a similar topic, trying to change the prio of skin deformers to "after dynamics"... (didn't want to start a new thread, thx for replying anyway:)

                              1 Reply Last reply Reply Quote 0
                              • ManuelM
                                Manuel
                                last edited by

                                Hi,

                                for me you still have the issue of priority. Does it solve the problem?

                                Cheers,
                                Manuel

                                MAXON SDK Specialist

                                MAXON Registered Developer

                                jochemdkJ 1 Reply Last reply Reply Quote 0
                                • jochemdkJ
                                  jochemdk @Manuel
                                  last edited by

                                  Hi @m_magalhaes,

                                  No there's still a problem, but for now it seams to be unsolvable.. It would be nice if C4D would allow for priority changes on the skin deformer - for polygon objects.

                                  1 Reply Last reply Reply Quote 0
                                  • B
                                    bentraje
                                    last edited by

                                    Hi,

                                    Just checking if this is now resolved in the current version of C4D (2023).

                                    1 Reply Last reply Reply Quote 0
                                    • First post
                                      Last post