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

    Joint-relative vertex positions

    SDK Help
    0
    4
    375
    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.
    • H
      Helper
      last edited by

      On 25/10/2016 at 06:49, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   R16 
      Platform:      Mac OSX  ; 
      Language(s) :     C++  ;

      ---------
      Hello,

      I'm coding an exporter plug-in which exports a rigged model, and while exporting the skeleton works quite well, actually, I'm having trouble coding the "binding" of the mesh to the skeleton, aka the "skinning".

      I get the gist of it; multiply the vertices in world-space by the respective joint's inverse global matrix, which works with vertices affected by a single joint, but the more joints affect the vertex, the more it gets distorted (factoring in their weights).

      Of course, the process of skinning is well-documented, but it seems like I don't understand what input data is necessary and/or how to extract these from Cinema.

      Now, I know this has nothing to do with the SDK itself, so my question is rather whether it's possible to extract the bound vertex coordinates Cinema uses itself.

      Again, I hope this isn't too unrelated to the SDK.

      Thanks in advance,
      Mark

      1 Reply Last reply Reply Quote 0
      • H
        Helper
        last edited by

        On 27/10/2016 at 08:15, xxxxxxxx wrote:

        Hello,

        honestly, I'm no expert on this topic so right now I don't know more about this than you do. Can you explain a little bit more what exactly you are doing and what you need? Maybe can you show some code that illustrates the issue?

        best wishes,
        Sebastian

        1 Reply Last reply Reply Quote 0
        • H
          Helper
          last edited by

          On 27/10/2016 at 10:21, xxxxxxxx wrote:

          Thanks for your reply,

          there isn't much code I can show since the SDK-related process works without problems.

          Basically, what I do is take a rigged PolygonObject, export its points, polygons, the weight map and the joints into an extern program, where I try to display the rigged model. Now, it would be necessary to re-rig the model in the extern program using "vertex skinning", as described here. This is where I have trouble doing this myself.

          To put it in few words: translate each point by the inverse global matrix multiplied by the weight value of each affecting joint, when animating/rendering translate the translated point by each joint's global matrix multiplied by the weight value.

          With just one joint, this works flawlessly, but I can't get it to work with multiple joints.

          Since I have so much trouble doing this myself, I thought that maybe it's possible to use data Cinema itself, instead calculating it myself.

          What I need is the data Cinema uses to modify the rigged model from this (in rest state) :

          to this:

          I hope this makes my question clearer.

          1 Reply Last reply Reply Quote 0
          • H
            Helper
            last edited by

            On 23/03/2017 at 09:29, xxxxxxxx wrote:

            Hello

            Sorry for the late reply. Have you had a breakthrough with your problem ?

            When you say
            "when animating/rendering translate the translated point by each joint's global matrix multiplied by the weight value. "
            are you doing this for each joint then adding the results ? Cause I think this would definitely not produce good results. Instead you would have to multiply the weight value by a joint's displacement relative to it's original position. You will apply a certain ratio (the weight value) to the displacement. The "ratioed" displacement can be added to the original position of the point.

            It's a bit hard to decode what we assume you are doing in your own software with data extracted with the sdk. A suggestion would be to try to reproduce the problem with sdk code so you could send us a code snippet. I.e. reproduce a sample of what your external program is doing using the sdk code, just try to take a sample point and apply the weight values from all joints on it, see if the final result is good.

            Phil

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