Guidance on implementing non-rootmotion turning for quadruped characters

Hi,

I’m currently implementing a quadruped locomotion animation system for our animals in our game. Since it’s a multiplayer game, we decided not to use a root motion system for locomotion (only for montages). I’ve been leveraging the technology provided in the Lyra sample—specifically stride warping and rate scale adjustments and dynamically switching between sequences based on speed—to prevent foot sliding when the character’s speed doesn’t perfectly match the animation speed. This part of the implementation went relatively smoothly.

Now, I’ve been tasked with implementing turning animations for our animals. As a side note, our animal characters have OrientToMovement enabled with a very high rotation rate, ensuring that the capsule is always aligned with the character’s velocity. Our animals are AI controlled and are already navigating on a smooth path generated by the navmesh.

Here’s my current approach, and I’m looking for feedback on its feasibility:

  • We have turn animations at different angular velocities.
  • I want to replace the sequence player in the locomotion cycle state with a blend space player, using the character pawn’s angular velocity as input.
  • We’ll ensure that the character’s in-game angular velocity almost never exceeds the highest angular velocity in our turn animations to avoid foot sliding.
  • The blend spaces will only interpolate between animations at the same forward speed, so the blend only affects turning and not actual movement speed. This means we’ll have multiple blend spaces per speed type (walking, sprinting, etc.). So I’m only using 1 axis of the blend space.
  • I still want to reuse the existing functionality where the blend space is dynamically switched via an animation node function when the animal reaches a certain speed.

My questions are:

  1. Is this approach feasible?
  2. Can I adjust the SetPlayRateToMatchSpeed functionality to work with blend space players instead of sequence players?
  3. Do you think this is a solid approach, or is it over-engineered?

I’m also open to alternative suggestions for implementing turning animations—either baked animations or procedural—for quadrupeds, as this is one of the only solutions I’ve found so far.

[Attachment Removed]

Hey there, apologies for the delay.

Overall this approach looks pretty solid and reasonable. I don’t think this is overengineered depending on the visual quality that you’re trying to hit.

Can I adjust the SetPlayRateToMatchSpeed functionality to work with blend space players instead of sequence players?

I think depending on how you want to do this, I would suggest building your own function that does similar things, as it wouldn’t necessisarily return a playrate, but the position that you want that blendspace to be at.

To add, one piece of advice from another TDiA here that I was consulting with:

“Essentially what you wanna do is make the blent space select the blend sample position once and not move from there as inputs change, and that the blend items within the blend space can actually blend meaning foot phase and either direction, number of steps, etc. actually makes sense so always starting with the left foot for example.”

Dustin

[Attachment Removed]