diff --git a/docs/animation_guidelines.md b/docs/animation_guidelines.md new file mode 100644 index 0000000..ba334ff --- /dev/null +++ b/docs/animation_guidelines.md @@ -0,0 +1,116 @@ +# Guidelines for Animation +Guidelines to follow while animating characters for *Hook, Line and Axe*. + +As with all art forms, animation requires heavy **referencing and iteration**. +These will drive you to quality. Doesn't look right? Use a reference. Doesn't feel right in-game? Rework it. + +## Communication +Humans are visual learners and interpreters. It's wired into us. +We literally have sections of brain dedicated to parsing facial expressions. +Body language and presence is such an important communicator that we prefer sitting at a table together than in a Zoom call. + +Along with this, there are many hidden things we might pick up on but not "notice" when observing a situation. You can tell a person is unhappy by their fake smile, but you may not realize the smile feels fake because they forget to raise their eyebrows. + +### Ground Yourself +Much is the same with motion. We're used to seeing people run and walk, so much so that we forget what it looks like when we try to recreate it ourselves. Other people may notice it looks off, but can't determine one. That's why **references are important**. They force us to ground ourselves in reality. + +One key part of keeping an animation "grounded" is the character's **center of mass**. +Generally, most of your weight is concentrated at your pelvis, chest, and skull. +If any one of these moves, your center of mass moves with it. +If your center of mass moves too far away from its supporting mass (your "base" in physics terms), you topple. + +#### Breaking Down the Supporting Base +Let's see this in action. +![](images/animguide_com1.png) +Here are three diagrams of a character standing, annotated as follows: +- Red - Center of mass +- Blue - Supporting base +- Green - Where center of mass is relative to supporting base +- Yellow - Physics force diagram + +In **case A**, the character's center of mass is directly above their supporting base. Physics-wise, this means that the force of gravity and normal force of the floor are counteracting each other, leading to a net zero of forces. This means the character in stable. + +In **case B**, the character has leaned forward. Their center-of-mass, the head, has now moved past the supporting base. Physics-wise, you can think of the character's feet being a fulcrum, and their body being a lever. Since their head is further away from the fulcrum than their feet, the torque is much stronger (Torque = Force * Distance), so they angularly accelerate clockwise. +In layman's terms: **they're toppling**. + +In **case C**, the character has extended their supporting base by moving their leg forward. Physics-wise, gravity drags their head down, but the normal force being applied to each foot stabilizes the character, preventing them from falling. + +#### Detailing and Counterbalance +This can be applied to more detailed characters as well. Here is a simple diagram of Alan's llama with only the key masses marked. +![](images/animguide_com2.png) +**Case A and B** seem like valid poses at first-glance. **Case C** is valid, but feels a little tipsy as all the weight leans to one side. +**Case D** is not "grounded" because their base is too small and doesn't support their center of mass. This would only be something you want to do if you want the character to feel weightless. + +Case A looks valid, but still feels off. That's because there wasn't a proper use of **counterbalancing**. +![](images/animguide_com3.png) +Both the tail and forehooves of the character have visual weight. While using the base to support them can be limiting, we can instead counter-balance them by treating the supporting base as a **fulcrum** and the horizontal distance between each point as a lever. If a point is further from the fulcrum, the torque the point applies increases (again, Torque = Force * Distance). If the amount of torque applied on either side isn't roughly even, then the character is **unstable** (not "grounded"). + +Looking at case A with this new lens, it feels like the character might topple forward since their hooves are pushed further away from the supporting base than their tail. This is not true for case B, as the hooves are equally spread apart. + +#### In Animation +These rules apply to three dimensions as well--push mass too far out in one area, and other mass must be pushed in the opposite direction to accommodate. + +This also applies **temporally**. You can push mass past your supporting base for a moment, but only if you spend the next moment pushing mass in the *opposite* direction past your supporting base to decelerate/stabilize. + +### Intent +Behind each action, there is a character dealing with their own experiences, conflicts, motivations, and personality. If animations do not support the character, then there is no character to begin with. Considering that stories are told by character interaction, creating a convincing character is necessary for an engaging experience. + +When making each animation, ask yourself this: +- What is the character's **intent**? +- **Why** are they doing what they're doing? +- **How** are they doing it? +- In what setting or **context**? + +For example, the Renegade (Alan's llama) performing a slide along the ground: +- Intent: To retain momentum +- Why: To conserve fuel for further platforming, or to dodge gunfire and explosions +- How: Pulling limbs in close and keeping low-to-the-ground to minimize drag +- Context: In a cluster of floating islands, while being attacked by sky pirates + +From this, we already have an idea of how the animation should play out: +The character is calculated and under extreme pressure, so her movement is utilitarian and not superfluous. +She's also a (somewhat derp-y) llama wearing bulky goggles, so she needs to turn her head sideways to clearly see where she's going. +She needs to get up and run immediately after the slide, so she never entirely sits down, but instead crouches low to the ground. + +### Push the Extremes +As we build this new reality, we're constrained by one thing: the window. +You have limited screen-space to convey the idea of what each character is doing, how they're doing it, why, etc. +Thus, it's necessary to push your motions to the extremes. Focus on what's important about the animation, and push it really far so you can *see and feel* what's occurring. Readability is king in a fast-paced action games like ours. + +![](images/animguide_extremes.png) +While the linework here is muddled, these poses test the character's range of motion to give viewers an understanding of how she moves, how she feels, etc. The silouettes also make use of leading lines to point the viewer to what needs to be focused on. It's similar to your rules of composition. + +In the Renegade's slide example: +- I kick one leg forward to lead the viewer's eye in the direction the character is moving +- I let other limbs trail behind to give a sense of speed. In other slide poses, I use the arms or torso to also lean into or out-of the action +- I add noise to the ears like they're flapping in the wind + - She isn't actually moving fast enough for this, but exaggerates the intent of *speed* + +## Consistency +For programming purposes, keep variations of animations (strafes and attacks) at consistent length and timings with their counterparts. + +Also, ensure that the personality of the character is consistent throughout their animations. If one animation is very hostile, but the other is very focused, the animation may be giving conflicting ideas about the character. + +## Follow-Through +Much like considering the character's [center of mass]((#breaking-down-the-supporting-base)) for keeping them grounded, it is also important to consider their momentum. +Momentum = Mass * Velocity, and requires force to counteract. The bigger the mass, or the faster the speed, the more *force and/or time* required to counteract the momentum. + +## Loop Unevenly +It's really easy to tell when an animation loops if all keys are in the same place. +In reality, everything is an oscillation happening at inconsistent frequencies and offset phases. +We can't easily change the frequency of each limb's loop, but we can offset the phase each limb is oscillating at. + +To do so, set all keyframes to Cyclic in the Animation Curves editor, then randomly offset them forward or backward in the timeline. +Since everything returns to its home position at different times, the animation feels much more smooth, and the looping does not stand out so much. + +# IN SUMMARY +- Ground the animation +- Push the extremes +- Communicate your idea +- Follow through +- Be consistent +- Offset keys + +If you have any questions or concerns, poke Alan with a sharp stick. + +See other project guidelines [here](../README.md#resources-and-guidelines). diff --git a/docs/images/animguide_center_of_mass.xcf b/docs/images/animguide_center_of_mass.xcf new file mode 100644 index 0000000..23eee34 Binary files /dev/null and b/docs/images/animguide_center_of_mass.xcf differ diff --git a/docs/images/animguide_com1.png b/docs/images/animguide_com1.png new file mode 100644 index 0000000..0f860cc --- /dev/null +++ b/docs/images/animguide_com1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f3521d65f507833cd245c3dfa886ede581ffc7157b4d40718c348fb8cd4ca94 +size 194301 diff --git a/docs/images/animguide_com2.png b/docs/images/animguide_com2.png new file mode 100644 index 0000000..7d75f25 --- /dev/null +++ b/docs/images/animguide_com2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6bdeed47e219f6238f2f71d99c95383f0cb3e9a5b929aa61d4d44576d02ca6a +size 755410 diff --git a/docs/images/animguide_com3.png b/docs/images/animguide_com3.png new file mode 100644 index 0000000..d161a40 --- /dev/null +++ b/docs/images/animguide_com3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d498541cce1d4682ec42d28dfaaf524eaeaa1c5b41cf49862ff89445bdf5d876 +size 310806 diff --git a/docs/images/animguide_extremes.png b/docs/images/animguide_extremes.png new file mode 100644 index 0000000..984e947 --- /dev/null +++ b/docs/images/animguide_extremes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5968cf7b8be330e8a0a8ccaa23b60f01c90b3fd51a53eeb69663a229f49bb7a0 +size 1354136 diff --git a/docs/level_design.md b/docs/level_design.md index 6ae1c9a..2ce3551 100644 --- a/docs/level_design.md +++ b/docs/level_design.md @@ -147,11 +147,11 @@ While there are a lot of considerations to making a level, these are still ideas If you think something enhances an experience but challenges these guidelines, *test it and see how it plays out*. Have other devs try it! Have playtesters try it! If it enhances the game, then you've successfully iterated. -See other project guidelines [here](../README.md#resources-and-guidelines). - # IN SUMMARY - **Keep things spatious.** If it feels overly-spatious in editor, you're probably on the right track - **Mix things up.** Give the player a few things to think about at any given time, unless directly teaching them something. - **Use the tools.** As before, variety is the spice of life! - **Scale up the difficulty.** Use arenas for set-piece encounters, and use increasingly difficult enemy spawns and arrangements as the player progresses. - **Keep it going.** We're only going to have one or two levels after 18 months of work. Make those levels count in both duration and impact! + +See other project guidelines [here](../README.md#resources-and-guidelines).