Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

[DEPRECATED] Anima2D - Advanced 2D Skeletal Animation Plugin

Discussion in 'Assets and Asset Store' started by sergi_mandarina, Nov 21, 2015.

Thread Status:
Not open for further replies.
  1. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Edit, January 2021:

    Anima2D is a new 2D Skeletal Animation Plugin that focuses in usability, workflow and quality.

    Features:

    Bones
    Create Bone Hierarchies using the newBone2D Component. It has never been that easy to create new skeletons: just create, parent and link Anima2D's Bones. Control Bone's rotation just by dragging it's gizmo.

    Mesh Editor
    Create complex Meshes from Sprites. Meshes can be fine-tuned from an advanced Editor Window. You can add and delete vertices, holes, edges and edge constraints to achieve the desired triangulation.

    Automatic Weights
    Anima2D calculates Skinning Weights for you automatically. We use state-of-the-art algorithms to give you the best weights possible that work out of the box in most of the situations.

    Weight Editor
    Edit and fine-tune your Weights using the integrated Weight Editor. It allows singleand multiple vertex editing by adding andsubtracting bone's influence, smoothingbetween neighbouring vertices and reseting to default automatic values.

    Inverse Kinematics
    Anima2D includes an easy to use Inverse Kinematics system that allows to create consistent poses for limbs and bone chains of arbitrary length. Inverse Kinematics work in Editor too!

    Animation Authoring
    Anima2D improves Unity's animation workflow by enabling Inverse Kinematics while in Record Mode. Moving an IK object will record new Keyframes for all the bones that moved.

    Pose Manager
    Save and Load skeleton poses with a single click using the Pose Manager component. Poses are saved to a separate asset file and can be loaded while in record mode too!

    Unity Integration
    We care about usability and integration. We made an special effort to follow The Unity Way philosophy by iterating the tool until it became simple to use yet powerful. All generated assets are saved into files. Create Prefabs of your creations. Full Undosupport. You will forget you are using a plugin!

    C# Source Code included!


    Watch Anima2D in action:


    We are currently working in more tutorials and videos, stay tuned!


    FAQ:

    Q: Does anima2D support image swapping on different body parts etc?
    A: If you are using SpriteRenderers parented to bones you can animate the 'sprite' property in the SpriteRenderer. If you are using Skinned Renderers my recomendation is to skin all the body parts properly and then enable/disable the gameObjects as needed.

    Q: How is the mobile performance?
    A: Anima2D doesn't have any impact on the performance as it uses only Unity components in runtime (SkinnedMeshRenderer). It is mainly an Editor Tool.

    Q: Whats comming on next update?
    A: Right now we are working in implementing FFD (free form deformation) in a way that we think is the best using Unity's 5.3 new features.
     

    Attached Files:

    Last edited by a moderator: Jan 12, 2021
  2. xGagasx

    xGagasx

    Joined:
    Aug 21, 2015
    Posts:
    3
    Cool !!!
    is there any scripting reference or tutorial ?
     
  3. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    We are working in step by step video tutorials as well as bug fixing and new features. You can read our user guide here http://anima2d.com/documentation/
     
  4. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Hi everyone,

    Anima2D v1.0.2 will be released soon. In this release we focused in fixing bugs, usability improvements and Unity integration in order to make the tool as solid as possible. We received lots of feedback and feature requests from the community during our first month so thank you very much! Your feedback and requests really helps Anima2D to improve!

    One of the things you will find in this version is bone highlighting:



    Setting the bone alpha to 0 will hide the bones but you will still be able to manipulate the skeleton:



    We also fixed culling issues. We forgot to set the 'Root bone' property to the SkinnedMeshRenderers that was causing meshes to disappear. Please remember to reset the SkinnedMeshRenderers of your SpriteMeshInstances by selecting 'Set mesh renderer' followed by 'Set skinned renderer'.

    Take a look at the full change-log:
    - Create SpriteMesh: works on selected textures in the Project View.
    - PoseManager: now checks and shows invalid duplicate bone paths.
    - PoseManager: Load pose will set the position of the attached IKs.
    - Visible and Locked Layers now work as expected in bones.
    - SpriteMeshInstanceEditor: added warning messages when bone list is not valid for skinning.
    - Scene GUI: Highlight the current hovered bone.
    - Scene GUI: Improved bone gizmo size taking zoom into account.
    - Compatible with Unity 5.3.x.
    - Fix: Additive vertex selection using control button was not working on windows.
    - Fix: SpriteMeshInstace "Set skinned renderer" button now sets the "root bone" property.
    - Fix: Several Undo related bugs:
    Undo breaking bone chain by unparenting transforms was not recovering the child bone reference.
    Undo bone hierarchy deletion was causing problems in SpriteMesh Editor, IK components and SpriteMeshInstances.
    - Fix: nullref exceptions when undoing bone hierarchy deletion.
    - Fix: Created SpriteMeshes could have a small offset compared to the original Sprite.
    - Fix: You can now scale bones attached to a LimbIK.
    - Fix: IKs do not update on scene pan/orbit/FPS mouse drag anymore.
    That introduced unwanted keyframes in animation mode.

    Cheers,

    Sergi
     
  5. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
  6. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    Can this be used to animate (deform mesh) a mouth chewing from a straight-on frontal view? I guess it'd need a circular or a looped bone structure with the last bone connected to the first. Is his even possible?
     
  7. ask80me

    ask80me

    Joined:
    Sep 17, 2015
    Posts:
    43
    Svg support?
     
  8. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    I talked to the developer before and if I remember correctly the answer is no. To use this asset I recommend using SVG to PNG asset then import the PNG as a Sprite, then animate it with Anime2D.
     
  9. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    We are back on track :) (just to make sure, support email is support@anima2d.com)

    It depends on each case. Usually this kind of situations are better solved by using blendshapes (we are working on it) but you can achieve good results using bones too.

    We have no plans to add SVG importation natively in Anima2D. But using SVG assets from other plugins like SVG Importer will be supported at some point but not in a short term.
     
  10. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    Hello Sergi. Actually I emailed to the correct address (support@anima2d.com). I just spelled it wrong here. So now I'm using SVG to PNG asset. Just to confirm...Anima2D does work with PNGs imported as sprites. Is that correct?
     
  11. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    In your manual I see that it creates a new Material for the sprite that it converts into a SpriteMesh. Can I use the Sprites/Diffuse shader? (because I want my Sprite/SpriteMesh game objects to be affected by lighting.)
     
  12. ask80me

    ask80me

    Joined:
    Sep 17, 2015
    Posts:
    43
    SVG to PNG asset is not good
     
  13. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    Why not?
     
  14. ask80me

    ask80me

    Joined:
    Sep 17, 2015
    Posts:
    43
    The quality suffers greatly. It turns out worse than if you do png.
     
  15. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    This is correct. Create the sprite as usual using the Sprite Editor. Then select the sprite in the project view and create the SpriteMesh from it.

    Yes, you can use diffuse shader and use lights.
     
  16. jeffweber

    jeffweber

    Joined:
    Dec 17, 2009
    Posts:
    616
    Good to see some more action on the forums from the devs here. I have both this asset and puppet2d. So far I prefer the workflow of Anima2D, but worry a bit that the development will stagnate. Nothing against you guys, just always a risk with new assets.

    Hopefully you guys are all in on this and will continue to iterate on the features. If you do, I think this asset will have a great future.

    Keep up the good work!

    -Jeff
     
  17. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Thanks Jeff, I am glad you enjoyed Anima2D :)

    We never stopped working on it, just we don't make much noise yet.
    Some of the things already done that will include the next version:
    - Override Unity sprite geometry.
    - Automatic mesh slice with optional inner tessellation.
    - Pivot point editor (with optional pixel-snap).
    - Compatible with Unity generated Atlases.
    - Mesh self-overlapping control (bone z-order).
    - Improved weight editor slider behaviour.
    - Weights can now have unassigned indices if not used.

    The goal is to be able to draw a full skinned character in one draw-call using Unity's auto-generated atlas.

    To do that we need to tell Unity to generate the atlas using our custom geometry, so we added the sprite override geometry feature:


    By activating the "Override" checkbox the sprite will use our custom editable geometry.

    That how the automatic mesh slice looks like:



    Cheers,
    Sergi
     
  18. jeffweber

    jeffweber

    Joined:
    Dec 17, 2009
    Posts:
    616
    Excellent. Thanks for the update! Looking forward to your next release.
     
  19. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    If you save the SVG at a very high scale ratio, then when importing it into Unity use a Pixels per Unit setting of, say...500, the PNG files turn out very sharp with no jaggies.
     
  20. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    How can I get bones to affect only specific vertices in a SpriteMesh instance? I made a bone structure around the mouth of a face (front view) and I want the bones to affect only the shape of the mouth. But they affect the shape of the whole head.
     
  21. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    In that case you should have a separate image for the head and another image for the mouth.
     
  22. Kiori

    Kiori

    Joined:
    Jun 25, 2014
    Posts:
    161
    I saw in the video you used a default unity-transparent shader.
    Meaning if you get this right, every character could be using the same shader, potentially leading to 1 draw call for all?
    As it is with sprites?

    If you guys get through with performance improvements like this, you should post a demo, with like 30 fully animated characters(different ones), running at once, on mobile, with an fps count for us to see.

    This type of stuff would make this asset very interesting for a lot of people.

    Cheers
     
  23. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Just to clarify, as some people emailed us about this, skinned renderers cannot batch, so it doesn't matter if they all use the same material.

    Usually a character is composed of several skinned renderers. Each skinned renderer needs 1 draw-call. To be able to draw the character in 1 draw-call you need to manually combine the meshes (usually at runtime). That new skinned renderer needs a material with an atlas containing all the sprites used in the character's composition. Unity already packs sprites into atlases if specified, so all we have to do is to use it. That's what I ment when I said drawing a full character in one draw-call.

    You could theorically combine every skinned sprite in the atlas, maybe for animated backgrounds, but I would not recommend to combine several playable / non-playable ingame characters of your game in one renderer. Also the performance of skinning process depends heavily on the platform (cpu skinning number of cores / gpu skinning...)

    We are working in making Anima2D work as similar as Unity Sprites. That means you will be able to use one single material using a sprite's shader (like "sprites-default") for all the instances also with color tint (thanks to http://docs.unity3d.com/ScriptReference/MaterialPropertyBlock.html). I will post more details about this soon.

    Cheers
     
    Kiori likes this.
  24. jeffweber

    jeffweber

    Joined:
    Dec 17, 2009
    Posts:
    616
    Really looking forward to this and a better way to tessellate the mesh. Manually adding all the vertex points is a pain.

    Keep up the great work!

    -Jeff
     
  25. Kiori

    Kiori

    Joined:
    Jun 25, 2014
    Posts:
    161
    That would be logical and most ideal. Gluck!
     
  26. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Hi everyone,

    As promised, let me show you some more work in progress updates:

    - Your SpriteMesh assets will auto-update to a single file with icon and inspector preview. All the information used by the editor (texture vertices, edges, bindposes, weights...) will now be stored in a hidden editor-time sub-asset. The old mesh and material are still there but hidden, they are needed to make Unity's preview system work (Animator preview, prefab preview, etc).
    - SpriteMesh will auto-override your Sprite's geometry. Use the SpriteMesh Editor to optimize your native Sprites. Only one SpriteMesh per Sprite is allowed now, so make sure you don't have more than one SpriteMesh created from the same Sprite.



    - SpriteMeshInstance has been updated to mimic SpriteRenderer's looks and behaviour: unique sprite material, color tint, etc.
    - Enable Skinning checkbox instead of the old ugly buttons. Undo and multi-editing work also.
    - SpriteMeshInstance will set the atlas texture and update it's run-time mesh uv coords if the original sprite was packed. That allows combining skinned meshes at runtime.



    - Improved scene bone selection.
    - Rotating the bone by dragging now works on bones with negative scale.
    - Bone highlight will show vanishing child bones.
    - Added bone alpha color slider.



    Cheers

    Sergi
     
    b33rdy and jasonMcintosh like this.
  27. b33rdy

    b33rdy

    Joined:
    May 6, 2013
    Posts:
    9
    HI, when is the next release due out?

    I'd be interested in the the colour portion as an update, as I've got some assets our designed has created, but it's a pain to get them changed as they simply need darkening up.

    From the looks of it, the next update would allow me to do this in-editor...
     
  28. b33rdy

    b33rdy

    Joined:
    May 6, 2013
    Posts:
    9
    I see v1.1.0 has just been released! Thanks!
     
  29. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Yes :) finally! Let me know if you have any problem as many many things have changed.
     
    jasonMcintosh likes this.
  30. jeffweber

    jeffweber

    Joined:
    Dec 17, 2009
    Posts:
    616
    I'm also happy to see the new release. Now I just need to find the time to update to it.

    Thanks for the great work!

    -Jeff
     
  31. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    What is the proper way to upgrade a project to the latest version? Before the latest update I used Anima2D to animate a mouth on a human face. It was working perfectly, after I upgraded the mouth disappeared.
     
  32. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Sorting Layer in your SpriteMeshInstances will be set to "Default" after the upgrade. Please, set it again to correct Sorting Layer.
     
  33. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    Yep. That was it. Now it is working perfectly. Thanks.
     
    sergi_mandarina likes this.
  34. b33rdy

    b33rdy

    Joined:
    May 6, 2013
    Posts:
    9
    Hi, yes - dropped you a mail. Having some odd behaviour - tested over multiple versions Unity - since updating...
     
    sergi_mandarina likes this.
  35. jeffweber

    jeffweber

    Joined:
    Dec 17, 2009
    Posts:
    616
    Hey Sergi,

    Looks like there is an error when using Anima2D in Unity 5.4.x.

    Here is the error:

    set_sharedMaterials is not allowed to be called during serialization, call it from Awake or Start instead. Called from script 'SpriteMeshInstance' on game object 'SwimSuitSprite'.
    See "Script Serialization" page in the Unity Manual for further details.
    UnityEngine.Renderer:set_sharedMaterials(Material[])
    Anima2D.SpriteMeshInstance:OnBeforeSerialize() (at Assets/Anima2D/Scripts/SpriteMeshInstance.cs:375)

    It seems to be due to a change in how things work between 5.3.x and 5.4.x. It's talked about in the Unity docs, here:

    http://docs.unity3d.com/Manual/script-Serialization.html

    From the docs....
    I'll see if I can fix it locally for now....

    -Jeff
     
  36. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Yes, I did notice that too. At the moment everything seems to work properly. The thing is that I need to set some materials on before serialization happens in order to enable previews in the inspector. Now it seems I need to find a workaround.
     
    Last edited: May 1, 2016
  37. jeffweber

    jeffweber

    Joined:
    Dec 17, 2009
    Posts:
    616
    I have a sort of strange issue that I'm seeing with the latest version of Anima2D. It's hard to describe, but I'll do my best.

    For my project, I have a side view humanoid body with arms, legs, torso, etc... This body is connected and controlled 100% by physics 2D joints.

    For example, imagine the a knee joint between the upper leg and lower leg. To model this in Unity, I use both a hinge joint and relative joint between the upper and lower leg. The hinge holds things in place and the relative joint allows me to easily set a desired target angle between the upper an lower leg

    This system works great on it's own.

    With the OLD Anima2D system, I was able to add a set of bones that matched my humanoid and then allowed the physics to update the bones and get all the deformation and stuff that comes with Anima2D and it's bone system. So for the knee example, I had a bone for the upper leg, a bone for the lower leg (with the lower leg being a child of the upper), and I had the hinge and relative joints connecting the two bones. As the simulation ran, the joints would update the orientation of the upper and lower legs and the bones would update with them since they were part of the same rigid bodies.

    After updating to Anima2D, something has changed. Not sure how to describe it, but it's as if the bones and the joints are competing with each other on how to orient things. The joints end up getting slowly pushed out of alignment and things just get all messed up.

    Has anything changed with regards to the bones and how the oriention/positioning works? Should I still be able to control the orientation of the bones myself by updating them manually (or via the physics engine's joints?)

    Thanks for any insight on this,

    -Jeff
     
  38. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Yes, some things changed on how Anima updates a bone when it has a child bone reference. Before the parent bone was automatically oriented to the child bone only when the child bone was dragged using the handles. Now the parent bone is updated whenever it is needed.

    This only happens on editor so if you make a build you wont see that competing behavior. So, to avoid that behavior you can just clear up the child bone reference in the corresponding bone component. I will think about this problem for the next release and maybe restore the old behavior.

    Sergi
     
  39. jeffweber

    jeffweber

    Joined:
    Dec 17, 2009
    Posts:
    616
    Ok, I guess for now I'll write a component that clears out the child bone reference at runtime. I do think it can be confusing when something works different when running in editor vs. full build.

    I'd even be happy if there was just a setting somewhere that I could set to get the old behavior.

    Thanks for looking at it.

    -Jeff
     
  40. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Yes, I will think about it and rollback to the old behavior if necessary.
     
  41. xcube

    xcube

    Joined:
    Nov 27, 2011
    Posts:
    45
    Hi, I really like your product! I have a question.
    The video shows how the feet are included with inverse kinematics.



    Is it possible to do something to foot, not turning?
    Example
     
  42. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Hi, you can parent a IK CCD to the IK that controls the leg. Set num bones to 1.



    Cheers
     
  43. xcube

    xcube

    Joined:
    Nov 27, 2011
    Posts:
    45
    Thank you! That's cool! Even better than I'd like)

    I have another question. Can I programmatically replace a sprite in SpriteMesh? Or maybe somehow make it even?
    An example of what I want to do from the script
     
  44. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Good question.
    What I would do is to duplicate the boomerang SpriteMesh and set the other Sprite like you did in the video (you should have one SpriteMesh per Sprite). That way the vertices and weights will be duplicated. Then, using the SpriteMesh Editor remap all vertices to match the second texture if necessary.
    So now you will have two SpriteMeshes using each boomerang Sprite with the same skinning information.
    You should swap now the SpriteMesh in the SpriteMeshInstance instead. You can do that at runtime!

    SpriteMeshes can be swapped in a SpriteMeshInstance only if they share the same bones. I am working in a component to enable swapping in animations and making fixes related to that.
     
  45. xcube

    xcube

    Joined:
    Nov 27, 2011
    Posts:
    45
    Thanks! This method works )
    I wonder what else you want to add functionality in the future?
     
  46. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Glad it worked! I am currently fixing things to make it work properly in Unity 5.4. Next version will have a component to enable frame animation in SpriteMeshInstances. I am working in supporting blendshapes too and some other features I cannot tell yet! :)
     
  47. xcube

    xcube

    Joined:
    Nov 27, 2011
    Posts:
    45
    Hi
    I'm having difficulty with the animation. There are two situations.


    1. I animate the control object. But in the animation are written keys all bones. Why is not written just one control key object?
    It is very complicated to edit the animation if the character is more complex.



    2. When trying to squat without character animation everything works correctly, but during the animation legs fail, although they must stand firmly on the ground.


    Is there some way to address these issues?
     
  48. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Hi xcube,

    I am aware of those issues. The explanation is that the initial idea was to use IK objects and controls in order to help store bone keyframes in your animation. That seems to be ok for some cases but counter-intuitive and non convenient for experienced animators as you pointed in your last post. I am already exploring on improving that part.

    As a work around you need to add more keyframes by moving the hips so the IK do their job.

    Thank you for your valuable feedback.
     
  49. zenGarden

    zenGarden

    Joined:
    Mar 30, 2013
    Posts:
    4,538
    @sergi_mandarina
    Fantastic tool.
    Can we use sprites swapping for characters animations ?
    It is planned Vertex deformation for animations lik Spine "Free-form Deformation" can do ?
     
  50. sergi_mandarina

    sergi_mandarina

    Joined:
    Aug 9, 2015
    Posts:
    77
    Thanks zenGarden. Yes, you can swap SpriteMeshes at runtime as long as you provide also the matching list of bones. You should be able to do that in the current version. The problem is the only asset that you can animate from the Animation Window are Sprites. For the next update I will include a simple component that will allow to select a SpriteMesh from a predefined list from the Animation Window (all of them should use the same bones though). I also made some fixes related to that. Also I will include compatibility fixes related to 5.4.

    I am planning to implement vertex deformation using blendshapes api introduced in 5.3. I already made some progress about that but I decided to hold on and make sure Anima2D is stable and useful at all levels before adding more complexity.
     
    zenGarden likes this.
Thread Status:
Not open for further replies.