What is lightkeeper and what's up with the character animations? Lightkeeper is one of the projects being worked on at MonRiverGames. The main two characters are Spark and Berry, which are the studio mascots. The original version was created as an independent study project led by alumni Brian Weers and supported by Spring 2023 MonRiverGames members. Both of them are based off of the most known legend in West Virginia: Mothman. Our versions are native moth species to the Appalachian Region. Both of them have wings and are sort of human. The plan for Lightkeeper is to keep it West Virginia themed with the main characters being, Spark, Berry, and later Mothman and the Flatwoods Monster.
The main art style is cartoony so that means making the characters have animations that compliment that. The idea for Lightkeeper is to make a game sort of like keep away or hot potato with a ball of light. The end goal for the semester is to have a 4 person coop game where there's 2 teams against each other and the one holding the light ball the longest wins. The main reason the characters are moths and monsters is because moths are attracted to light and what kind of game do many of us in this region like more than a game about West Virginia legends?
Starting Character Design
The main 2 characters were already designed last Spring by Game Design and Interactive Media student Anthony Reitan, while their concept art was fleshed out by our studio lead artist Madison Roy. All that needed to be done was to rig them and give them animations and code for the animations.
The main process of making a character with animations is firstly making the mesh. The mesh is the character itself with textures. materials, and color. After this is done, the character needs to be rigged. This is essentially how we control how the mesh moves when animated in whatever program you are using. For our project we are using blender for 3d models and characters and then the actual game engine is Unreal Engine 4. The "rig" of a character is the bones of it.
I mean that literally! The rig is broken up into individual bones that you can move later. Something that also came up in my work was something called a "root". This word in blender means the last bone you use that will everything else if moved. For Spark and Berry their root is in the center torso so that I can move the legs and hips independently front the body. After you have a character with a mesh over the bones and it is all lined up you need to parent the objects together. This means connecting the mesh to the bones so that when the bones move the mesh also does.
A lot of work with character creation draws from reality. Like humans, we have bones and each body part and ligament that moves is because of a bone. Once you have the bones and mesh parented together then you can start animating. The main animations that I like to make when creating characters is a Idle Animation, Walking, Running, Jumping, and Falling. These may all be different things but they work together to make the animations look good. The most time consuming part of Animation is Key Framing. Key Framing is like a stop motion picture. Each movement you want to see is a different picture, but in blender all you need to make is the start middle and end. This is simpler than it actually is. For the Running Animation, I started by looking at real world examples of people running and seeing where there arms and legs pose when stopped at certain points. I essentially start with a kind of leaping pose, then progressively make it look like skiing until the character is pushing off the ground and running.
After you have your character mesh rigged, and with animations then you are ready to put your work into the Unreal Engine (or another, as desired). The biggest problem I have had is learning how to efficiently and correctly move files from Blender into Unreal Engine. The easiest way that I found is to highlight the mesh and rigging then go to file and export. Then export the file as an FBX. This is an abbreviation for Film Box. These are 3d files. So once you export and know where the files are you open Unreal Engine the in the folder tab right click and import the files. There are a lot of options that pop up but you want to make sure animations is ticked and that the Skeleton box is empty. This will bring all your animations in under the name you saved your FBX as.
Now the process of setting up the animations was a bit of a hassle, but I have it down for the simple character ones. What you will want to do is to make a Blue Print class which is how you control the character, as well as set up the link between animations and what the character looks like. In the Event graph in the Blue Print is where you find the actual movement of the character. Once you have your basic movement and camera setup for the characters move on to implementing the animations. The actual animations are each a separate file which comes in handy if you need to preview them. The next step to making you characters animated is making a Blend State for each of the characters. This allows you to view and place animations. For instance in my main blend state for Spark I have put in the Idle, Walking, and then Running. Logically you start by standing then a little faster to walking and then even faster to Running and this is exactly how this works in the Blend State(BS for Short).
It's pretty neat- you can drag green dot which is your viewer to see at what stage in the animation it is. What I did for Spark and Berry was by making the running animation 100 whenever they hit a speed of over 100 they are running, so when they are not moving at 0 they are idle. Once you have done that with your (BS) then we need to make a Animation Blueprint which is where the code is. When you first see it it looks like a lot but it's kind of simple. You first see an animation graph which is essentially telling you what is happening. You see Output pose and that's it.
My first thought was to put animations directly into the output but that won't work with keyboard input. The very next thing we need to do is go to the event graph and setup the code for gathering how fast you are going and whether or not you are jumping. First thing you see are 2 things- Initialize animation and Update animation. To make the animation blueprint know what to play you have to make a speed gatherer. I took the Update animation and I dragged an new node over to make a Set speed node. This gathers the speed and updates the animation accordingly. The off the left side of speed you need to drag it out and make a vector length node and off that one a Get Velocity node and off of that one a As node and you select the character that you want animated.
The other thing you need to do is set up the start of the animation by making a branch off of the Event Blueprint Start Animation is a Cast To node. This node tells the mesh what part of the animation to start with and connect to. The object pin allows the object to know what object it is. The Set nod then changes the animation to the start which is the idle animation.
Next What I did was made a New State Machine in the animation graph. This acts as the constant frame updater for the Pose.
Clicking on that takes you even further inside the code. You will see just one word, Entry. This is where you give your character different animation states for animations. What I did was I right clicked and added a new state, you then open this and put your animations in this. Each new state you make needs to be linked so I made a Idle/ Running state and a Jumping State. I linked them in that order. I open the new Idle state I made and inside is where I put my (BS) for the character. When you put this in and link it to a character you also need to right click the top number input and click promote to variable. This all together means is it looks at your variable and makes you play the animation at what speed you are at from the (BS) earlier. This alone makes your character animation for running and idle work. If this is something you are interested in, give it a shot and let us know how it went!