Search Unity

Puppet2D - An advanced skeletal animation tool

Discussion in 'Assets and Asset Store' started by jamieniman, Dec 31, 2013.

  1. Shindoh

    Shindoh

    Joined:
    Sep 30, 2014
    Posts:
    11
    I see. Also be careful with the weight-painting, as weight-painting only works in the bind-bose. Or rather, it will still work after you posed the model, but although those rainbow colors are shown to you on the model in the pose it is in, in the back it's actually still in its original pose. So don't be surprised when you attempt to paint weights after you posed the model and everything messes up, because where you think you are painting isn't necessarily where you actually are painting after you posed the model, i.e., imagine you moved up the entire arm of a character to be straight horizontal (to pose it), if you now paint weights, and in the original bind pose the arm was down, then painting along the horizontal arm won't do anything, and painting on the invisible area where the arm was in the bind pose will actually change weights.

    You can still manually edit weights in any pose though, which is why I personally prefer that method, so I can actually see how certain poses are affected by changes immediately.

    Something to be mindful of. There's a few caveats to figure out that unfortunately aren't explicitly mentioned in any documentation.
     
    j-bomb likes this.
  2. Shindoh

    Shindoh

    Joined:
    Sep 30, 2014
    Posts:
    11
    Hey @jamieniman,

    I just stumbled upon another issue and just wanted to know whether there's a workaround for that.
    I organized my gameobject hierarchy as follows for better clarity for myself (names are abstracted):

    MyCharacterName (Empty GameObject)
    -- Global_CTRL
    ---- Bones (Empty GameObject)
    ------- RootBone
    --------- ChildBone
    --------- ChildBone
    ----------- ChildBone
    ------------- . . .
    ---- SpriteMeshes (Empty GameObject)
    ------- MeshA
    ------- MeshB
    ------- MeshC
    ------- . . .
    ---- Controls (Empty GameObject)
    ------ Control_Group_A
    -------- Control_A_CTRL
    ------ Control_Group_B
    -------- Control_B_CTRL
    ---------- Control_Group_C
    ------------ Control_C_CTRL
    -------------- . . .
    ---------------- . . .

    The Issue:
    When attempting to create an animation for the character using the controls while the animation window is recording,
    the keys are created for every given control in the animation timeline, but each control is listed in yellow collor and has the appended text of "(missing!)".

    Example: Control_B_CTRL (missing!)

    Essentially, creating a key for any control will add that control's name on the left of the animation timeline, but no actual property changes are recorded.

    It's of course super weird, because all the controls are there, obviously, because I am using them to attempt to record keyframes.

    The Solution:
    When I moved the RootControl (a parent control for the hip bone), which contains all the other controls as children in my setup, out of my empty Controls container gameobject, back to be a direct child of Global_CTRL, recording keyframes worked as expected again.

    Why is placing the controls into another gameobject container object preventing the animation window from finding them?

    EDIT (actual reason that caused this weird behavior):
    Fixed. Turns out this happened because I had a forward slash in the name of my Root Control_Group object. I called it "Bone Hip/Origin_CTRL_GRP".

    Jesus, I'm just so great at finding the weirdest bugs.

    So turns out that putting a forward-slash (/) into the name of any GameObject makes it unfindable by the animation window. You can still click to add a property, and even select the GameObject with the forward slash in its name, and you can even see all its child-gameobjects, but trying to actually add any property by double-clicking it, or clicking on the little +-sign next to it, won't do anything.

    Essentially, you can't add any properties for that gameobject and neither any of its children.
    And when you hit the record button and create keyframes by manipulating the object components directly, keyframes will be added, but each property will be added in yellow color with the (Missing!) message added, and no animation is actually recorded.

    Made my day.
     
    Last edited: Jan 15, 2018
  3. j-bomb

    j-bomb

    Joined:
    Jan 14, 2018
    Posts:
    16
    One of the things I'm trying to figure out is why when one mesh overlaps itself with a diffuse shader it reflects double the light. The other problem I'm having is that my FFD meshes completely fill up with any material I use if I try to use any other shader than sprite diffuse.
     
    Last edited: Jan 19, 2018
  4. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    Not sure whats causing this issue you're getting.
    Could you try first adding a PolygonCollider2D to the sprite. Check in the inspector how many paths it has (ideally this should be 1, as it uses this path to define the border of the sprite) If the first path is a little opaque pixel for example, this would cause it to make a tiny pixel sized mesh.

    Do you get any console errors by the way?

    By any chance would you be able to email me the texture, so I can experiment with it my end (puppet2d@gmail.com)
     
  5. j-bomb

    j-bomb

    Joined:
    Jan 14, 2018
    Posts:
    16
    I responded to you via e-mail. I look forward to your response.
     
  6. Eleid

    Eleid

    Joined:
    Dec 8, 2015
    Posts:
    7
    Hi Jamie,

    I have an issue with opening Puppet2D Editor. When I bought your tool everything was fine. Then I had a little break with creating animations. I tried to open the editor today and I realized it didn't work. I'm trying to click 'Window --> Puppet2D' nothing happens (see: https://i.imgur.com/hjQ50WC.gif). I have no errors in logs and no displayed messages. The only hint I have is the message which is displayed during opening entire Unity editor. I have three error logs which you can see in the attachment. Unfortunately, I don't understand what is happening there.

    I tried to update Puppet2D to the newest version but the only change I observed was the fact that those error logs are not displayed right now when I turning on Unity editor. Puppet2D editor still cannot be displayed.

    I use Unity 5.6.0f3 64bit

    Do you have any idea what happened?
     

    Attached Files:

  7. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    Have you tried resting your workspace back to default?
     
  8. Eleid

    Eleid

    Joined:
    Dec 8, 2015
    Posts:
    7
    What do you mean by "reseting workspace back to default"? What type of operation in Unity? Revert Factory settings for layout? When I did it and tried to open Puppet Editor I received the same errors in console.
     

    Attached Files:

  9. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    yes, thats what i meant. Hmm - i haven't seen this issue before.

    Could you try making a fresh clean project, import Puppet2d into it from scratch and see if you get this issue.

    ( If that works, it could indicate either a conflict in your project, or it perhaps corrupted in an update or something. Let me know either way, and hopefully we can get to the bottom of this)
     
  10. Shindoh

    Shindoh

    Joined:
    Sep 30, 2014
    Posts:
    11
    Hi Jamie,

    How do I smoothly change the bones affecting an FFD control point?

    Simply dragging in a new bone to replace one in an FFD point's bones list is causing unpredictable and strange deformation behavior. I can see that the Delta values on the Puppet 2D_FFD Line Display component for a bone are also not updated when I change an assigned bone, which means its taking on the values of the previous bone, which is obviously incorrect.

    I don't know how I can smoothly change a bone for an FFD point and have these delta values be correctly set.
    Otherwise it's quite inflexible, since I have no influence on the binding process, so it'd depend on luck whether or not FFD points are bound to bones in a way I'd like.

    Thanks a lot for your help.
     
  11. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    Try this instead. Select the FFD control you want to reassign, and the bones you want it to be attached to and click "Bind Smooth Skin". This should reassign the bones correctly.
     
  12. Shindoh

    Shindoh

    Joined:
    Sep 30, 2014
    Posts:
    11
    Awesome, thanks so much! :)
     
  13. Shindoh

    Shindoh

    Joined:
    Sep 30, 2014
    Posts:
    11
    Hey Jamie,

    If I want to detach bones from FFD control points, is there a more "official" or faster way than selecting all FFD control points and setting all their Bones Size, Weight Size and Delta Size values to 0 to remove all bone associations?

    What I need this for is in case I need to edit the skeleton.
    With regular, non-FFD meshes, I can detach the bones by hitting the Bind Smooth Skin button with the skinned mesh selected. For FFD-meshes this of course just detaches the control points from the mesh, not the bones.

    Thanks a lot!
     
  14. TimHellmann

    TimHellmann

    Joined:
    Mar 6, 2011
    Posts:
    66
    Hey guys. I have a red error for some days now since I updated from an older 2017 to the new 2017.3.1 Unity version.

    Assets/Puppet2D/Scripts/Editor/Puppet2D_CreatePolygonFromSprite.cs(304,14): error CS0433: The imported type `Poly2Tri.TriangulationPoint' is defined multiple times

    I already deleted the Puppet2D folder and reimported it entirely. The error still occurs afterwards. Can anyone help me further? That would be great.
     
  15. putragonist

    putragonist

    Joined:
    Aug 13, 2013
    Posts:
    8
    Aye, I've got this error too because it conflicted with probuilder asset (Deleting probuilder or puppet2d and it work fine). Hope the dev will fix it soon.
     
  16. PaulW

    PaulW

    Joined:
    Sep 2, 2014
    Posts:
    1
    @nekova : thanks for the tip.. We deleted probuilder tools for testing, actually runs again after recompiling. It seems its a namespace conflict, as puppets global namespace is making those errors once ProBuilder is installed.
    Really hoping this gets fixed...
     
    Last edited: Feb 19, 2018
  17. Shindoh

    Shindoh

    Joined:
    Sep 30, 2014
    Posts:
    11
    Hey Jamie, could you add a function for force-binding two bones to a particular FFD-mesh control point?
    I've encountered a couple of times now situations where binding bones to an FFD-mesh resulted in some FFD control points being assigned to a single bone only, whereas I'd like that point to be influenced by two bones.

    I figured out a temporary workaround for this by copying the Puppet2D FFD Line Display component of the control point and pasting it on the same control point (to obtain a duplicate), so I can save the Delta values this component relies on to function correctly. I then deactivate the duplicate. Then I bind the control point exclusively to the other bone I want the control point to be influenced by to obtain the Delta values for that bone as well. Now I update all values on the active Puppet2D FFD Line Display component to be for two bones and copy-paste the Delta values for the other bone from my duplicate component I made earlier.

    That's of course pretty hacky and time-intensive.

    It would be great to always have the two closest bones be assigned to a control-point, and if one simply happens to be too far out of range for the algorithm, just have it be assigned a Weight value of 0 for that bone/joint.
     
  18. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    Hey,
    Did you know you can reassign a specific control to specific bones by selecting the bones and the controls and clicking "Bind Smooth Skin" (set to 2 bone skinning)
     
  19. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    That sounds like you have a conflict with an asset with the same Trianhulation Library code. What you could try is deleting the Puppet2D Triangulation folder and see if it still works (Making use of the duplicated library instead).
     
  20. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    Looks like both Puppet2D and probuilder use Poly2Tri without any namespacing - so we're both to blame really. I'm going to fix Puppet2D with namespacing and do an update
     
  21. j-bomb

    j-bomb

    Joined:
    Jan 14, 2018
    Posts:
    16
    I keep running into a problem so I figured I'd ask here: what are the best techniques for getting a good FFD mesh with a texture atlas? If my sprites are on an atlas, I often have to add a lot of padding in order to keep the other sprites in the atlas from showing up in the FFD mesh, or I need to create my FFD mesh very, very close to the sprite. One of the benefits of putting mesh points further away from the mesh has been less points and more control of larger areas of the sprite--this is very helpful for animating. If I keep the sprites I want to FFD as their own images, I don't have the same problem but it definitely uses more memory.
     
  22. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    Padding is most likely the way to do it.
    There is another option. You can make the FFD and then create another mesh from the same sprite and embed that mesh into those controls. (Using the 4bones(FFD) setting. You can see this in the croc tutorial when I embed his coat into the FFD) The only issue with this is it requires 4 bone skinning which is more CPU intensive.
     
  23. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    2,517
    Can this be used to display portrait of a character in a dialogue panel? I would like to make a full body rig, and then only display face bit part masked in a box shape next to the dialogue text.
     
  24. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    Yeah sure. You could always duplucate your character and place it where you want its face to be
     
  25. Shilo

    Shilo

    Joined:
    Jun 8, 2014
    Posts:
    20
    @jamieniman

    Hello, I purchased Puppet2D and Puppet2D Platformer Animation Pack. I love them both!

    I am trying to autorig a single sprite female human character, but I ran into a lot of issues that lead me to believe I will need to split the texture into multiple parts. Her hair, chest, shorts, cape all get noticeably morphed, which ruins the animation all together. Can I please get some advice on how I should approach fixing the issues? Should I redraw some of the character parts to better adhere to a single sprite autorig, such as more spacing between the hair and arm. Or should I split some or all of the texture into body parts?

    Also I'm not sure why, but the finger tips on the right side seem to be morphed too, is this due to having no padding around the edges of the texture or something else?

    I attached the sprite of the character.

    Here are the autorig bone/join placements (probably not perfect, but I believe none of the issues I listed above is due to the bone placements itself):


    Here is what it looks like during animations:
    https://cl.ly/q8in

    @everyone
    Due to lack of time and knowledge with skeletal animations, I am willing to pay someone to split the texture into parts (if necessary) and rig it for me to get proper animations and visual.

    Thank you!
     

    Attached Files:

    Last edited: Mar 14, 2018
  26. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    Hi,

    You should pad the character with a few transparent pixels to avoid the bad weighting issue.

    It certainly helps to split up the character. You can actually also create the autorig with the full character and then manually skin each body part to the same bones. That way you dont need to get it right first time.

    For your character I would recommend these parts:
    1. main body (including the front coat tail, left arm , left leg and head)
    2. Right arm
    3. Right Leg
    4. back coat
    5. Pony tail
     
    Shilo likes this.
  27. Virol

    Virol

    Joined:
    Mar 19, 2018
    Posts:
    4
    Hi,

    I have this problem where, when i create a bone, its created and all, but appearse like in a lower layer, and i cant see it, is there a way to bring it front to be able to see the skeleton?

    thanks

    upload_2018-3-19_5-29-1.png
     
  28. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    Hi,

    Make sure you set the sorting layer in the Puppet2D GUI before creating the bones. (You can then order the bones sorting layer to appear above the character)

    Also you may need to adjust the size of the bone hande (the slider appears next to where you set the bone sorting layer. To set a value manually for this slider - click on the float box and press enter to start typing values)

    upload_2018-3-19_11-42-47.png
     
  29. Virol

    Virol

    Joined:
    Mar 19, 2018
    Posts:
    4
    Thanks a lot, that really help :D
     
  30. Kk_radford

    Kk_radford

    Joined:
    Dec 20, 2012
    Posts:
    31
    Hi, great asset, the one part we seem to be missing is control over the mesh that is generated for weight painting. We would like to be able to add and remove verts from this mesh manually. I see that we can kind of do this by adding a polygon collider and adding and removing verts to it before generating the mesh, but this has it's limitations because colliders always need to be convex, and we can only add verts on the outside of the collider? We cannot seem to find a way of adding verts into the middle of the mesh.

    For instance this is our mesh that is generated:

    meshControlNoLine.png

    And we would like to add verts that split this mesh up the middle like so, to help with the way the mesh then deforms in animation:

    meshControlLineThrough.png
    Any guidance or assistance for this would be greatly appreciated. We see people talking here about probuilder, can this be used to add or remove verts in the way that we are trying to do?
     
  31. GlenNoctor

    GlenNoctor

    Joined:
    Mar 9, 2018
    Posts:
    1
    Hey. I'm loving the plugin so far, but I have encountered a few issues. If anyone can offer some support I'd really appreciate it:

    1: When I bind my skeleton to the mesh it works great, but when I switch to a different scene and then come back to the one with the Puppet2D character it seems that the skin is no longer bound. I have definitely saved the scene and project, and this happens consistently every time I switch between two scenes. Am I missing something? Is there some way to finalize the character so that it will stay rigged between scenes? It doesn't happen when I use FFD, only if I use Convert Sprite to Mesh and then bind that, but the FFD mesh isn't ideal for the rig I'm working on. Is it necessary to use the FFD tool?

    2: When rigging the character is there any way to unbind the skin after you've bound it? (aside from the method above, which doesn't seem intentional). Being able to quickly bind an unbind the skin to test the rig while designing it is pretty important, but so far I haven't found a way to do it without messing up the rig. This is even worse when using an FFD rig because the method above doesn't even work so I can't find any way to unbind it without loading an earlier build or just starting over. There may be something obvious that I'm missing.

    3. When using the FFD tool to create the mesh, is there any way to change the layout of the mesh? When using the Convert Sprite to Mesh tool you can do this by changing the Type of Mesh (0-5). This option is very useful, as the standard polygon layout is not always suitable, especially when dealing with complex rigs. The FFD system would be perfect if you could subdivide the mesh it generates, but as it is it's just too limited. This is especially frustrating due to the first issue I mentioned above.

    Again, any advice would be really appreciated. I'm at the point where Puppet 2D is almost perfect for what I'm doing. I just need to get around these few issues.

    Thanks!

    EDIT: Also, is there any way to remove or add a point once and FFD chain has been created?
     
    Last edited: Mar 20, 2018
  32. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    There are two options, you can up the subdiv level (type of mesh). Or you can use the ffd tool to create the mesh manually. You can actually start off with a polygoncollider2d to set the outside path, then right click to start adding new vertices in the centre of the mesh.
    Whilst you still have the ffd you can edit the mesh using the ffd tool. Once youre happy you can delete the ffd controls and skin it normally. Or you can bind the ffd controls themselves.
     
  33. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    This doesn't seem right. I can't reproduce this bug. What version of Unity are you using? What version of Puppet2D? Does it happen every time or only occasionally? Could you email Puppet2d@gmail.com with a video of steps to reproduce it?

    To unbind the skin select the skinnedmesh on its own and click "Bind Smooth Skin". It will ask you if you want to detach the skin. Select yes.

    You can actually manually add vertexes to the interior of the FFD mesh. To do this, first create the outer mesh, then right click, and then you can start creating points in the interior of the mesh,

    Yes, as long as you haven't bound the FFD controls to bones, you can edit the FFD by selecting the FFD mesh and clicking "Create FFD tool" again, you can now make changes to the FFD controls (add, move and delete them).

    The only caveat is you need to keep an eye on the path number on the FFD_Ctrls_GRP when deleting controls. The first element corresponds with the control index where the first path ends. The first path defines the outer vertices of your character.

    upload_2018-3-22_10-38-47.png
     
  34. Kk_radford

    Kk_radford

    Joined:
    Dec 20, 2012
    Posts:
    31
    Brilliant, Thank you!
     
    jamieniman likes this.
  35. jarodkitchen

    jarodkitchen

    Joined:
    Oct 15, 2017
    Posts:
    4
    Hello @jamieniman,

    First, thanks for the excellent product! I've been using it for several months now, and have stumbled across a problem I hope you can help me solve.

    I was able to get my Puppet2D character is rigged and skinned with very little trouble, and created many animations for it. However, I recently decided that some of these animations should use stretchy limbs.

    puppet_squashstretch1.png

    The character has four IK handles (both of its wrists and feet). I was able to enable SquashAndStretch for three of the controls with no problem. But when I enabled it for the left wrist control, this happened:

    puppet_squashstretch2.png

    I don't recall rigging or skinning this limb any differently than the other three. But that was many weeks ago, so it's very possible I bungled something. When SquashAndStretch is enabled, I cannot re-scale the bone in the hierarchy. The only way to fix it is to disable SquashAndStretch, then manually reset the scale of the shoulder bone's transform component. But, of course, that means the limb cannot stretch.

    When I look at the script for Puppet 2D_IK Handle, I get the sense that the trouble has something to do with "scaleStart", but I don't know where (or when) this value is set, or if that's even what the problem is. Is there a fix you can think of that wouldn't involve lots of surgery on the character?

    Thanks in advance,
    Jarod.
     
    Last edited: Apr 1, 2018
  36. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    Have you tried deleting the IK control (and pole) for that control and remaking it? The name should be the same, so all the animations should still work.
     
    jarodkitchen likes this.
  37. jarodkitchen

    jarodkitchen

    Joined:
    Oct 15, 2017
    Posts:
    4
    That worked! Thanks!
     
  38. alanmthomas

    alanmthomas

    Joined:
    Sep 7, 2015
    Posts:
    197
    Just got Puppet 2D. Loving it so far. No big surprise. I'm wondering if there is a way to edit the skin weights on an FFD mesh. I've created the FFD and then bound that to my skeleton. I've tried editing the weights but perhaps I'm not thinking or going about this correctly?
     
  39. alanmthomas

    alanmthomas

    Joined:
    Sep 7, 2015
    Posts:
    197
    One more question while I'm at it. I may be pushing it with this one, but is it possible to use FFD transformations on a sprite mask? For example, if I use the FFD to transform the eye white shape to animate a blink or various eye closed positions, the pupil and iris would ideally not deform. Applying a mask to the whites and having that deform with the mesh would be a solution for this.
     
  40. hottabych

    hottabych

    Joined:
    Apr 18, 2015
    Posts:
    107
    Hi. I consider buying your asset.
    What are benefits comparing to free Anima2D?
    What's with optimization? Can it batch sprites to a single mesh?
    I read in reviews section that bone creating is not undoable. Is it fixed for now?
    And your site seems to be down.
     
  41. MoFaShi

    MoFaShi

    Joined:
    Oct 25, 2015
    Posts:
    43
    could you make some new video tutorials for this assets? the old ones can't clearly see what you did in those videos.
     
  42. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    Apologies for the late reply. You cant paint weights on the FFD controls. Instead you can change their weights in the inspector. You can reskin them to other bones by selecting the bones and the controls and clicking "Bind Smooth Skin"
     
  43. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    You may need to make a custom shader to do this kind of masking - after making it a skinned mesh or FFD it is no longer a sprite but a mesh. So itll need shaders that work with meshes
     
  44. _watcher_

    _watcher_

    Joined:
    Nov 7, 2014
    Posts:
    261
    Id suggest the problem with Puppet2D's system is the extreme tediousness to accomplish desirable result in larger projects. In a project that requires multiple inner FFD region definitions and a lot of deformations for those (posing, animation), its too easy to make a mistake.. somehow, the controls allow you to "break" the FFD mesh, and then its up to you to "manually tweak" the FFDPathNumber array via inspector and the sub-Global_CTRL FFD controls (like the numbers, indexes). Either there should be more robust FFD tools/controls, or they should limit user interaction in ways that can not break the inner data model (on top of which you build the system). Even exposing the FFDPathNumber etc (in hierarchy and inspector) seems undesirable (system should be a blackbox, and manage its own state, and also repairing the state, without user's intervention). Just my two cents.

    I spent 2 days "testing" your FFD system (to decide if it can be used in a specific large project), im mostly concerned in 100% reproducibility (even if it means errors, its fine as long as there is a deterministic solution to achieve 100% deterministic result), as there are hundreds of characters/objects/animations that will need to be tackled later on, and the answer if this system is usable in such use-case, is a no-no.

    Im attaching a picture from which you can figure out an extremely common problem, when dealing with a larger FFD mesh. This one has 1 main loop (runs around the texture; index 0 in the FFDPathNumber array), and 5 "sub"-loops, so that's 6 loops total. At some point when deforming the mesh for posing/animation, it "sometimes" happens, that the indexes start "weirding out" (im sure there is a way to test 100% for why this happens, as either due to pressing specific keys like CTRL/SHIFT, when they "should not" be pressed/processed, or due to some other reason. My point is, the FFD controls are extremely unstable, and if they were better tested, this would not happen) - so at some point during posing/animation - there is a loss of last 2 path indexes (4, 5) (see picture), and when you keep adding verts at that point, you get wrong Ctrl_INDEX-ed objects created in scene hierarchy also, sometimes the newly created Ctrl_INDEX-ed gameobjects receive wrong reference to "output skinned mesh" (null/missing or new one is created), and there might be other errors associated with this. Another that happens occasionally that i can think of off the top of my head, is that due to the index bug, or other wise, the mesh deformations stop relating to the actually vertex positions - now this is a major problem, as the mesh deformation is destructive (when directly based on the buggy data model), at which point it is not enough to simply "fix" the broken indexes via inspector (the mesh stays broken), so one has to start over. On the other hand, i do like that you built the mesh on top of that data model. Just the model needs fixing. In fact, the model is okay. I would even hide it instead of exposing it, blackbox it and fix the control-related bugs, so they cant break it.

    indexes_lost.png

    I'm sure you can reproduce the above issue by simply playing with your asset for a day, but then, something tells me you know the controls for more complex FFD meshes are not "sophisticated enough", or "could be improved", but just haven't decided to improve them, perhaps because the use-case is so small. I'm unsure what your target audience is, but i can say that i really like some of the approaches you chose when building your system, and comparing to some other rigging/skinning/animation solutions this one really shines in some aspects, let alone the fact that its embedded within the engine, its thus even more painful to have to let it go.
     
    Last edited: Jun 21, 2018
  45. Jiraiyah

    Jiraiyah

    Joined:
    Mar 4, 2013
    Posts:
    175
    That is not the only problem with puppet2d, i tried it in 2018.1.0 final version, many many times, the ffd fails to even move the closest mesh points to itself but it is getting vertices right on the other side of the character's body, when i try to bind an FFD mesh to bones, sometimes it works, sometimes the mesh looses connection to ffd ! and there are even more bugs that i am too tired to write about it regarding ffd right now, tried a single mesh skinning and failed for 4 hours non stop, got a nasty head ache, and before you even think i am new to character rigging and skinning, i have done the most complex character rigs in maya for 4 years, so no, i know what i am talking about ! if you ask me, this asset should get a total rewrite and change the whole approach it is taking toward things.

    Take a look for yourself :

    first of all, lets bind a pre build mesh to a drawn ffd :
    Screenshot_5.png
    Selecting the top three controls on ffd, and move it around
    Screenshot_6.png
    Ok, what the hell is going on?
    Screenshot_7.png
    Nothing special in the settings and binding, so, why ffd is behaving like this?
    Also, without an easy way of changing the weights on ffd controls, impossible to fix this sort of problem ! so yah, your system fails bad times sir. and this is one of few problems that wouldn't let me even start putting a single key frame. did you ever decided that many 2D characters will wit in a 1 unit width? your controls either are too big or won't show up in using the manual mode of assigning weights to bones. your painting mode on bones don't do anything on the bones unless you go for a denser character mesh and that means overlapping of hundred controls within that 1 unit width !
    seriously, for a tool like this, these are big failure times !
     
    Last edited: Jun 25, 2018
  46. Jiraiyah

    Jiraiyah

    Joined:
    Mar 4, 2013
    Posts:
    175
    And, When the whole system fails to do what it should do, AND you have experience :
    instead of getting help from the system to draw or set proper painting, you go for distributing weights between extra bones !
    Screenshot_9.png
    Now time to add extra Controllers to help with errors during animations :
    Screenshot_10.png
    And you have enough experience to know what controller should be child of what, now the system is ready for animation, FINALLY after 5 hours, for, what you were hoping to go well in less than 30 minutes, oh well !
    Screenshot_11.png

    After all, for experienced character rigger, weights are not a stopping point, but honestly, i was hoping to get FFD working not only for the body, but also the head, unfortunately, fail after fail after fail on ffd.

    now, it maybe my special thing about these sprites, what you are seeing is a set of two sprites sitting on top of each other per part, for example the body in previous post is two sprites with different materials sitting on top of each other,

    but knowing that the algorithm for skinning didn't change between the two meshes, and even trying a single mesh, and the very basic functionality of FFD fail....... donno what to think about it any more. at least, now i can have normal animations going on, shame though, no more squash and stretch in a sane way for me until the end of the project !
     
  47. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    Thanks for your detailed feedback.
    My intention is to revisit the FFD feature. Its invaluable to get detailed reports from users as this helps me track down issues.
    As a rigging tool developer i find what tends to happen is since i know the tool well and how it is made i tend to use it in a way that it doesn't break for me.
    Your bug seems very mysterious - why would the ffd indices change if your just amimating not changing the ffd? Did you perhaps make a new ffd in the scene and that changed the other one somehow?
    Any more info you can give me would be invaluable to me. If you want you can email me at puppet2d@gmail.com.

    I agree about the ffd paths should be handled in a robust blackbox way. Its something ill be looking at when revisiting the feature.

    One thing ill be doing is reducing it to max 2 paths, and remove the lines between the inner points. The first path is the external bounds and every inner point can actually be placed whereever you need. The lines are actually causing confusion.
     
  48. jamieniman

    jamieniman

    Joined:
    Jan 7, 2013
    Posts:
    987
    Ill need to look into that mesh issue. Ive not experienced/seen that issue before so i need to track it down.

    If you do get a spare moment, are you able to email me (puppet2d@gmail.com) with bug reports for your issues. Including steps to reproduce, assets it breaks on, images/videos are really helpful. I rarely get things in this format so it can make it harder to track down and fix any bugs.
     
  49. Jiraiyah

    Jiraiyah

    Joined:
    Mar 4, 2013
    Posts:
    175
    no worries, i will make a video about it with all the problems i saw and i will send you the link by email.
     
  50. _watcher_

    _watcher_

    Joined:
    Nov 7, 2014
    Posts:
    261
    Thank you for the reply. I'm already using a different tool, but would totally come back to Puppet2D if it was fixed. The in-engine integration sounds just too good for fast iterations.

    To answer from what i remember, i was using the same mesh, i tried different sequential approaches, eg first i tried doing start FFD convert > path1 > finish FFD > select the same mesh > start FFD > create path 2 > finish FFD > .. > select the same mesh > start FFD > create path N > finish FFD.
    Then i tried doing all paths at once between start FFD and finish FFD.
    And other ways i could think of. Tried those again multiple times, sequentially, very slowly, paying attention where it breaks. When following these steps diligently and sequentially, your system seemed to hold fine. I seemed to notice it broke when i pressed Ctrl or Shift when out of FFD (eg when the mesh was already deformed) and there were other cases, ultimately the bugs seemed to pertain to unhandled exceptions from using controls. I was honestly pretty certain, that if you go sequentially and between each step you try to press random keys violently :confused:, and try some other stuff, like grabbing vertices and moving them around, criss-cross them, i dont know, do wild stuff - you might find few untested combinations that would break the mesh - and the Ctrl+Z will no longer function, and since the mesh is already deformed in a wrong way - and you cant go back - you have to start over. The starting-over part is the worst part honestly. We are talking "complex meshes" - where starting over means a lot of extra work before things break again. So yes, you need to isolate the use-case, i cant give you precise answer/breaking-point, all i remember is that there were multiple, and you gotta play with it in your free time. Id suggest just play with it, go wild, forget you know the system at all. Using Ctrl+Shift all the time like a robot? Stop using them. You dont know them. Use just mouse like a stoneage monkey. Limit yourself, and then allow yourself to violently smash the keyboard to expand the input range and see what your asset can handle. Lots of time i dont have to test and isolate the bugs.

    But you do.

    Good luck!

    PS Oh and i do like the idea of having 1 path and inner points, let teh system handle the triangulation based on inner points defined by the user (similiar to Spine2D -- if that's what you ment)