Animation Easing Styles

Animation easing styles are now enabled!

What is an easing style?

An easing style defines the interpolation method to be used when moving between Pose A and Pose B. We currently support 5 styles:
-Linear (Default)
-Elastic (my personal favorite)

Here’s an example of some easing styles being used. The following animation is achieved using only a single keyframe:

The torso uses Elastic, arms use Bounce and legs use Cubic! Check it out here. Simply join and click.

##How To Use Easing Styles In The Editor
(Step 0: Don’t have the animation editor plugin? See here.)

Step 1: Update your editor! A new version has been released today which contains many bug fixes that were reported on the official GitHub issue tracker. To update, open studio and under the “Plugins” tab click “Manage Plugins”

Step 2: Insert a rig and start editing it with the editor.

Step 3: Click on a pose (those pink squares, that represent a pose for each individual joint) and you will be brought to the easing styles menu. Clicking a pose tells the track to switch to that style. So to tween from PoseA to PoseB using Elastic, set PoseA’s EasingStyle to Elastic

(Optional, but preferred Step 4: Report any bugs you find HERE )

##What If I Find A Bug?
Post about it here with the title “Animation Editor: your issue here”. Post reproduction steps if possible! Comments on the editor plugin are too difficult to keep track of. Alternatively if you have any questions you can PM me here or simply reply to this thread.

##Important Note
Easing styles are live on PC and Mac. As ROBLOX gets updated across all platforms, you will see the styles start to work there as well (iOS, Android, Xbox). If a user attempts to play an animation with an easing style but they are on mobile/xbox, the style will simply play as Linear until their platform is updated.

Have fun!


My reaction when:


I noticed you guys have given 4 of the 8 easing styles that we have for guis. Are there any plans to add the other 4? (Sine, Back, Quad, and Quint).

If there isn’t, could you guys do back at least, since elastic is a bit too dramatic for some animations I would want to make?

Also, what is the difference between these two?

1 Like

Constant is a jump without interpolation.

1 Like

Constant is an instant snap. You can tell it to instantly snap at the beginning, middle (inout) or end of the interpolation.

Regarding more easing styles, many were looked at and these were chosen for the release. Sine is too similar to cubic however I do see the use cases for the back easing style so I’ll take a look at that!


Wow I did not realize these were so close to done my life just got like 50 times better

Its about time, no need for extra keyframes to create easing.


Other animation software call this stepped rather than constant.


I’ll take that as a “thank you” ? :wink:


Posted a few issues I have on the gittrack. If I find time I can see if I can add my small changes for you.

I have been waiting for this.

Lua code for the different easing styles:


Not sure if this is the time or place, but I think I made a pull/merge request for the Animation Editor on git. I’m not very fluent in git so you’ll have to bear with me.

I was working with RegisterKeyframeSequence when I noticed this was a feature on the KeyFrames but I didn’t react lol XD
Thought it was something roblox animations did by default somehow…

Not to highjack this thread, cause I really appriciate this addition, but is there a chance you guys are going to add a LoadAnimation(KeyframeSequence) function to Humanoids and Animators?

It would be even greater achivement than this, to be able to dynamically create weapon animations depending on weapon handle attachments etc…

That pull request is into master on your fork, not into master on ROBLOX/Studio-Tools.

1 Like

No. ROBLOX animations are downloaded as assets. Meaning you upload it, then when a client plays an animation you have downloaded the asset on your PC so your client will play the animation for the other client’s character. This allows animations to run a lot faster and smoother than replicating each frame. A way to upload a keyframesequence at runtime would not be an ideal solution to create dynamic animations.

I probably expressed myself wrong by saying dynamic animations. What I mean was not real time generated animations (like being shot in shoulder and generating falling backwards animation).

I meant that when you customize your weapon with tactical handles, then the server will generate custom fire and holding animations to fit that weapons handles. So instead of holding your left arm on the barrel it holds it on the new tactical handle. The animations are generated as KeyframeSequences then the weapon is put in the players backpack.

Big games like Phantom Forces have rescripted the whole animation system to be able to custom create these animations but the system is there, it just doesn’t work in online mode…

Given this explanation, would you still think the function is a bad idea?

This still has the same issue when it comes to how animations are used. They are an asset that is downloaded. In order for this to work, the asset would need to be uploaded somewhere, then redistributed to all clients before it would play for them. That sounds really gross to do at runtime.

Animations don’t just move the joints on the client and replicate that. They inform everybody else that Animation X is being played on rig Y, and all clients animate it themselves.

We would like to have more dynamic animations as part of the ROBLOX animation system, but animations of that type require additional work to have the work correctly in a distributed, networked environment. Simply loading a KeyframeSequence on a client would require that this KeyframeSequence be replicated to all other clients to ensure that everyone sees the animation playing correctly. If we allow the clients to control this, it would introduce potential security and moderation issues. Otherwise, we would need to move all of the calculation and creation of these KeyframeSequences to the server, which will create additional performance issues.

While we would like to create a solution for this problem, with our current staffing and all of the work currently being done to support the new R15 avatars, work on implementing this will not be happening soon.

But it’s created on the server then each client gets a replica, it’s just like creating bricks on a server, is it not?

Maybe I’v understood it wrong but does not uploaded animations still just contains a KeyframeSequence that’s downloaded using the animationId?
If so then what is wrong with skipping the uploading step and using the keyframesequence that already exist?