[WIP] Pose Based Animation Blending - (Overgrowth Style)

Hey all,

I’ve been working on trying to reproduce something similar to the pose based animation system created by David Rosen (seen here during his GDC talk last year: http://www.gdcvault.com/play/1020583/Animation-Bootcamp-An-Indie-Approach) combined with foot prediction to aid in the placement of the feet across varied terrain heights.

I’m no programmer, so it’s all been done 100% in blueprints.

The system blends between four poses based on the speed the character is moving, with another 4 poses for the walk cycle.

This is the system in action:

This is awesome! Care to share how you made this! This would really help a ton!

should be intergrated into the engine by default :slight_smile:

looks great to me

I’m a little busy with deadlines this week, will try and post a breakdown soon though :slight_smile:

It’s not just setting up IK in the engine is it?

not afaik, in udk there was a foot-placement-node for the animtree which is totally missing in UE4 like a lot of the othere animtree nodes so i think we’ll have to wait and see if zyrus shows us how he did it

IK gets added in on top of the animation to help predict the placement for the feet.
This is how the animation looks before IK (showing with and without proper blending):

nice work !!

I’ve to recreate that talk in blueprints, but I had some issues getting it work, mind explaining how you are approaching it?

I’m sure many people would pay good money to have Overgrowth style movement and animation in blueprint form, myself included. Would be cool to see on the market.

My plan is to release it at some point, although that is quite far off and is very much a WIP at the moment. :slight_smile:

As for how I am approaching it, I’ll post a breakdown of some of the blueprints later in the week (This is actually part of my dissertation work and I need to wait until it has been submitted before I can share it all).
Having said that i’ll try and give a rough overview now.

The basic idea behind it is to drive the blend between the poses based of the speed of the player. So effectively what i’m doing is creating a timer that continuously counts up, with the speed of the player affecting how fast the timer counts. So the speed drives the timer and the timer is used to drive the blending between each pose. Once the timer hits specific values it triggers the blending to the next pose in the sequence. Once the cycle is finished and the final pose has finished blending, in this case the value of the timer reaches 4, the value of the timer is reset to 0 to allow a continuous loop to be created. It might be easier to understand with the following diagram:
b9829d5dac7ba4b8e6b0a23d053c9301438171c4.jpeg

The foot prediction is added on top of that, but that’s a whole other challenge.

Hope that helps to give a really rough overview, i’ll try to answer any questions if any of that was unclear :slight_smile:

Looks really good Great job you did here!

I’m drooling now.

holy sheet, I’ve been stuck on this for sooooo long. It seems like I tried something similar but I never got it working properly. I’ll be looking forwards to more details!

Could I at least get some help with getting the blending loop to work properly? I can do all the maths for the timer myself through trial and error but I can’t figure out how to get a proper loop that blends like overgrowth’s does. I’ve tried using blend modes in a real janky pyramid setup but once it gets to the last pose there’s nothing to blend it back :frowning: I’ve tried state machines but you don’t have the control of the blending that you need to do it properly. I’ve tried a chain of additive poses but I can’t get that right either! I’ve tried so many things!

Just wait for the official integration in june :slight_smile:

https://trello.com/c/0ArwfTSX/74-pose-animation

Yay! I’d much rather create poses than entire animations, especially if it can be more dynamic and reactive.

Im sorry it’s taken so long for me to update this, I’ve been incredibly busy lately. For those that are still curious, here is a breakdown of how I’ve gone about creating the pose blending loop.

The poses are blended together using a 1d blend space between the walk and run pose. These are fed into the state machine and blended together to create a cycle.
7ddd9d808c4db13867c471f67ed621a2877f8d0d.jpeg

The blend between these poses are controlled by a timer. The speed of the timer is controlled by the speed input of the pawn (you may have to play around with some of the values here, these are the ones that happened to work for me). Once the timer hits the final pose, in this case the 4th increment, the value of the timer is reset and thus creating an infinite loop. The movement curve allows for a smooth transition between each pose, this works as a rough substitute for the lack of interpolation options.

41154bc9684b779b4aa3123f986408480217a012.jpeg

The foot prediction is applied on top and is best demonstrated with the image below.

47dcf36d6ef440bcc807f4cd0a6d1d2a9255747e.jpeg

For this example, take point A as the starting location for the foot. Based on the velocity of the character and its stride length, point B becomes the predicted destination for the foot to be placed. By tracing between these two locations, it is possible to determine if there are any obstacles blocking the characters path.

At this point tracing downwards from above point B will give us the correct destination for the foot. It is worth noting that tracing up could produce the same location, but if there is an overhanging ledge above it will ignore it and thus try and plant the foot through the terrain. Assuming that an obstacle is in the way, the character needs to determine the height of the obstruction.

Tracing from point C to point A reveals if the obstacle is still blocking the path of the foot. If the trace finds any hit objects, then another can be used to determine the exact height of the obstacle. Tracing between point A and D will check if there are any other obstructions between the character and the first obstacle, whilst tracing between point D and C will determine if anything else blocks the characters path. Assuming that no other obstacle blocks the path, the foot can then progress to be planted at the new location. If another obstacle does block the path of the player, then part of the process is repeated, tracing down from the new obstruction and continuing from there. The location of the highest obstacles may then be used to calculate the height the players foot need to be raised to in order to avoid any form of collision with the terrain or obstacles.

The big limitation of this method lies with steep terrain, as the predicted foot placement relies on a trace downwards to find the foot location. The length of the trace would need to be able to change dynamically depending on the angle of the terrain to ensure that while the player traverses the steep terrain the feet may be correctly planted, but also when the player moves across gentler slopes the trace does not hit any low hanging ceilings or other height based obstructions.

The foot prediction itself is quite a large set of blueprints and all the calculations vary depending on the character. I’ll aim to post a more in depth breakdown of that later in the week if I have the time.

A very big part abot the overgrowth approach is the use of proper interpolation/ease functions ;).

Also there was another topic on a similar subject on the forum, but i can not find it atm.

@Zyrus
Do you have some example with a big slopes ? because i wouldn’t use physics for simple stairs.