Capping framerate of animations, while keeping game at high fps rate

I was wondering how i could cap the character animations to around 8-16 FPS to have an anime feeling, while keeping the frame-rates for the actual game at around 60-75FPS.

Framerates for an animation versus game framerates are two completely different concepts that simply use the same terminology.

The frame rate of your animation is determined by how many key frames are stored in the animation itself. To get the look you want for your animations, you wouldn’t necessarily only have 8 - 16 frames, you could simply hold onto a specific keyframe for longer. In fact the easiest way to achieve this look would be to double the number of frames not reduce them. If you duplicate every frame so that it stays on screen longer, it would give the look of having less frames.

The framerate of a game is determined by the amount of information you are processing per draw call. A lot of different things factor into the game’s FPS. Polycount, post processing effects, lighting, particles etc. Also each player’s computer will give them a different degree of performance. The only way to guarantee a target FPS is to release your game on console where everyone has the same hardware running the game.

Finally everyone has the misconception that high FPS in games is the be all and end all when its really not. Consistent FPS is what matters. The human eye cannot see anything above 24 - 30 fps. In traditional animation, you’re pretty much always going to get 24 fps because that’s the number of frames they draw to give the smoothest presentation. In video games its different because everything is rendered in real time. You’re not simply flipping through a series of static pages at a pre-determined frame rate. Every area of the game is going to have varying degrees of scene complexity and its that complexity that causes slowdown. Good design means that you can guarantee that the framerate on the vast majority of video cards is never going to drop below 24 frames per second. Higher is absolutely useless, its just means that your videocard is better than what you need to run the game. The only reason you want a video card capable of 60fps is to guarantee that it has so much power that you’ll never dip below 24fps.
A simple analogy would be the movie Speed staring Keanu Reeves and Sandra Bullock. There’s a bomb on their bus that will go off if they drop below 50 miles per hour. For the entire movie they make sure they’re driving at 60 - 70mph. In all honesty they could have driven at 51mph the entire time and technically they would have been safe but due to inconsistencies in the road like old ladies pushing baby carriages full of cans, they drive a lot faster than they should because they don’t want to explode. FPS in games is like that. The extra speed gains you nothing, but its better to have more to guarantee you don’t dip below 24.

It’s a detailed explanation but I don’t think it answers the question. I asked a similar question here.

I did answer that question though in the second paragraph.

The frame rate of your animation is
determined by how many key frames are
stored in the animation itself. To get
the look you want for your animations,
you wouldn’t necessarily only have 8 -
16 frames, you could simply hold onto
a specific keyframe for longer. In
fact the easiest way to achieve this
look would be to double the number of
frames not reduce them.

I’m not an animator but I do have some experience with it. Its a visual look that you’re trying to achieve not a technical one so do whatever is necessary to get it to look right in your software package. As I said, if you hold a frame for longer than you normally would, or do transitions more quickly it should give you the desired result.

Frame rates for the game are all based around the factors I detailed in the second part of my answer so if you keep that in mind, your game FPS will be high and won’t affect the playback rate of your animations at all.

Think of your animation as a timeline rather than a frames per second. The rate at which it plays back doesn’t change when the game’s FPS changes. So if you have an animation that uses 60 frames, it will play back over a period of 2 seconds regardless of the game’s FPS. A quick search on adjusting the playback rate of an animation gave me this result:

Also this is a good video to help explain things if that’s easier for you

I see what you are saying but this is not the problem though. I do use stepped interpolation or duplicate key-frames to hold the poses longer on the DCC package. But whatever you do, Unreal will evaluate sub-frames between frames and therefore display stuff you do not want to see. Try it for yourself if you want. Make a cube, make it rotate from one pose to the next in a single frame, for example 4 to 5. Once it runs in the engine you will see a linear transition happen during the pose switch from 4 to 5. And I understand why this is happening, Unreal evaluates animation between frames of my DCC package, that being said this effect is not desired and instead we should be able to make the animation evaluate at the frame rate it was created.

Ok interesting. Yeah like I said, I’m not an animator specifically - jack of all trades mostly. Maybe we can get an answer from one of the guys at Epic.
Changing the playback rate obviously won’t help either then as that’s just going to make it look like slow motion or fast forward.

What happens if you get your animation looking the way you want using the method I suggested of having it hold on specific poses for longer and then place a keyframe at every frame so UE can’t really affect the overall look? You’d essentially be baking down your animation rather than leaving any open frames.

What you suggest is actually my current half-successful workaround. Although my animation has less key-frames than a normal one what I do is I actually plot and export all my animations as 120 fps to reduce the chances for the engine to fall on a sub-step, that seems to produce slightly better result but it still interpolates. Also, it is loads of data.

Ok guys so I did a test myself going with the assumption that the default settings weren’t working and found that there are some extra import options(Animation Length) when importing an animation that might help you. Also want to mention I’m running the latest update on 4.7.

At the end however it turns out the default settings worked fine as well so I’m not sure what problem you’re having but here’s a video showing my setup and results:

Thanks for taking the time TorQueMod. What you show is working indeed, but this is not exactly what we are talking about. The issue we are talking about is quite subtle. I am attaching a ZIP file for you with a couple of FBXs ready for engine and a MAX scene. You will notice that you can actually see or feel the cube rotating from pose to pose compared to how it behave in the DCC package. It is even more obvious if you change the rate or scrub using the timeline. This effect sadly is even more noticeable on a full character.

Apologies for not knowing the terminology but what do you mean the DCC package? Do you mean in max?
Maybe its because I’m not an animator, but it looks fine to me when I import it into UE4. It looks exactly the same as it does in the max file. The cube rolls forward through all of the frames until between keys 50 and 60 where it rotates backward.
Is this the issue?

DCC = Digital Content Creation. A way to encapsulate Max, Maya, Softimage, Blender in a single word. No the issue is that if you look carefully it will not go from one pose to the other in a single frame, it will display some in betweens, subtle but noticeable. If you want to see the effect in a very obvious manner just set the rate scale of that animation to 0.1 in UE4.

Ahh ok DCC now makes sense :slight_smile:
Well yeah buts its creating those in-betweens inside max as well to make creating an animation less time consuming. That’s why I suggested baking down your animation so that there’s no chance of anything changing. The other option is to manually place keys at every frame, but I’d imagine the bake animation option of the FBX exporter would solve the issue.

Max will always evaluate at a specific frame rate. No other frames than the ones you see on the timeline will make it to the screen. In Unreal regardless of whether or not the animation is baked per frame there is always a chance that the animation is evaluated and rendered in between Max frames and therefore displaying something you do not wish to see. This is what I am trying to solve. If a sequence is exported at 30 fps it means each pose should last at least 33 milliseconds, I need to find a way for the engine to not evaluate the rig transforms more often then that.

Definitely going to need someone from Epic to take a look at the post then. Hopefully they’ll notice it now. I’d say give them 24 hours.

Ok so maybe it’ll take more than 24 hours for someone at Epic to notice.

In the meantime, workaround explained here.

The human eye cannot see anything above 24 - 30 fps.

Er, no…?

In traditional animation, you’re pretty much always going to get 24 fps because that’s the number of frames they draw to give the smoothest presentation.

Sorry, but that’s just not true. This is just because of old cinema projectors and because celluloid was very expensive. They compensate that with motion blur in movies but even that can’t hide the strobing when moving the camera horizontaly.

Good design means that you can guarantee that the framerate on the vast majority of video cards is never going to drop below 24 frames per second.

No, it’s not. The display the game is running on is running with a fixed refresh rate of 60 Hz in almost all cases. 24 does not only lead to high input latency, it will lead to stuttering movements.

Higher is absolutely useless, its just means that your videocard is better than what you need to run the game. The only reason you want a video card capable of 60fps is to guarantee that it has so much power that you’ll never dip below 24fps.

Jesus.

1 Like