-
Notifications
You must be signed in to change notification settings - Fork 0
Rigging and Animating in Blender
This page primarily covers tricks and tips for making the Blender part of the workflow as smooth as possible.
It mainly focuses on the parts that are relevant to this specific workflow. You will still need to learn the Blender basics on your own. I will link some short guides I watched when learning this, but they might not be the best fit for everyone.
The goal here is not to teach all of Blender. The goal is to get your exported character parts into Blender, organize them, rig them, animate them, and avoid some of the annoying issues I ran into.
Assuming you set up your groups in Krita correctly, this should be a very smooth process.
You should have a folder full of exported .png files, where each file represents one part of your character.
Take the following steps:
- Go to
File. - Select
Import. - Select
Images as Planes. - Find your Krita export folder.
- Sort the files by date. This should hopefully match your layer/group order in Krita.
- Select all the parts you want to import.
- In the right sidebar/import settings:
- Enable
Offset Planes. - Pick
Z-. - Set
Offsetto around0.05. - Set
OrientationtoAlign Y+.
- Enable
Then import the images.
If you click the Y on the rotation reference in the top right, it should perfectly align your view. Assuming everything went right, it should look the same as it does in Krita.
If it is just a bunch of grey rectangles, you will need to change viewport settings. I will cover that in the next section.
The reason for using Offset Planes is that we will be faking the 2D look by using unlit materials and an orthographic camera, which will not show the depth. A small offset keeps the layers separated for easier rigging and gives you some wiggle room when animating, so you do not need to deal with things intersecting as much.
0.05 felt like a good value for me, but you can go slightly higher if you think you need to. It is enough to separate the planes, but not so much that the model becomes awkward to work with.
If the order is wrong, you can manually move the planes, but getting the import order correct saves a lot of time.
By default, Blender may display the image planes as grey rectangles or make them hard to see clearly.
In the top-right corner of the viewport, there are several viewport shading icons. Pick Solid mode, which is the full circle icon.
Then open the dropdown next to it and use these settings:
-
Lighting:Flat -
Color:Texture -
Outline:White
The white outline is optional, but I found it useful because it makes the individual planes easier to see while rigging and animating.
The imported materials usually need some cleanup before they behave nicely for this workflow.
I made a small Blender helper script called StS2 Tool Kit to make this less annoying. It adds a small StS2 tab to the right side of the viewport.
The tool can:
- apply the recommended alpha/material settings,
- make image materials unlit,
- change texture filtering,
- reload textures after you update the exported images.
You can find the script here:
Enable the Make Unlit option and apply the settings. If you switch to rendered preview mode, the colors may look a bit washed out. This is because Blender’s default color management is set up for more realistic rendering.
For this workflow, this is mostly just a Blender preview issue. The important part is that the materials are unlit, transparent, and export correctly to Godot.
Rigging is a relatively simple process, but it can be a bit tedious. I will roughly guide you through the parts that matter for this workflow, but I still heavily recommend watching a proper Blender rigging guide first.
One short guide I found useful:
Rigging for impatient people - Blender Tutorial
The basic idea is simple:
- create an armature,
- place bones where the joints should be,
- parent your image planes to those bones,
- optionally set up constraints / IK to make animation easier.
Initially, I recommend placing your bones while looking from the Y axis/front view. Get them positioned “close enough”. It does not need to be perfect. You just want the joints to be in places that make sense.
For a humanoid character, you probably want bones for things like:
- torso
- waist / pelvis
- neck
- head
- upper arms
- lower arms
- hands
- upper legs
- lower legs
- feet
You may also want extra bones for important objects, such as weapons, backpacks, tools, tails, or other large accessories.
For weapons or other held objects, I recommend keeping their bones separate at first instead of directly parenting them into the arm chain. You can later “attach” them to the hand through bone constraints.
This is not mandatory, but it can make your life nicer later. For example, if you want the character to drop their weapon when they die, it is much easier if the weapon has its own separate control/bone setup. You can fix this retroactively, but it usually involves a slightly hacky approach and kind of sucks.
After the rough placement, adjust the bones so they roughly align with the character joints along the depth axis.
Again, it does not need to be perfect. It just needs to be close enough that rotations look reasonable when animated.
At this stage, your character may look slightly janky and possibly like they have scoliosis. That is fine. This is mostly just the base pose that your animations will start from and it only needs to look good from the front.
Before moving further, this is a good time to check:
- Are the joints in places that make sense?
- Are the arms and legs easy to pose?
- Are important props separate?
- Does the front view still look correct?
- Are the bones named clearly?
Good bone names make animation much easier later.
Examples:
upper_arm_Llower_arm_Lhand_Lupper_arm_Rlower_arm_Rhand_Rweaponheadtorso
Avoid names like:
BoneBone.001Bone.002thingcontrol_final
For most rigid cutout parts, you do not need complicated weight painting.
A lot of pieces can simply be parented to a bone. This works well for parts that should move as solid pieces, such as hands, weapons, head, armor pieces, and most body segments.
For simple rigid parts, the usual idea is:
- Select the image plane.
- Select the armature/bone.
- Parent the object to the bone.
- Test rotating the bone to make sure the part follows correctly.
The exact Blender steps depend on how you set up your armature, so I recommend looking up a basic “parent object to bone” guide if you have not done it before.
For this workflow, the important thing is that most parts are not meant to deform. They are mostly flat cutout pieces that rotate and move.
This is technically optional, but it will make your life much nicer when animating.
Inverse Kinematics, or IK, lets you move one control bone and have Blender automatically solve the remaining bones in the chain. Instead of manually rotating the upper arm and lower arm every time, you can move the hand control and let Blender figure out the bend.
I strongly recommend setting up IK for:
- arms
- legs
- tails
- tentacles
- other annoying multi-part chains
This is useful for pretty much all the animations you will be making.
Once again, there are plenty of guides for this online, but if you are comfortable “just sending it”, this short one was useful to me:
Blender 2.8 Inverse Kinematics In 2 Minutes!
This section will not teach animation from scratch. Instead, it covers habits that make the animations easier to use later in Godot / StS2.
Use the correct animation names from the start. This makes the later Godot setup much less annoying.
You do not necessarily need all of these immediately. I recommend starting with idle, since it will probably be the easiest animation to make, and your other animations will transition to and from it.
Animations you probably want:
idleattackcasthurtdie
Depending on your setup, the exact names may be different. The important thing is that the animation names in Blender, Godot, and your code/mapping all agree.
Your idle animation should be able to loop forever without an obvious pop.
The easiest way to do this is to make your starting pose, then copy it to the end of your timeline. Afterwards, add a keyframe in the middle that slightly moves the main body up and shifts the limbs a little.
You can also add a small twist to the torso or head, but I would keep it subtle. Small motion can make your character feel more alive, but too much can become distracting.
Your animation will probably look stiff at first, but that is what interpolation options are for. You can experiment with them, and you may need to mix different interpolation types between different parts.
The most useful ones for me were:
BezierSinusoidalBack
A super quick guide that does basically the same thing:
Idle Animations so easy your GRANDMA can do them. (blender tutorial)
For StS2-style combat, the animation should clearly communicate what the character is doing and should feel snappy.
Because of that, I would not worry too much about perfectly smooth transitions inside the action animation itself. Instead, position your rig where it needs to be on the first frame, do the important motion quickly, usually over something like 3–5 frames, and then add a brief transition back to a roughly neutral position.
The ending is not as important as the action itself, because Godot animation trees can smoothly transition between animations.
An attack animation is good for physical attacks, melee swings, gunshots, or anything that should feel like a direct hit.
A cast animation is useful for skills, powers, commands, remote effects, or anything that does not really look like a physical attack.
You usually do not need super long animations.
Long animations can look cool, but they can also make the character feel slow or awkward in combat. For most actions, a short readable animation is better than a long overly detailed one.
I recommend getting the timing right first and then polishing it further.
Exporting is pretty straightforward, but I recommend keeping the files organized.
I recommend something like this in your mod project:
-
myCharacter-
scenes-
modelscharacter
-
-
Export your character model into the character folder.
For the actual export, use the glTF 2.0 format. The default settings should work fine for this workflow.