123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- .. _doc_2d_skeletons:
- 2D skeletons
- ============
- Introduction
- ------------
- When working with 3D, skeletal deforms are common for characters and creatures and most 3D modelling
- applications support it. For 2D, as this function is not used as often, it's difficult to
- find mainstream software aimed for this.
- One option is to create animations in third-party software such as Spine or Dragonbones. From Godot 3.1
- onwards, though, this functionality is supported built-in.
- Why would you want to do skeletal animations directly in Godot? The answer is that there are many advantages to it:
- * Better integration with the engine, so less hassle importing and editing from an external tool.
- * Ability to control particle systems, shaders, sounds, call scripts, colors, transparency, etc. in animations.
- * The built-in skeletal system in Godot is very efficient and designed for performance.
- The following tutorial will, then, explain 2D skeletal deformations.
- Setup
- -----
- .. seealso:: Before starting, it is advised to go through the :ref:`doc_cutout_animation` tutorial
- to gain a general understanding of animating within Godot.
- For this tutorial, we will be using a single image to construct our character. Download it from :download:`gBot_pieces.png <img/gBot_pieces.png>`
- or save the image below.
- .. image:: img/gBot_pieces.png
- It is also advised to download the final character image :download:`gBot_complete.png <img/gBot_complete.png>`
- to have a good reference for putting the different pieces together.
- .. image:: img/gBot_complete.png
- Creating the polygons
- ---------------------
- Create a new scene for your model (if it's going to be an animated character, you may want to use a ``KinematicBody2D``).
- For ease of use, an empty 2D node is created as a root for the polygons.
- Begin with a ``Polygon2D`` node. There is no need to place it anywhere in the scene for now, so simply create it like this:
- .. image:: img/skel2d1.png
- Select it and assign the texture with the character pieces you have downloaded before:
- .. image:: img/skel2d2.png
- Drawing a polygon directly is not advised. Instead, open the "UV" dialog for the polygon:
- .. image:: img/skel2d3.png
- Head over to the *Points* mode, select the pencil and draw a polygon around the desired piece:
- .. image:: img/skel2d4.png
- Duplicate the polygon node, rename it properly, enter the "UV" dialog again and replace the old polygon with another one in the new desired piece.
- .. image:: img/skel2d5.png
- Keep doing this until all pieces have been mapped.
- .. image:: img/skel2d6.png
- You will notice that pieces for nodes appear in the same layout as they do in the original texture.
- This is because (by default) when you draw a polygon, the UV and points are the same.
- Rearrange the pieces and build the character. This should be pretty quick. There is no need to change pivots,
- so don't bother making sure rotation pivots for each piece are right; you can leave them be for now.
- .. image:: img/skel2d7.png
- Ah, the visual order of the pieces is not correct yet, as some are covering wrong pieces. Rearrange the order of the nodes to fix this:
- .. image:: img/skel2d8.png
- And there you go! It was definitely much easier than in the cutout tutorial.
- Creating the skeleton
- ---------------------
- Create a ``Skeleton2D`` node as a child of the root node. This will be the base of our skeleton:
- .. image:: img/skel2d9.png
- Create a ``Bone2D`` node as a child of the skeleton. Put it on the hip (usually skeletons start here).
- The bone will be pointing to the right, but you can ignore this for now.
- .. image:: img/skel2d10.png
- Keep creating bones in hierarchy and naming them accordingly.
- .. image:: img/skel2d11.png
- At the end of this chain, there will be a *jaw* node. It is, again, very short and pointing to the right.
- This is normal for bones without children. The length of *tip* bones can be changed with a property in the inspector:
- .. image:: img/skel2d12.png
- In this case, we don't need to rotate the bone (coincidentially the jaw points right in the sprite), but in case you need to, feel free to do it.
- Again, this is only really needed for tip bones as nodes with children don't usually need a length or a specific rotation.
- Keep going and build the whole skeleton:
- .. image:: img/skel2d13.png
- You will notice that all bones raise an annoying warning about a missing rest pose. This means that it's time to set one.
- Go to the *skeleton* node and create a rest pose. This pose is the default one, you can come back to it anytime you want (which is very handy for animating):
- .. image:: img/skel2d14.png
- The warnings will go away. If you modify the skeleton (add/remove bones) you will need to set the rest pose again.
- Deforming the polygons
- ----------------------
- Select the previously created polygons and assign the skeleton node to their ``Skeleton`` property. This will ensure that they can eventually by deformed by it.
- .. image:: img/skel2d15.png
- Click the property highlighted above and select the skeleton node:
- .. image:: img/skel2d16.png
- Again, open the UV editor for the polygon and go to the *Bones* section.
- .. image:: img/skel2d17.png
- You will not be able to paint weights yet. For this you need to synchronize the list of bones from the skeleton with the polygon.
- This step is done only once and manually (unless you modify the skeleton by adding/removing/renaming bones).
- It ensures that your rigging information is kept in the polygon, even if a skeleton node is accidentally lost or the skeleton modified. Push the "Sync Bones to Polygon" button to sync the list.
- .. image:: img/skel2d18.png
- The list of bones will automatically appear. By default, your polygon has no weight assigned to any of them.
- Select the bones you want to assign weight to and paint them:
- .. image:: img/skel2d19.png
- Points in white have a full weight assigned, while points in black are not influenced by the bone.
- If the same point is painted white for multiple bones, the influence will be distributed amongst them (so usually there is not that much
- need to use shades in-between unless you want to polish the bending effect).
- .. image:: img/skel2d20.gif
- After painting the weights, animating the bones (NOT the polygons!) will have the desired effect of modifying and bending the polygons accordingly.
- As you only need to animate bones in this approach, work becomes much easier!
- But it's not all roses. Trying to animate bones that bend the polygon will often yield unexpected results:
- .. image:: img/skel2d21.gif
- This happens because Godot generates internal triangles that connect the points when drawing the polygon. They don't always bend the way you would expect.
- To solve this, you need to set hints in the geometry to clarify how you expect it to deform.
- Internal vertices
- -----------------
- Open the UV menu for each bone again and go to the *Points* section. Add some internal vertices in the regions where you expect the geometry to bend:
- .. image:: img/skel2d22.png
- Now, go to the *Polygon* section and redraw your own polygons with more detail. Imagine that, as your polygons bend, you need to make sure they deform the least possible,
- so experiment a bit to find the right setup.
- .. image:: img/skel2d23.png
- Once you start drawing, the original polygon will disappear and you will be free to create your own:
- .. image:: img/skel2d24.png
- This amount of detail is usually fine, though you may want to have more fine-grained control over where triangles go. Experiment by yourself until you get the results you like.
- **Note:** Don't forget that your newly added internal vertices also need weight painting! Go to the *Bones* section again to assign them to the right bones.
- Once you are all set, you will get much better results:
- .. image:: img/skel2d25.gif
|